The FortiGate SSL-VPN pot of gold. CVE-2024-21762 и CVE-2023-27997. 79 рабочих эксплойт-клиентов. 53 аппаратных SKU. 55 сборок FortiOS.
Исследовательский архив. Восстановлен в том виде, в каком был найден. Я не писал эти файлы.
Опубликовано: 1 сентября 2026 года
Этот репозиторий — оркестратор, полезные нагрузки второй стадии и операторские слушатели, которые работают поверх каталога эксплойтов FortiGate SSL-VPN для каждой SKU. Полная история, статистика и заметки по охоте находятся в серии The SSL-VPN pot of gold на Abraxas Labs.
Не запускайте этот материал против любого хоста без явного письменного разрешения как от стороны, разместившей этот репозиторий, так и от владельца целевых систем. Соответствующие CVE были публичными и исправленными до этого релиза. Это дерево предназначено для исследований, обнаружения и исторического анализа.
Я нашёл частный набор инструментов FortiGate SSL-VPN в дикой природе. Первая выгрузка представляла собой каталог рабочих клиентов: файлы вроде exp/exp_60E-v6.4.7.py и exp/exp_1000D-v7.4.0.py. Каждый файл — это клиент повреждения памяти для конкретной SKU и конкретной FortiOS. Два публичных n-day, перештампованных по всему железу и прошивкам, пока папка не стала похожа на каталог запчастей.
Золото — это матрица смещений, а не новая уязвимость. Этот аргумент изложен в Фазе 0 серии. Фаза 1 рассматривает два примитива как поведение. Фаза 2 — это поисковая карта SKU / train / CPU. Фаза 3 — охота.
Этот репозиторий — остальная часть того же набора, а не второе семейство эксплойтов.
exp/ — это клиенты для каждого образа, уже описанные в серии.shellcode/ — это загрузчик, получение импланта и слушатели кражи конфигурации, для вызова которых были написаны эти клиенты.exp_*.py никогда не содержали имплант. Они знали только, как (1) получить сырые байты с «сервера шеллкода» или (2) выполнить GET /s.js и eval. Эти недостающие части находятся здесь.Примитивы:
| Семейство | CVE | Консультация Fortinet | Публичный статус |
|---|---|---|---|
| A | CVE-2024-21762 | FG-IR-24-015 | Assetnote — Two Bytes is Plenty |
| B | CVE-2023-27997 | FG-IR-23-097 | Lexfo — XORtigate, Bishop Fox |
Оба находятся в каталоге известных эксплуатируемых уязвимостей CISA. poc.py не реализует ни одну из этих CVE. Он выбирает и оборачивает два уже классифицированных семейства (chunked-write 21762; enc= heap overflow 27997).
.
├── poc.py # загрузчик pocsuite3 / снятие отпечатка / менеджер процессов
├── s.js # вторая стадия на Node (кража конфигурации)
├── send_cmd.py # обработчик обратного вызова для пути stager
├── init.sh # установка пакетов на рабочую станцию оператора
├── requirements.txt # pwntools
├── exp/
│ └── exp_<SKU>-v<FortiOS>.py
└── shellcode/
├── shellcode_server.py # передача блоба с префиксом длины
├── shellcode_arm # ~2.0 МБ сырой второй стадии
└── shellcode_amd64 # ~2.7 МБ сырой второй стадии
exp/index.html и shellcode/index.html — обычные листинги каталогов Python http.server. Они лишь показывают, что это дерево в какой-то момент размещалось как веб-корень.
Эта копия exp/ — более ранний каталог плюс четыре дополнительных клиента: exp_30E-v6.2.4.py, exp_30E-v6.2.12.py, exp_30E-v6.2.14.py, exp_40F-v7.0.5.py.
poc.py оркестратор (pocsuite3)
│
├─ снятие отпечатка портала ─ VERSION_LIBS (hash → SKU + FortiOS)
├─ выбор файла ────────────── exp/exp_<SKU>-v<ver>.py
│
├─ если клиент типа "stager" (Family A ARM / некоторые amd64)
│ запуск shellcode/shellcode_server.py
│ читает shellcode/shellcode_arm или shellcode_amd64
│ запуск send_cmd.py (ожидание обратного вызова)
│ запуск приёмника конфигурации на :9999
│ запуск выбранного exp_*.py
│
└─ если клиент типа "Node /s.js" (большинство Family B + многие Family A)
раздача s.js по HTTP
запуск приёмника конфигурации на :9999
запуск выбранного exp_*.py
→ межсетевой экран GET /s.js → eval → эксфильтрация
Конвейер одной строкой: идентификация → выбор файла смещений → повреждение sslvpnd → получение импланта → эксфильтрация /data/config/*.gz → архивирование на стороне оператора.
Последний шаг — суть. Попадание — это неаутентифицированное выполнение кода в sslvpnd на самом межсетевом экране — терминаторе TLS, политике маршрутизации, VPN-сессиях, часто привязках LDAP/RADIUS. FortiOS не предоставляет полезного /bin/sh. Публичные исследования и этот набор оба идут через внутренний помощник команд и/или /bin/node, который FortiOS действительно поставляет. Считайте подтверждённое попадание компрометацией сетевого периметра, а не падением демона. См. Что означает попадание.
poc.py — загрузчикОператорский интерфейс (pocsuite3 POCBase). Он не реализует CVE-2024-21762 или CVE-2023-27997.