{"schema":"threatline.record/2","record":{"id":"CVE-2026-91085","aliases":[],"summary":"Apache Karaf: config:install missing ACL entry allows privilege escalation to admin","details":"Apache Karaf's shell/SSH command security is enforced by per-scope ACL configuration files (etc/org.apache.karaf.command.acl.<scope>.cfg). SecuredSessionFactoryImpl.checkSecurity() resolves the roles required for an invocation and, when no ACL rule matches the command, fails open: ACLConfigurationParser.Specificity.NO_MATCH sets passCheck = true. The safety valve for this, karaf.secured.command.compulsory.roles, ships commented out in etc/system.properties, so an unmatched command is allowed for any authenticated user.\n\n\nThe shipped org.apache.karaf.command.acl.config ACL (assemblies/features/standard/src/main/feature/feature.xml, mirrored into instance/.../etc/org.apache.karaf.command.acl.config.cfg) has no install entry. It restricts delete to admin, restricts edit/property-*/update on the jmx.acl.*, org.apache.karaf.command.acl.* and org.apache.karaf.service.acl.* PIDs to admin, and allows manager for everything else, but config:install was simply unmatched, and therefore allowed for any authenticated user, including one holding only the viewer role.\n\n\n\n\nconfig:install <url> <finalname> fetches url and writes it into ${karaf.etc} as finalname. It calls PathUtils.checkWithin() to block .. traversal outside karaf.etc, but that folder holds every security-relevant file Karaf ships: users.properties, keys.properties, host.key, and all org.apache.karaf.*.acl.* files, including the very ACL file that (mis)governs this command. With -o/--override, an existing file is overwritten with attacker-controlled bytes fetched from an arbitrary URL.\n\n\n\n\nBecause felix.fileinstall.dir = ${karaf.etc} (etc/config.properties), Felix FileInstall also watches and reloads any .cfg file dropped there, closing the loop without requiring a restart.\n\n\n\n\nBy contrast, bundle:install, feature:install and kar:install are all admin-only in their own ACLs, and config:delete is admin in this same ACL, config:install was the outlier.\n\nMitigationAdd install = admin in etc/org.apache.karaf.command.acl.config.cfg (create the file is absent), and/or set karaf.secured.command.compulsory.roles=admin in etc/system.properties (and restart) to make unmatched commands fail closed by default.","categories":["Unclassified"],"product":"Apache Karaf","vendor":"Apache Software Foundation","ecosystem":null,"affected_ranges":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-91085","source_modified_at":"2026-10-01T14:18:12.957Z","fetched_at":"2026-10-23T18:52:38.922436Z","product":"Apache Karaf","vendor":"Apache Software Foundation","versions":[{"status":"affected","version":"0","lessThan":"4.4.12","versionType":"semver"}],"defaultStatus":"unaffected"}],"fixed_versions":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-91085","source_modified_at":"2026-10-01T14:18:12.957Z","fetched_at":"2026-10-23T18:52:38.922436Z","package":{"name":"Apache Karaf","ecosystem":null},"version":"4.4.12","basis":"first unaffected version stated in the CVE record"}],"cvss":6.3,"severity":"Medium","kev":{"listed":false},"epss":{"probability":0.00366,"percentile":0.29321,"score_date":"2026-10-23"},"published_at":"2026-09-29T08:39:33.209Z","modified_at":"2026-10-01T14:18:12.957Z","provenance":[{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-91085","fetched_at":"2026-10-23T18:52:38.922436Z","source_modified_at":"2026-10-01T14:18:12.957Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-91085","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23"}],"sources":["CVE List","EPSS"],"references":[{"source":"CVE List","url":"https://karaf.apache.org/security/cve-2026-91085.txt","tags":["vendor-advisory"]}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","cvss_source":"CISA ADP","ssvc":{"exploitation":"none","automatable":"no","technical_impact":"partial","assessed_at":"2026-10-01T14:17:41.304608Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":null,"confidence":"unknown","reviewed":false},"change_timestamp":"2026-10-01T14:18:12.957Z","content_hash":"c87c838a4575afc5dd63f7c267b496415ea15a3c03f0d459d4a019f66c55328e"}}
