
This repository provides production-ready detection engineering content for **CVE-2025-25257**, a pre-authentication SQL Injection vulnerability in Fortinet FortiWeb Fabric Connector versions 7.0 through 7.6.x. Successful exploitation can lead to Remote Code Execution without any prior authentication.
Этот репозиторий предоставляет готовое к использованию содержимое для инженерии обнаружения CVE-2025-25257 — уязвимости SQL-инъекции без аутентификации в Fortinet FortiWeb Fabric Connector версий с 7.0 по 7.6.x. Успешная эксплуатация может привести к удалённому выполнению кода (RCE) без какой-либо предварительной аутентификации.
Данное содержимое предназначено только для защитного использования. Оно рассчитано на команды центров операций безопасности (SOC), инженеров по обнаружению и охотников за угрозами. Эксплойт-код не включён.
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-логах и сетевом трафике.
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/. Каждый файл нацелен на конкретную категорию обнаружения.
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"
Запустите YARA-правило для лога:
yara rules/yara/cve_2025_25257_http.yar /var/log/nginx/access.log
Ожидаемый вывод:
CVE_2025_25257_SQLi_AuthHeader /var/log/nginx/access.log
cve-2025-25257-detection/
├── README.md
├── LICENSE
├── .gitignore
├── rules/
│ ├── yara/
│ │ ├── cve_2025_25257_http.yar
│ │ ├── cve_2025_25257_webshell.yar
│ │ └── cve_2025_25257_payload.yar
│ ├── kql/
│ │ ├── 01_web_exploitation.kql
│ │ ├── 02_process_spawn.kql
│ │ ├── 03_command_execution.kql
│ │ ├── 04_file_creation.kql
│ │ ├── 05_persistence.kql
│ │ ├── 06_config_modification.kql
│ │ └── 07_threat_hunting.kql
│ ├── sigma/
│ │ ├── cve_2025_25257_sqli.yml
│ │ └── cve_2025_25257_process_spawn.yml
│ └── splunk/
│ ├── web_exploitation.spl
│ └── process_anomaly.spl
├── docs/
│ ├── iocs.md
│ ├── mitre_attack.md
│ └── false_positive_analysis.md
├── src/
│ ├── poc.py
│ └── lab/
│ └── nginx.conf
└── sysmon/
└── sysmon_config_snippet.xml
Этот репозиторий предоставлен только для защитных и образовательных целей. Всё содержимое для обнаружения предназначено для помощи командам безопасности в выявлении и реагировании на попытки эксплуатации. Не используйте никакое содержимое этого репозитория против систем, которыми вы не владеете или на тестирование которых не имеете явного письменного разрешения.
Этот проект лицензирован по лицензии MIT. Подробности см. в LICENSE.
| Поле | Детали |
|---|
| 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) |
| 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 | Средний |
| Файл | Описание |
|---|
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 | Расширенный запрос для охоты за угрозами |