【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

栏目: Java · 发布时间: 5年前

内容简介:本文为《嘿,各位大佬们:我非常激动向你们介绍一个我同事(ID为Xel)和我在一次渗透测试中发现的新漏洞:CVE-2018-11795
【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

本文为《 CVE-2018-11759]Apache mod_jk access control bypass 》的翻译文章。

嘿,各位大佬们:

我非常激动向你们介绍一个我同事(ID为Xel)和我在一次渗透测试中发现的新漏洞:CVE-2018-11795

一年前,我在Wordpress上面才拥有我的第一个CVE,但是现在我们又搞到了第二个!

漏洞概要

漏洞详情

比对CVE-2018-1323的漏洞补丁

在我们一位客户的一次基于Apache mod_jk 模块的JBoss / Tomcat 网络服务器进行渗透测试时候,我们发现服务器上存在CVE-2018-1323漏洞(是由Biznet Bilisim A.S.公司的Alphan YAVAS发现并提交的),这会影响到mod_jk模块,同时所影响版本的范围到1.2.42。

为理解其漏洞原理,我们分析了1.2.43版本的mod_jk 补丁。在这个过程中,我们意识到这个漏洞是一个路径穿越问题,是基于Apache httpd、Tomcat或者其他 Java 服务器的,而且关于他们在处理当用分号进行跨目录路径遍历时各自路径解析的差异点。

Apache httpd将url中的分号视作路径解析中的普通字符,然而Tomcat却将他们当作查询分隔符(和”?”类似)。因此,攻击者可以获取到例如这样的路径: http://server/java_app/..; ,但是对于httpd来中,这并没有触发服务器,并跳转到对应的目录下,而仅仅是被原封原样地转发到了Tomcat上,而且地址尾部会被解析为 .. 。*

译者注:”.. “是两个点加一个空格

这就允许攻击者可以获取到本不应该在Tomcat上可以访问的资源。

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

图1:比对CVE-2018-1323我们现在已经确定了这个漏洞其实并未完全挖掘出来,因为mod_jk的补丁虽然确实修复了针对mod_jk的特定路径遍历攻击,但是还是没有解决mod_jk对分号路径解析方式的核心问题。

探测JK状态管理器

探测jkstatus

jkstatus是mod_jk模块的管理界面。当设为读写权限的时候,它允许通过配置AJP连接Java Web服务器来代理HTTP请求。

通常,我们可以限制对jkstatus的访问,比如使用如下的httpd指令:

<Location /jkstatus>
JKMount jk-status
Require ip 127.0.0.1
</Location>

这条指令会阻拦任何外部资源对jkstatus的访问。

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

我们发现通过在 /jkstatus 后面注入分号,就可以绕过这样的限制。

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

图3:jkstatus访问控制绕过(分号注入)上图可以看到,在url分号之后提交的get参数,就可以成功向jkstatus请求修改其访问权限的配置。

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

图4:url中分号后面get参数部分能被解析如果给jkstatus设定成具有读写访问权限的配置,要绕过jkstatus访问控制的话,其产生的影响就等同于通过更改工作人员使用的端口来实现对所有由mod_jk供应的应用程序拒绝服务的效果。不仅如此,如果攻击者再将相应的AJP连接到任何一台他所掌控的服务器上,他也可能会劫持到所有由mod_jk供应服务的web应用的流量。

理论上讲,通过将AJP的目标和端口修改为内部主机和其对应的端口,我们也可以进行内部TCP端口扫描,这是因为Tomcat和httpd的jkstatus返回的错误信息不一致的缘故,具体情况取决于提交的AJP端口是否有效 (错误网关与服务不可用的情况) *。我们并不能对这种类型的SSRF攻击造成的全面影响进行预估和考量。

译者注:错误网关:Bad gateway;服务不可用:Service Unavaliable

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

图5:AJP:可以提交任意主机名和端口jkstatus(如果是只读权限的配置)还会公开内部服务器主机名、ip、端口、mod_jk模块服务的服务器和路由、以及文件系统上http服务器的绝对路径。

这种对访问控制权限绕过的手法具有很大的破坏效果,但是必须要注意一点的就是,通过JkMount指令定义任何端点的访问控制都有可能被分号注入绕过。

漏洞索引

mod_jk(1.2.46版本)已经提供了相应补丁,其他的修复措施(注意,并一定能完全防御,只是起缓解作用)包括有:使用例如 /jkstatus* 这样的位置值设定。

Github POC

github上我们的库里面有一个 docker 环境可以拿来测试复现这个漏洞。

漏洞挖掘时间线

  • 2018/09/06:第一次和Apache Tomcat安全团队上报此漏洞
  • 2018/09/06:第一次收到Apache Tomcat安全团队对此漏洞的回应
  • 2018/10/13: mod_jk 1.2.46版本补丁发行
  • 2018/10/31:发布CVE-2018-11759公告
  • 2018/11/01:漏洞揭露公示完毕

漏洞挖掘人员

两位来自immunIT公司的Raphaël Arrouas (ID为Xel)和Jean Lejeune(ID为Nitrax) 同志。

【cve-2018-11759】针对Apache mod_jk 访问控制的绕过方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编程珠玑

编程珠玑

Jon Bentley / 人民邮电出版社 / 2006-11 / 28.0

《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新,新增加的很多例子让我耳目一新。——Steve McConnell,《代码大全》作者  如果让程序员列举出他们喜欢的书籍,Jon Bentley的《编程珠玑》一定可以归于经典之列。如同精美的珍珠出自饱受沙砾折磨的牡蛎,程序员们的精彩设计也来源泉于曾经折磨他们的实......一起来看看 《编程珠玑》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具