【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法
字数 1141 2025-08-29 08:31:48
Apache mod_jk 访问控制绕过漏洞分析 (CVE-2018-11759)
漏洞概述
CVE-2018-11759是Apache mod_jk连接器中的一个访问控制绕过漏洞,影响版本从1.2.0到1.2.44。该漏洞源于HTTP服务器(Apache httpd)和Tomcat在处理路径规范时的差异,允许攻击者绕过由JkMount指令定义的端点访问控制限制。
漏洞原理
路径处理差异
- Apache httpd:将URL中的分号(
;)视为普通字符 - Tomcat:将分号视为查询分隔符(类似于
?)
这种差异导致当访问类似http://server/java_app/..;的路径时:
- httpd会将其视为普通路径,不进行目录跳转
- Tomcat会将其解析为
..(上级目录),从而可能访问到本不应公开的资源
与CVE-2018-1323的关系
该漏洞是对CVE-2018-1323补丁的进一步研究发现的。虽然1.2.43版本修复了特定路径遍历攻击,但未解决mod_jk对分号路径解析的核心问题。
漏洞影响
jkstatus接口绕过
jkstatus是mod_jk的管理界面,通常配置如下:
<Location /jkstatus>
JKMount jk-status
Require ip 127.0.0.1
</Location>
攻击者可以通过在/jkstatus后注入分号来绕过IP限制:
http://target/jkstatus;?cmd=...
影响程度取决于权限设置:
-
只读权限:
- 暴露内部服务器主机名、IP和端口
- 泄露mod_jk服务的服务器和路由信息
- 获取文件系统上http服务器的绝对路径
-
读写权限:
- 修改AJP配置导致拒绝服务
- 劫持所有mod_jk服务的web应用流量
- 进行内部TCP端口扫描(基于错误信息差异)
其他端点绕过
任何通过JkMount指令定义的端点访问控制都可能被分号注入绕过。
漏洞复现
测试环境
GitHub上提供了Docker环境用于复现此漏洞。
复现步骤
-
访问受保护的jkstatus接口:
http://target/jkstatus(应被IP限制拦截)
-
使用分号注入绕过:
http://target/jkstatus; -
如果具有读写权限,可尝试修改AJP配置:
http://target/jkstatus;?cmd=change&w=worker1&p=8009
修复方案
- 升级mod_jk:升级到1.2.46或更高版本
- 临时缓解措施:
- 使用通配符模式匹配位置值,如
/jkstatus* - 严格限制jkstatus接口的访问权限
- 在生产环境中禁用jkstatus的读写权限
- 使用通配符模式匹配位置值,如
时间线
- 2018/09/06:漏洞初次报告
- 2018/10/13:mod_jk 1.2.46发布补丁
- 2018/10/31:CVE-2018-11759公告发布
- 2018/11/01:漏洞公开披露完成
总结
CVE-2018-11759展示了中间件组件间规范差异可能导致的安全问题。管理员应定期更新组件,并严格审查访问控制配置。对于关键管理接口,建议采用多层防护措施,而不仅依赖单一访问控制机制。