Description
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.


The 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.




config: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.




Because 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.




By 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.

MitigationAdd 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.
Published: 2026-09-29
Score: 6.3 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Privilege Escalation
Action: Patch
AI Analysis

Impact

Apache Karaf uses per-scope ACL files to enforce command access. The config:install command was missing an ACL entry, causing the ACL resolver to fall back to an open (pass‑check) path when no rule matched. As a result, any authenticated user could invoke config:install and deploy arbitrary configuration files into the Karaf etc directory. These files include security‑related properties and other ACL definitions, allowing the attacker to modify or overwrite ACL files, thereby granting themselves administrative privileges. The flaw fundamentally breaks the intended isolation between ordinary users and privileged administrative operations, leading to full control of the Karaf instance.

Affected Systems

The affected product is the Apache Karaf container from the Apache Software Foundation. The flaw exists in the default command ACL configuration (etc/org.apache.karaf.command.acl.config.cfg) and the general shell/SSH command‑execution machinery. No specific version numbers are listed in the advisory, so any installation of Apache Karaf that retains the shipped ACL configuration without a later patch is susceptible.

Risk and Exploitability

Because an attacker only needs to be an authenticated user with access to the Karaf shell or SSH, the exploit requires no elevated privileges or additional software. The EPSS score is listed as <1%, indicating a very low probability of real‑world exploitation, yet the impact is severe when the vulnerability is present. The CVSS score of 6.3 (medium severity) reflects the vulnerability’s potential for privilege escalation via unrestricted command execution. The issue is not listed in the CISA KEV catalog, so no proven public exploits are documented as of the data available.

Generated by OpenCVE AI on October 1, 2026 at 16:58 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Add the ACL rule 'install = admin' to etc/org.apache.karaf.command.acl.config.cfg if it is missing
  • Set karaf.secured.command.compulsory.roles=admin in etc/system.properties and restart Karaf to enforce a closed safety valve
  • Upgrade Apache Karaf to a release where the config:install ACL entry is correctly protected, or apply the vendor’s security patch if one is available

Generated by OpenCVE AI on October 1, 2026 at 16:58 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 07 Oct 2026 20:30:00 +0000

Type Values Removed Values Added
CPEs cpe:2.3:a:apache:karaf:*:*:*:*:*:*:*:*

Thu, 01 Oct 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 6.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L'}

ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 30 Sep 2026 03:45:00 +0000

Type Values Removed Values Added
First Time appeared Apache
Apache karaf
Vendors & Products Apache
Apache karaf

Tue, 29 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
Description 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. The 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. config: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. Because 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. By 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. MitigationAdd 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.
Title Apache Karaf: config:install missing ACL entry allows privilege escalation to admin
Weaknesses CWE-862
References

cve-icon MITRE

Status: PUBLISHED

Assigner: apache

Published:

Updated: 2026-10-01T14:18:12.957Z

Reserved: 2026-09-14T17:55:38.562Z

Link: CVE-2026-91085

cve-icon Vulnrichment

Updated: 2026-09-29T09:15:47.789Z

cve-icon NVD

Status : Analyzed

Published: 2026-09-29T09:17:10.347

Modified: 2026-10-07T20:11:43.353

Link: CVE-2026-91085

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-01T17:00:15Z

Weaknesses