{"id":30427,"date":"2026-09-29T20:31:56","date_gmt":"2026-09-29T12:31:56","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-91012"},"modified":"2026-09-29T20:31:56","modified_gmt":"2026-09-29T12:31:56","slug":"cve-2026-91012","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-91012","title":{"rendered":"CVE-2026-91012 &#8211; org.apache.karaf.config.core.impl.ConfigRepositoryImpl#update(pid, properties),\nwhich back"},"content":{"rendered":"<p>org.apache.karaf.config.core.impl.ConfigRepositoryImpl#update(pid, properties),<br \/>\nwhich backs the &#8220;config&#8221; MBean and the config:* shell commands, derives the file<br \/>\nit writes a configuration to from caller-supplied input without checking that<br \/>\nthe result stays inside\u00a0${karaf.etc}:<\/p>\n<p>  *  if the submitted property map contains a\u00a0felix.fileinstall.filename\u00a0entry, that value is turned directly into a\u00a0File\u00a0(getCfgFileFromProperty), so it can point to any absolute path the Karaf process can write to;<br \/>\n  *  otherwise the configuration PID is concatenated verbatim into the target file name (generateConfigFilename(): new File(karaf.etc, pid + &#8220;.cfg&#8221;)), so a PID containing &#8220;..&#8221; segments resolves outside\u00a0${karaf.etc}.\u00a0createFactoryConfiguration()\u00a0has the same issue via the factory PID\/alias.<\/p>\n<p>Both code paths are reachable by any caller holding the &#8220;manager&#8221; role under Karaf&#8217;s shipped command\/JMX ACL (org.apache.karaf.command.acl.conf.cfg:\u00a0&#8220;update = manager&#8221;). 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 &#8220;admin&#8221; (etc\/users.properties,\u00a0etc\/*.acl.*.cfg,\u00a0etc\/org.apache.karaf.management.cfg, and similar), allowing a manager-role user to grant themselves the admin role or otherwise take over the container.<\/p>\n<p>ConfigMBeanImpl.install()\u00a0and the\u00a0config:install\u00a0shell command already guarded the equivalent risk on their own code path with a\u00a0finalname.contains(&#8220;..&#8221;)\u00a0string check, but that check does not stop absolute paths or symlink-based escapes, and it was never applied to\u00a0ConfigRepositoryImpl.update()\u00a0\/\u00a0createFactoryConfiguration()\u00a0at all.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>org.apache.karaf.config.core.impl.ConfigRepositoryImpl#update(pid, properties),<br \/>\nwhich backs the &#8220;config&#8221; MBean and the config:* shell commands, derives the file<br \/>\nit writes a configuration to from calle<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-30427","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/30427","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}