CVE-2026-91048 Apache Karaf JDBC 命令权限绕过漏洞
影响低权限认证用户可绕过权限限制实现远程代码执行
Apache Karaf 的 jdbc 与 jms shell 命令作用域缺少对应的 ACL 配置文件(org.apache.karaf.command.acl.jdbc.cfg),导致命令守卫 SecuredSessionFactoryImpl 将无匹配 ACL 规则的命令视为允许执行。任何已认证的 shell 会话(包括仅有 viewer 角色的用户)都能执行全部 jdbc:* 与 jms:* 命令,进而通过 jdbc:ds-create 注入恶意 JDBC URL 触发代码执行。
影响范围
Apache Karaf 中启用了命令 ACL/命令守卫机制且包含 jdbc、jms shell 命令作用域的版本;具体受影响版本范围暂无公开信息。
漏洞详情
漏洞属于权限校验缺失导致的权限提升。Karaf 的命令守卫在找不到命令对应的 ACL 规则时默认放行,而 jdbc 与 jms 作用域未随发行包提供 ACL 配置文件,因此 viewer 等低权限角色也能调用这些命令。jdbc:ds-create 会把攻击者完全可控的 JDBC URL 写入 pax-jdbc-config 的工厂配置且不做校验,pax-jdbc-config 会据此创建真实 DataSource;部分 JDBC 驱动(如 H2 的 INIT=RUNSCRIPT)会在建立连接时执行代码或 SQL,从而实现任意代码执行,绕过了原本保护 shell:exec 的 admin 角色限制。
利用条件与风险
利用前提是攻击者已拥有一个通过认证的 shell 会话(哪怕只有 viewer 角色),且目标环境启用了 jdbc/jms 命令并存在可被利用的 JDBC 驱动。实战中可形成从低权限到 RCE 的完整利用链,风险较高。
修复建议
官方修复方案暂无公开信息,建议关注 Apache Karaf 官方安全公告与版本更新。临时缓解措施:为 jdbc 与 jms 命令作用域补充 ACL 配置文件并限制为 admin 角色,或禁用/移除不需要的 jdbc、jms shell 命令,同时收紧 shell 访问权限。
The jdbc shell command scope shipped no org.apache.karaf.command.acl.jdbc.cfg. Karaf’s command guard (SecuredSessionFactoryImpl) treats a command with no matching ACL rule as allowed, so any authenticated shell session (including one holding only the viewer role) could run every jdbc:* command. jdbc:ds-create stores a fully attacker-controlled JDBC URL into a pax-jdbc-config factory Configuration with no validation. pax-jdbc-config reactively turns that into a live DataSource. Several JDBC drivers run code or SQL at connection time based on URL parameters (e.g. H2 INIT=RUNSCRIPT), so a viewer-level shell user could reach arbitrary code execution, bypassing the admin-role gate that already protects shell:exec. This is a privilege-escalation-to-RCE chain, not merely an “admin misconfiguration”.
The same applies to jms:* shell commands.