【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=...

影响程度取决于权限设置:

  1. 只读权限

    • 暴露内部服务器主机名、IP和端口
    • 泄露mod_jk服务的服务器和路由信息
    • 获取文件系统上http服务器的绝对路径
  2. 读写权限

    • 修改AJP配置导致拒绝服务
    • 劫持所有mod_jk服务的web应用流量
    • 进行内部TCP端口扫描(基于错误信息差异)

其他端点绕过

任何通过JkMount指令定义的端点访问控制都可能被分号注入绕过。

漏洞复现

测试环境

GitHub上提供了Docker环境用于复现此漏洞。

复现步骤

  1. 访问受保护的jkstatus接口:

    http://target/jkstatus
    

    (应被IP限制拦截)

  2. 使用分号注入绕过:

    http://target/jkstatus;
    
  3. 如果具有读写权限,可尝试修改AJP配置:

    http://target/jkstatus;?cmd=change&w=worker1&p=8009
    

修复方案

  1. 升级mod_jk:升级到1.2.46或更高版本
  2. 临时缓解措施
    • 使用通配符模式匹配位置值,如/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展示了中间件组件间规范差异可能导致的安全问题。管理员应定期更新组件,并严格审查访问控制配置。对于关键管理接口,建议采用多层防护措施,而不仅依赖单一访问控制机制。

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的管理界面,通常配置如下: 攻击者可以通过在 /jkstatus 后注入分号来绕过IP限制: 影响程度取决于权限设置: 只读权限 : 暴露内部服务器主机名、IP和端口 泄露mod_ jk服务的服务器和路由信息 获取文件系统上http服务器的绝对路径 读写权限 : 修改AJP配置导致拒绝服务 劫持所有mod_ jk服务的web应用流量 进行内部TCP端口扫描(基于错误信息差异) 其他端点绕过 任何通过 JkMount 指令定义的端点访问控制都可能被分号注入绕过。 漏洞复现 测试环境 GitHub上提供了Docker环境用于复现此漏洞。 复现步骤 访问受保护的jkstatus接口: (应被IP限制拦截) 使用分号注入绕过: 如果具有读写权限,可尝试修改AJP配置: 修复方案 升级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展示了中间件组件间规范差异可能导致的安全问题。管理员应定期更新组件,并严格审查访问控制配置。对于关键管理接口,建议采用多层防护措施,而不仅依赖单一访问控制机制。