从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

从F5 BIG-IP RCE漏洞(CVE-2023-46747)来看请求走私的利用价值

盛邦安全 技术 2023-11-07 10:01:44
45768
收藏

导语:本文将对请求走私漏洞和CVE-2023-46747做一个详细介绍和分析。

0x01 前言

F5 BIG-IP广域流量管理器是一种网络流量管理设备,用于提升链路性能与可用性。F5在金融行业具有特别广泛的使用量,做过各大银行攻防演练的小伙伴对这个系统应该不会陌生。

最近爆出的CVE-2023-46747漏洞能达到远程RCE的效果,属于严重级别的安全漏洞。有意思的是这个漏洞和“AJP请求走私”有关。本文将对请求走私漏洞和CVE-2023-46747做一个详细介绍和分析。

0x02 AJP请求走私介绍

较早出现的AJP请求走私漏洞是CVE-2022-26377,关于该漏洞的详细信息已经有作者进行过分析,感兴趣的读者可以查看原文https://www.ctfiot.com/44809.html,这里我们关注的是AJP请求走私漏洞的危害。

AJP请求走私漏洞影响Apache Httpd < 2.4.54,注意这里直接受影响的并不是tomcat,所以并不是所有的java网站都受请求走私漏洞的影响,而是只有启用了httpd服务的网站才受此漏洞影响,类似于现在前后端分离中nginx服务的作用。在F5 BIG-IP中启动的WEB服务的架构如图2.1所示,并且在F5-BIG-IP中的httpd版本2.2.15,受CVE-2022-26377漏洞影响。

8.png

图2.1 F5 BIG-IP中的WEB服务架构

9.png

图2.2 F5 BIG-IP中的httpd版本

AJP请求走私漏洞并不是一个高危漏洞,在各个CVSS评分在6.5-7.5之间,所以一直没有受到我的关注,只是觉得这是一个仅供研究没有实际意义的理论漏洞。在这次F5 BIG-IP的RCE漏洞爆出之后,我才重新对这个漏洞进行研究。关于此漏洞的详细理论可以参考上面的文章,这里主要总结下面的几个关键点:

1) 浏览器并不能直接发送AJP协议的数据包,需要依赖于Apache的 proxy_ajp 模块进行反向代理,暴露成 HTTP 协议给客户端访问。

2) AJP协议对于POST类型的HTTP请求会分成 header 和 body 两个数据包发送,由于处理body数据时,其中前面四位固定格式与Forward Request 数据包完全一样,导致本来应该是一个数据包body部分的数据,可能在进行AJP转发时被识别为另一个数据包。这也是AJP请求走私的本质原理和危害,如图2.3所示。

3) AJP请求走私时需要使用Transfer-Encoding: a, chunked 进行分块传输。

10.png

图2.3 AJP请求走私流程

从图2.3可以看出,整个AJP请求走私的流程是可以把一个HTTP请求经过AJP代理转化之后转化为两个AJP请求,这也是请求走私名字的来源。

0x03 CVE-2023-46747漏洞分析

经过0x02的分析已经对AJP请求走私有了初步的了解,但是实际上还是很难看出这样的漏洞能导致RCE效果。

从官方对这个漏洞的描述中可以看出,此漏洞仅影响开放了TNUI接口的系统(F5 BIG-IP默认启用),这是因为在/config/httpd/conf.d/proxy_ajp.conf文件中定义了AJP代理的配置,其中只会对tmui相关接口进行代理,如图3.1所示。

11.png

图3.1 TMUI接口中的AJP代理配置

如图2.1所示,httpd服务监听的IP是0.0.0.0,所以是可以被外网用户直接访问到的,httpd提供反向代理的功能,把请求转发到tomcat java监听的80端口。最初看到这个漏洞的时候,我一直在java代码中寻找鉴权的逻辑,以图找到通过AJP请求走私绕过鉴权的方式,但是找了很久都没有找到,甚至我在F5的JAVA代码中没有找到任何的Filter。后来在翻阅F5的历史漏洞分析文章中才看到原来F5的鉴权并不在JAVA代码中,而是在httpd模块中。

F5实现了自己的pam进行认证,模块路径为/usr/lib/httpd/modules/,其中,涉及到login.jsp授权的是mod_f5_auth_cookie.so文件。反汇编之后,大概是这样的。我们能够请求/tmui/login.jsp而不需要进行身份验证。

12.png

图3.2 访问/tmui/login.jsp不需要授权

如果直接访问其他jsp文件,在没有通过身份验证的情况下,会被重定向到/tmui/login.jsp

13.png

图3.3访问其它页面需要授权

这也就说明在CVE-2023-46747漏洞的POC利用脚本中通过访问/tmui/login.jsp(这个页面是不需要授权,又可以进行AJP请求转化的页面),在body中添加AJP请求走私的内容,就可以达到绕过鉴权的效果。

poc地址:

https://www.ddpoc.com/poc/DVB-2023-5391.html

在使用的时候注意,部分BurpSuite会去掉Transfer-Encoding头,自动从分块传输转化为普通传输导致检测失败,所以在使用的过程中尽量不要使用Burp代理,如果非要抓包可以使用Charles,如图3.4所示。

14.png

图3.4 使用Burp代码导致检测失败

去掉Burp代理之后,在Charles中可以看到正常的Chunked请求体和请求头,并且运行成功之后可以执行命令,如图3.5所示。

15.png

图3.5 通过POC可以正常绕过权限添加用户并执行命令

关于绕过权限之后F5 BIG-IP执行命令的逻辑在F5历史漏洞CVE-2022-1388中已经使用过,其实F5 BIG-IP本身就提供了接口/mgmt/tm/util/bash为后台用户执行系统命令的,有兴趣的读者也可以看https://mp.weixin.qq.com/s/wUoBy7ZiqJL2CUOMC-8Wdg了解详细的创建用户和后台命令执行的逻辑。

0x4 结论

CVE-2023-46747算是请求走私漏洞的典型应用场景,把一个中低危的漏洞放在特定的场景中放大危害造成RCE效果,整个利用过程就像是为AJP请求走私量身定制一样。

首先,F5 BIG-IP使用httpd来转发前端用户请求,并且对特定接口/tmui/*开启AJP请求转发功能。

其次,F5 BIG-IP的用户鉴权逻辑在httpd的so文件中实现,而不是在java代码中是实现。甚至在后端的java代码中没有任何鉴权逻辑,导致只要请求转发到后端java代码则可以访问到。通过AJP请求走私可以把一个隐私的添加用户的请求隐藏在未授权接口/tmui/login.jsp请求中,导致绕过了F5鉴权的逻辑把添加用户的请求转发到后端java代码。

最后,添加的用户在后台可以直接命令执行导致RCE效果。

参考:

https://mp.weixin.qq.com/s/wUoBy7ZiqJL2CUOMC-8Wdg

https://github.com/W01fh4cker/CVE-2023-46747-RCE

https://www.ctfiot.com/44809.html

https://blog.csdn.net/weixin_39541693/article/details/111112257

如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务