Этот репозиторий предоставляет готовый к использованию контент для разработки детектов по **CVE-2025-25257** — уязвимости предварительной аутентификации SQL-инъекции в Fortinet FortiWeb Fabric Connector версий 7.0–7.6.x. Успешная эксплуатация может привести к удалённому выполнению кода без какой-либо предварительной аутентификации.
Этот репозиторий предоставляет готовое к использованию содержимое для инженерии обнаружения CVE-2025-25257 — уязвимости SQL-инъекции без аутентификации в Fortinet FortiWeb Fabric Connector версий с 7.0 по 7.6.x. Успешная эксплуатация может привести к удалённому выполнению кода (RCE) без какой-либо предварительной аутентификации.
Данное содержимое предназначено только для защитного использования. Оно рассчитано на команды центров операций безопасности (SOC), инженеров по обнаружению и охотников за угрозами. Эксплойт-код не включён.
| Поле | Детали |
|---|---|
| CVE | CVE-2025-25257 |
| EDB-ID | 52473 |
| Продукт | Fortinet FortiWeb |
| Подверженные версии | 7.0.x – 7.6.x |
| Тип уязвимости | SQL-инъекция без аутентификации, приводящая к RCE |
| Вектор атаки | HTTP API endpoint (без аутентификации) |
| Требуется аутентификация | Нет |
| Оценка CVSS | 9.8 (Критическая) |
| Доступен патч | Да, обновление до 7.6.1 или новее |
| Опубликована | 2026-02-04 |
| Исследователь | Milad Karimi (Ex3ptionaL) |
CVE-2025-25257 затрагивает конечную точку API Fabric Connector /api/fabric/device/status в FortiWeb. Заголовок Authorization передаётся напрямую в SQL-запрос без санитизации. Неаутентифицированный злоумышленник может внедрить SQL-синтаксис в значение Bearer-токена, чтобы манипулировать базовым запросом, обойти аутентификацию и, при определённых конфигурациях, достичь удалённого выполнения кода с помощью стековых SQL-команд или примитивов записи файлов.
Уязвимость эксплуатируется по сети без каких-либо учётных данных. Она тривиально обнаруживается в журналах HTTP-доступа, если настроен сбор логов.
Злоумышленник отправляет подготовленный HTTP GET-запрос к API Fabric Connector. Bearer-токен в заголовке Authorization содержит внедрённый SQL. Пример шаблона:
Authorization: Bearer aaa' OR '1'='1
Это заставляет бэкенд-запрос SQL вычисляться как истинный, обходя проверку токена. Дальнейшая эксплуатация может включать UNION-инъекцию для чтения данных или стековые запросы для записи файлов или выполнения команд ОС в зависимости от конфигурации базы данных и привилегий.
Нижеприведённое задокументировано исключительно для целей валидации правил обнаружения.
GET /api/fabric/device/status HTTP/1.1
Host: <fortiweb-ip>
Authorization: Bearer aaa' OR '1'='1
Правила обнаружения в этом репозитории настроены на выявление этого и аналогичных шаблонов инъекций в HTTP-логах и сетевом трафике.
| ID | Категория | Метод обнаружения | Источник | Уровень покрытия |
|---|---|---|---|---|
| D-01 | Эксплуатация веб-запросов | Шаблон SQLi в заголовке Authorization | Логи веб/прокси, WAF | Высокий |
| D-02 | Эксплуатация веб-запросов | Запросы к /api/fabric/device/status без валидного токена | Логи веб-сервера | Высокий |
| D-03 | Аномалия выполнения процессов | Дочерний процесс оболочки, порождённый веб-сервером | EDR / Sysmon | Высокий |
| D-04 | Аномалия выполнения процессов | sh, bash, python как дочерний процесс nginx или httpd | EDR | Высокий |
| D-05 | Подозрительное создание файлов | Веб-шелл, записанный в корневую директорию FortiWeb | EDR / целостность файлов | Средний |
| D-06 | Подозрительное создание файлов | Неожиданные .php, .jsp, .py в веб-директориях | Мониторинг файлов | Средний |
| D-07 | Механизм сохранения | Изменение cron-задач после эксплуатации | EDR / Auditd | Средний |
| D-08 | Механизм сохранения | Создание новой учётной записи администратора через API после SQLi | API / логи аутентификации | Высокий |
| D-09 | Активность контейнера | Аномальный процесс в пространстве имён контейнера FortiWeb | Среда выполнения контейнера | Средний |
| D-10 | Охота за угрозами | Отклонение от базового уровня частоты вызовов API Fabric Connector | SIEM / аналитика | Средний |
| D-11 | Охота за угрозами | IP-адреса, повторяющие шаблоны 200/403 к /api/fabric/ | Логи веб-сервера | Высокий |
| D-12 | Изменение конфигурации | Изменения файлов конфигурации FortiWeb после веб-запроса | Целостность файлов / EDR | Высокий |
| D-13 | Изменение конфигурации | Неожиданные записи в /data/ или /etc/ на устройстве | Auditd / EDR | Средний |
YARA-правила находятся в rules/yara/.
cve_2025_25257_http.yar — обнаруживает шаблоны эксплуатации в файлах HTTP-логов и захваченном трафикеcve_2025_25257_webshell.yar — обнаруживает веб-шеллы, потенциально сброшенные после эксплуатацииcve_2025_25257_payload.yar — обнаруживает артефакты сырых полезных нагрузок на дискеСканирование HTTP-логов доступа:
yara -r rules/yara/cve_2025_25257_http.yar /var/log/fortiweb/
Сканирование корневого каталога веб-сервера на наличие сброшенных файлов:
yara -r rules/yara/cve_2025_25257_webshell.yar /var/www/html/
Сканирование захваченного PCAP:
yara rules/yara/cve_2025_25257_http.yar capture.pcap
Запуск всех правил рекурсивно для каталога:
yara -r rules/yara/ /path/to/scan/
KQL-запросы находятся в rules/kql/. Каждый файл нацелен на конкретную категорию обнаружения.
| Файл | Описание |
|---|---|
01_web_exploitation.kql | Шаблоны SQL-инъекции в заголовке Authorization |
02_process_spawn.kql | Аномальные дочерние процессы веб-сервера |
03_command_execution.kql | Подозрительные цепочки выполнения команд |
04_file_creation.kql | Неожиданные записи файлов в веб-директориях |
05_persistence.kql | Индикаторы механизмов сохранения |
06_config_modification.kql | Изменение файлов конфигурации |
07_threat_hunting.kql | Расширенный запрос для охоты за угрозами |
Sigma-правила находятся в rules/sigma/. Они могут быть преобразованы в любой формат SIEM с помощью sigma-cli или pySigma.
Преобразование в Splunk SPL:
sigma convert -t splunk rules/sigma/cve_2025_25257_sqli.yml
Преобразование в Elastic EQL:
sigma convert -t elasticsearch rules/sigma/cve_2025_25257_sqli.yml
На CLI устройства FortiWeb:
get system status | grep Version
Уязвимые: 7.0.x – 7.6.0
Исправленные: 7.6.1 и новее
Для тестирования обнаружения можно использовать базовый обратный прокси-сервер Nginx, имитирующий уязвимую конечную точку. Для валидации обнаружения на основе логов не требуется фактический образ FortiWeb.
# Запуск контейнера тестовой среды
docker run -d \
--name fortiweb-sim \
-p 8443:443 \
-v $(pwd)/src/lab/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:alpine
# Отправка симулированного эксплуатационного запроса
curl -k -H "Authorization: Bearer aaa' OR '1'='1" \
https://localhost:8443/api/fabric/device/status
Это создаст запись в журнале доступа, соответствующую шаблонам обнаружения D-01.
После отправки тестового запроса проверьте симулированный вывод лога:
docker logs fortiweb-sim | grep "fabric/device/status"
Ожидаемый шаблон записи в логе:
"GET /api/fabric/device/status HTTP/1.1" 401 - "Bearer aaa' OR '1'='1"