← CVE Veritabanı

CVE-2026-91012

Kritik

Teknik Veri (Otomatik)

CVSS Skoru
9.8
EPSS
0.5%
CWE
CWE-22
KEV Durumu
Hayır

Yayım tarihi: 29 Eylül 2026

Etkilenen: apache karaf

org.apache.karaf.config.core.impl.ConfigRepositoryImpl#update(pid, properties) metodu, "config" MBean ve config:* kabuk komutlarını destekler, ancak çağırandan sağlanan girdiden türetilen dosyayı, sonuçların ${karaf.etc} içinde kalıp kalmadığını kontrol etmeden yazar: * Eğer gönderilen özellik haritası bir felix.fileinstall.filename girişi içeriyorsa, bu değer doğrudan bir File'a (getCfgFileFromProperty) dönüştürülür, böylece Karaf işlemi yazabileceği herhangi bir mutlak yola işaret edebilir; * Aksi takdirde, yapılandırma PID'si hedef dosya adına sözdizimsel olarak eklenir (generateConfigFilename(): new File(karaf.etc, pid + ".cfg")), böylece PID içinde ".." segmentleri içeren bir PID, ${karaf.etc} dışına çözümlenir. createFactoryConfiguration() da fabrika PID/takma ad aracılığıyla aynı sorunu paylaşır. Her iki kod yolu da Karaf'ın sevk edilen komut/JMX ACL'si (org.apache.karaf.command.acl.conf.cfg: "update = manager") altında "manager" rolüne sahip herhangi bir çağırıcı tarafından erişilebilir. Bu nedenle, böyle bir kullanıcı, Karaf işlemi yazabileceği herhangi bir dosyaya, ACL'nin otherwise "admin"e (etc/users.properties, etc/*.acl.*.cfg, etc/org.apache.karaf.management.cfg ve benzerleri) ayırdığı dosyalar dahil, saldırganın kontrol ettiği içeriği yazabilir ve böylece bir manager-rol kullanıcı itself "admin" rolünü verebilir veya konteynırı ele geçirebilir. ConfigMBeanImpl.install() ve config:install kabuk komutu, zaten eşdeğer riski kendi kod yolunda finalname.contains("..") string kontrolü ile korumaya almışlardı, ancak bu kontrol mutlak yolları veya sembolik bağlantı tabanlı kaçışları durduramaz ve ConfigRepositoryImpl.update() / createFactoryConfiguration() için hiç uygulanmadı.

Orijinal açıklama (İngilizce)

org.apache.karaf.config.core.impl.ConfigRepositoryImpl#update(pid, properties), which backs the "config" MBean and the config:* shell commands, derives the file it writes a configuration to from caller-supplied input without checking that the result stays inside ${karaf.etc}: * if the submitted property map contains a felix.fileinstall.filename entry, that value is turned directly into a File (getCfgFileFromProperty), so it can point to any absolute path the Karaf process can write to; * otherwise the configuration PID is concatenated verbatim into the target file name (generateConfigFilename(): new File(karaf.etc, pid + ".cfg")), so a PID containing ".." segments resolves outside ${karaf.etc}. createFactoryConfiguration() has the same issue via the factory PID/alias. Both code paths are reachable by any caller holding the "manager" role under Karaf's shipped command/JMX ACL (org.apache.karaf.command.acl.conf.cfg: "update = manager"). Such a user can therefore write attacker-controlled content to any file the Karaf process can write, including files the same ACL otherwise reserves to "admin" (etc/users.properties, etc/*.acl.*.cfg, etc/org.apache.karaf.management.cfg, and similar), allowing a manager-role user to grant themselves the admin role or otherwise take over the container. ConfigMBeanImpl.install() and the config:install shell command already guarded the equivalent risk on their own code path with a finalname.contains("..") string check, but that check does not stop absolute paths or symlink-based escapes, and it was never applied to ConfigRepositoryImpl.update() / createFactoryConfiguration() at all.

Bu CVE için henüz editoryal inceleme yapılmadı. Sadece otomatik teknik veri gösteriliyor.