
Безопасный, ненавязчивый сканер, который обнаруживает уязвимость записи за пределами буфера в FortiOS SSL VPN (CVE-2024-21762) путём сравнения обычных и фрагментированных HTTP POST-ответов.
| Поле | Значение |
|---|---|
| CVE | CVE-2024-21762 |
| Уведомление | FG-IR-24-015 |
| CVSS | 9.8 (Критичный) |
| CWE | CWE-787 (Выход за границы записи) |
| CISA KEV | Да — активно эксплуатируется в реальных атаках |
| Вектор атаки | Сеть (без аутентификации) |
| Затронутый компонент | sslvpnd (демон SSL VPN) |
Уязвимость выхода за границы записи в FortiOS SSL VPN позволяет удаленному неаутентифицированному злоумышленнику выполнить произвольный код или команды через специально сформированные HTTP-запросы. Уязвимость существует в парсере HTTP chunked transfer encoding внутри sslvpnd. Когда демон получает POST-запрос с Transfer-Encoding: chunked, он не проверяет должным образом размеры чанков, что приводит к записи за пределами кучи.
| Ветка | Затронутые | Исправление |
|---|---|---|
| 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 | Все версии | Мигрировать |
Скрипт сравнивает ответ сервера на обычный POST-запрос и на POST-запрос с Transfer-Encoding: chunked к одному и тому же действительному эндпоинту (/remote/logincheck).
Content-Length: Сервер обрабатывает запрос и возвращает HTTP-ответ (200 OK).Transfer-Encoding: chunked: В уязвимых версиях sslvpnd не может обработать chunked encoding и закрывает соединение без ответа (0 байт).Такое различие в поведении подтверждает уязвимость, не вызывая фактическую запись за пределами буфера.
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)
============================================================
| Результат | Значение |
|---|---|
VULNERABLE | Обычный POST отвечает, chunked POST обрывает соединение |
PATCHED | Оба запроса получают HTTP-ответ |
INCONCLUSIVE | Ни один запрос не получил ответа (активно ограничение скорости, повторите позже) |
/remote/logincheck. Если вы получили INCONCLUSIVE, подождите несколько минут и повторите попытку./remote/VULNCHECK в качестве эндпоинта. Этот путь может не возвращать ожидаемый 403 на всех версиях FortiGate, что приводит к ненадежным результатам. Этот скрипт использует /remote/logincheck — известный действительный эндпоинт SSL VPN.