
Scanner seguro e não intrusivo que detecta a vulnerabilidade de escrita fora dos limites do SSL VPN FortiOS (CVE-2024-21762) comparando respostas HTTP POST normais e em blocos.
| Campo | Valor |
|---|
| CVE | CVE-2024-21762 |
| Aviso | FG-IR-24-015 |
| CVSS | 9.8 (Crítico) |
| CWE | CWE-787 (Escrita Fora dos Limites) |
| CISA KEV | Sim - explorado ativamente em ambientes reais |
| Vetor de Ataque | Rede (não autenticado) |
| Componente Afetado | sslvpnd (daemon SSL VPN) |
Uma vulnerabilidade de escrita fora dos limites no FortiOS SSL VPN permite que um atacante remoto não autenticado execute código ou comandos arbitrários através de requisições HTTP especialmente criadas. A vulnerabilidade existe no analisador de codificação de transferência fragmentada (chunked) HTTP dentro do sslvpnd. Quando o daemon recebe uma requisição POST com Transfer-Encoding: chunked, ele falha ao validar corretamente os tamanhos dos fragmentos, causando uma escrita fora dos limites no heap.
| Branch | Afetadas | Corrigidas |
|---|---|---|
| FortiOS 7.4 | 7.4.0 - 7.4.2 | 7.4.3 |
| FortiOS 7.2 | 7.2.0 - 7.2.6 | 7.2.7 |
| FortiOS 7.0 | 7.0.0 - 7.0.13 | 7.0.14 |
| FortiOS 6.4 | 6.4.0 - 6.4.14 | 6.4.15 |
| FortiOS 6.2 | 6.2.0 - 6.2.15 | 6.2.16 |
| FortiOS 6.0 | Todas as versões | Migrar |
O script compara a resposta do servidor a uma requisição POST normal versus uma requisição POST com Transfer-Encoding: chunked para o mesmo endpoint válido (/remote/logincheck).
Content-Length: O servidor processa a requisição e retorna uma resposta HTTP (200 OK).Transfer-Encoding: chunked: Em versões vulneráveis, o sslvpnd não consegue lidar com a codificação fragmentada e fecha a conexão sem responder (0 bytes).Esse comportamento diferencial confirma a vulnerabilidade sem acionar a escrita fora dos limites real.
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> Connection closed (0 bytes) <-- VULNERABLE
Normal POST --> HTTP/1.1 200 OK (N bytes)
Chunked POST --> HTTP/1.1 200 OK (N bytes) <-- PATCHED
python cve_2024_21762_safecheck.py <host> <port>
$ python cve_2024_21762_safecheck.py 10.0.0.1 8443
[*] Target: 10.0.0.1:8443
[*] CVE-2024-21762 - Out-of-Bounds Write in sslvpnd (CVSS 9.8)
[*] Method: Compare normal POST vs chunked POST response
[*] Test 1: Normal POST to /remote/logincheck
Response: HTTP/1.1 200 OK
Size: 722 bytes
[*] Test 2: Chunked POST to /remote/logincheck
Response: empty (connection closed by server)
============================================================
[!] VULNERABLE to CVE-2024-21762
Normal POST works but chunked TE causes connection
drop -> sslvpnd cannot handle chunked TE
Severity: CRITICAL (CVSS 9.8)
CISA KEV: Yes (actively exploited in the wild)
============================================================
| Resultado | Significado |
|---|---|
VULNERABLE | POST normal responde, POST fragmentado fecha a conexão |
PATCHED | Ambas as requisições recebem resposta HTTP |
INCONCLUSIVE | Nenhuma requisição obteve resposta (limitação de taxa ativa, tente novamente mais tarde) |
/remote/logincheck. Se você obtiver INCONCLUSIVE, aguarde alguns minutos e tente novamente./remote/VULNCHECK como endpoint. Esse caminho pode não retornar o 403 esperado em todas as versões do FortiGate, resultando em resultados não confiáveis. Este script usa /remote/logincheck, que é um endpoint SSL VPN conhecido e válido.