
Сканер для CVE-2024-40725 — раскрытие исходного кода Apache HTTP Server; зондирует прямые пути и пути подзапросов, идентифицирует затронутые версии и выводит JSON-отчёты для CI/CD.
Инструмент обнаружения на Python для CVE-2024-40725 — уязвимости раскрытия исходного кода в Apache HTTP Server, затрагивающей версии 2.4.0 и 2.4.61.
Правовое уведомление: Запускайте этот сканер только против серверов, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование может нарушать законы о компьютерных преступлениях (например, CFAA, Computer Misuse Act).
CVE-2024-40725 — это регрессия во внутреннем конвейере обработки запросов Apache, появившаяся в версии 2.4.0 (как неполное исправление для CVE-2024-39884). Когда сервер настроен с использованием устаревших директив AddType (например, AddType application/x-httpd-php .php), внутреннее назначение обработчика Apache молча теряется во время обработки подзапроса (вызываемого DirectoryIndex, mod_rewrite или mod_dir).
В результате интерпретатор PHP-скриптов никогда не вызывается. Вместо этого встроенный default-handler Apache открывает файл с диска и передаёт его сырые байты, включая учётные данные базы данных, ключи API и логику приложения, напрямую клиенту.
Затронутые версии: Apache httpd 2.4.0 – 2.4.61
Исправлено в: Apache httpd 2.4.62+
requestspip install requests
# Клонируйте или скачайте сканер
curl -O https://your-host/cve_2024_40725_scanner.py
# Сделать исполняемым (необязательно)
chmod +x cve_2024_40725_scanner.py
python3 cve_2024_40725_scanner.py --target <URL> [ОПЦИИ]
| Флаг | Тип | По умолчанию | Описание |
|---|---|---|---|
--target | URL | (обязательно) | Базовый URL тестируемого сервера Apache |
--paths | PATH [PATH ...] | встроенный список | Один или несколько путей PHP для прямой проверки |
--wordlist | FILE | — | Путь к файлу списка слов (один путь в строке) |
--no-directory-check | флаг | выкл. | Пропустить проверку подзапроса/индекса каталога (Проба B) |
--timeout | int (секунды) | 10 | Таймаут на запрос |
--delay | float (секунды) | 0.0 | Задержка между запросами (ограничение частоты) |
--no-verify-ssl | флаг | выкл. | Отключить проверку SSL-сертификата |
--output | FILE | — | Записать полный отчёт в формате JSON в этот файл |
--verbose | флаг | выкл. | Включить отладочный вывод |
# Быстрый старт: сканирование localhost со встроенными путями по умолчанию
python3 cve_2024_40725_scanner.py --target http://localhost
# Сканирование конкретных путей
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--paths /index.php /admin/config.php /wp-config.php
# Использование файла списка слов
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt
# Комбинация списка слов + дополнительных путей (объединяются, дубликаты удаляются)
python3 cve_2024_40725_scanner.py \
--target http://192.168.1.10 \
--wordlist php_paths.txt \
--paths /extra/secret.php
# HTTPS с самоподписанным сертификатом
python3 cve_2024_40725_scanner.py \
--target https://myserver.local \
--no-verify-ssl
# Вежливое сканирование с задержкой 1 секунда и JSON-отчётом
python3 cve_2024_40725_scanner.py \
--target http://myserver.local \
--wordlist php_paths.txt \
--delay 1.0 \
--output results.json \
--verbose
# Использование в CI/CD (код выхода 1 = уязвим, 0 = чисто)
python3 cve_2024_40725_scanner.py --target http://localhost || echo "VULNERABLE"
Один путь в строке. Строки, начинающиеся с #, считаются комментариями и пропускаются.
Пустые строки игнорируются. Начальные слэши нормализуются автоматически.
# Часто встречающиеся точки входа PHP
/index.php
/info.php
/phpinfo.php
# Панели администрирования
/admin/index.php
/admin/config.php
# Файлы CMS
/wp-config.php
/wp-login.php
/configuration.php
# Внутренние элементы API
/api/v1/status.php
Сканер выполняет две пробы для каждого пути:
GET /index.php HTTP/1.1
Проверяет, возвращает ли прямой запрос PHP-файла его исходный код.
Актуально для неправильно настроенных серверов, где AddType нарушен даже для прямых запросов.
GET / HTTP/1.1
Запрашивается родительский каталог, а не сам файл. Apache внутренне
разрешает DirectoryIndex → index.php, порождая подзапрос. Это тот самый путь
выполнения кода, где r->handler устанавливается в NULL в Apache 2.4.0–2.4.61.
Проба B — более важный и реалистичный тест. Многие серверы уязвимы только через путь подзапроса, а не через прямой запрос файла.
Сканер проверяет тело ответа на сигнатуры исходного кода PHP:
<?php<?PHP<?=При обнаружении совпадения извлекается фрагмент из 150 символов вокруг места утечки для первичного анализа, без вывода всего тела ответа.
Читает заголовок ответа Server: для определения версии Apache. Помечает серверы,
сообщающие версию 2.4.0 или 2.4.61, ещё до подтверждённой утечки.
Примечание: Усиленные серверы могут скрывать заголовок
Server:(ServerTokens Prod). Сканер в любом случае выполняет все пробы.
============================================================
CVE-2024-40725 -- Apache Source Code Disclosure Scanner
============================================================
Target : http://localhost
Paths : 6
Time : 2024-08-01T12:00:00
[*] Fingerprinting server: http://localhost
Server Header : Apache/2.4.61 (Debian)
Apache Version: 2.4.61
[!] Version is in vulnerable range (2.4.0 - 2.4.61)
[*] Testing 6 path(s)...
--- /index.php
Direct (HTTP 200): OK
Subreq (HTTP 200): LEAKED
[!] VULNERABLE via: subrequest (directory index)
Leaked snippet: '<?php\n$db_pass = "supersecretpassword";'
--- /info.php
Direct (HTTP 404): OK
Subreq (HTTP 404): OK
[+] Safe
============================================================
SCAN SUMMARY
============================================================
Target : http://localhost
Apache Version : 2.4.61
Paths Tested : 6
Vulnerable Paths : 1
Safe Paths : 5
[!] RESULT: VULNERABLE
Vulnerable paths:
* /index.php (trigger: subrequest (directory index))
Remediation:
1. Upgrade to Apache httpd >= 2.4.62
2. Replace 'AddType' with 'SetHandler' in <FilesMatch> blocks
============================================================
--output results.json){
"target": "http://localhost",
"scan_time": "2024-08-01T12:00:00",
"apache_version": "2.4.61",
"apache_in_range": true,
"paths_tested": 6,
"vulnerable_paths": [
{
"path": "/index.php",
"direct_url": "http://localhost/index.php",
"directory_url": "http://localhost/",
"direct_status": 200,
"direct_leaked": false,
"direct_snippet": null,
"directory_status": 200,
"directory_leaked": true,
"directory_snippet": "<?php\n$db_pass = \"supersecretpassword\";",
"server_header": "Apache/2.4.61 (Debian)",
"vulnerable": true,
"trigger": "subrequest (directory index)"
}
],
"safe_paths": [...]
}
| Код | Значение |
|---|---|
0 | Уязвимые пути не обнаружены |
1 | Обнаружен один или несколько уязвимых путей |
Коды выхода делают сканер пригодным для использования в CI/CD-конвейерах и автоматизированных аудитах инфраструктуры.
# Debian / Ubuntu
sudo apt update && sudo apt install apache2
# RHEL / CentOS / AlmaLinux
sudo dnf update httpd
# Проверка версии (должна быть >= 2.4.62)
apache2 -v
AddType на SetHandlerЗамените все директивы AddType, используемые для выполнения PHP:
# ❌ Уязвимые конфигурации
AddType application/x-httpd-php .php
# ✅ Безопасные конфигурации
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
# УЯЗВИМАЯ
<VirtualHost *:80>
DocumentRoot /var/www/html
AddType application/x-httpd-php .php # ← вызывает CVE
DirectoryIndex index.php
</VirtualHost>
# БЕЗОПАСНАЯ
<VirtualHost *:80>
DocumentRoot /var/www/html
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
DirectoryIndex index.php
</VirtualHost>
| CVE | Версия | Описание |
|---|---|---|
| CVE-2024-39884 | 2.4.0 | Первоначальная регрессия раскрытия исходного кода |
| CVE-2024-40725 | 2.4.61 | Неполное исправление — тот же класс ошибки |
| CVE-2024-40898 | 2.4.61 | Отдельный SSRF в mod_rewrite (только Windows) |