CVE-2026-91012

Source
https://cve.org/CVERecord?id=CVE-2026-91012
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-91012.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-91012
Published
2026-09-29T08:34:11Z
Modified
2026-10-09T02:49:30Z
Severity
  • 9.8 (Critical) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
Apache Karaf: Path Traversal in Config Service Allows Manager-to-Admin Privilege Escalation
Details

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.

Database specific
{
    "cna_assigner": "apache",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/91xxx/CVE-2026-91012.json",
    "unresolved_ranges": [
        {
            "extracted_events": [
                {
                    "fixed": "4.4.12"
                }
            ],
            "source": "AFFECTED_FIELD"
        }
    ]
}
References

Affected packages

Git / github.com/apache/karaf

Affected ranges

Type
GIT
Repo
https://github.com/apache/karaf
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Fixed
Database specific
Show details
{
    "cpe": "cpe:2.3:a:apache:karaf:*:*:*:*:*:*:*:*",
    "extracted_events": [
        {
            "introduced": "0"
        },
        {
            "fixed": "4.4.12"
        }
    ],
    "source": "CPE_RANGE"
}

Affected versions

karaf-3.*
karaf-3.0.0
karaf-4.*
karaf-4.0.0.M1
karaf-4.0.0.M2
karaf-4.0.1
karaf-4.0.2
karaf-4.0.3
karaf-4.0.4
karaf-4.1.0
karaf-4.1.1
karaf-4.2.0
karaf-4.2.0.M1
karaf-4.2.0.M2
karaf-4.2.1
karaf-4.2.2
karaf-4.2.3
karaf-4.3.0
karaf-4.3.0.RC1
karaf-4.3.1
karaf-4.3.2
karaf-4.3.3
karaf-4.4.0
karaf-4.4.1
karaf-4.4.2
karaf-4.4.3
karaf-4.4.4
karaf-4.4.5
karaf-4.4.6
karaf-4.4.7
karaf-4.4.8

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-91012.json"