
Инструментарий на Python для аудита Apache HTTP Server против CVE-2026-23918 (HTTP/2 double-free RCE) и 4 связанных CVE. Пассивный сканер с проверкой ALPN + локальный аудитор только для чтения. Без эксплойтов.
| CVE | Серьезность | Компонент | Воздействие | Затронутые версии |
|---|
| CVE-2026-23918 | Высокая (CVSS 8.8) | HTTP/2 | Двойное освобождение / RCE | только 2.4.66 |
| CVE-2026-24072 | Средняя | mod_rewrite (ap_expr) | Повышение привилегий | ≤ 2.4.66 |
| CVE-2026-28780 | Низкая | mod_proxy_ajp | Переполнение кучи | ≤ 2.4.66 |
| CVE-2026-29168 | Низкая | mod_md (OCSP) | Истощение ресурсов | 2.4.30 – 2.4.66 |
| CVE-2026-29169 | Низкая | mod_dav_lock | Разыменование NULL-указателя / DoS | ≤ 2.4.66 |
Все проблемы исправлены в Apache HTTP Server 2.4.67.
Эти инструменты предназначены для использования только в отношении систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное сканирование может быть незаконным в вашей юрисдикции.
Набор инструментов является защитным по замыслу:
Server: и использует стандартный TLS ALPN — тот же механизм, который каждый современный браузер использует для согласования HTTP/2..
├── apache_passive_audit.py # Внешний аудит активов (захват баннера + ALPN)
├── apache_local_audit.py # Локальный аудит на хосте / через SSH
├── LICENSE # MIT
├── .gitignore
└── README.md
python3 по умолчанию в Ubuntu 18.04 и во всех последующих версиях.git clone https://github.com/sibersan/cve-2026-23918.git
cd cve-2026-23918
chmod +x apache_passive_audit.py apache_local_audit.py
apache_passive_audit.pyЧитает HTTP-заголовок Server: для определения версии Apache и сопоставляет ее с таблицей CVE. Кроме того, для целей HTTPS выполняет стандартное согласование TLS ALPN, чтобы определить, включен ли HTTP/2 — это ключевое предусловие для эксплуатации CVE-2026-23918. Эксплойт-полезные нагрузки не отправляются.
Скрипт предлагает h2 и http/1.1 в расширении ALPN при TLS-рукопожатии (RFC 7301). Выбор сервера является стандартным, однозначным ответом на вопрос «включен ли HTTP/2?» — используется каждым современным браузером и curl. Это не вызывает уязвимость или какое-либо необычное поведение.
Вердикт о риске отражает это:
# Одна цель
python3 apache_passive_audit.py -t https://web.example.com
# Несколько целей
python3 apache_passive_audit.py -t https://a.example.com -t https://b.example.com
# Файл с целями, параллельный режим, вывод CSV + JSON
python3 apache_passive_audit.py -f targets.txt -w 20 -o report.csv --json report.json
# Для CI / логов (без цветов)
python3 apache_passive_audit.py -f targets.txt --no-color
Формат targets.txt (одна цель на строку, # для комментариев):
https://www.example.com
intranet.example.local:8443
# старый стенд
http://10.0.5.12
| Флаг | Описание |
|---|---|
-t, --target | Одна цель (можно повторять) |
-f, --file | Файл со списком целей |
-o, --csv | Вывод отчета в CSV |
--json | Вывод отчета в JSON |
--timeout | Тайм-аут запроса в секундах (по умолчанию 10) |
-w, --workers | Параллельные потоки-обработчики (по умолчанию 10) |
--no-color | Отключить цветной вывод |
| Код | Значение |
|---|---|
| 0 | Все цели безопасны |
| 1 | Хотя бы одна цель UNKNOWN или ERROR |
| 2 | Хотя бы одна цель VULNERABLE или AT_RISK |
| Уровень | Значение |
|---|---|
VULNERABLE | Версия попадает в диапазон CVE из бюллетеня И выполнено предусловие (например, включен HTTP/2) |
AT_RISK | Неисправленная версия, но предусловие высокой серьезности НЕ выполнено; другие CVE все еще применимы |
SAFE | Версия ≥ 2.4.67 |
UNKNOWN | Баннер скрыт (ServerTokens Prod) или замаскирован обратным прокси/WAF — проверьте с помощью скрипта локального аудита |
NOT_APACHE | Не Apache (nginx, IIS и т.д.) |
ERROR | Ошибка соединения |
ServerTokens Prod или Minimal скрывают версию — скрипт честно возвращает UNKNOWN. Используйте локальный аудит для подтверждения.apache_local_audit.pyЗапускается на целевом хосте (или через SSH) и проверяет бинарный файл Apache, версию, загруженные модули и конфигурацию HTTP/2. Он также оценивает предусловия эксплуатации: например, если версия 2.4.66, но HTTP/2 отключен, риск для CVE-2026-23918 соответственно понижается.
sudo python3 apache_local_audit.py
# Отчет в JSON (для централизованного инвентаря)
sudo python3 apache_local_audit.py --json /var/log/apache_audit_$(hostname).json
# Пользовательский путь к бинарному файлу
sudo python3 apache_local_audit.py --binary /opt/apache/bin/httpd
httpd -v / apache2 -v — версияhttpd -V — информация о сборке, HTTPD_ROOT, SERVER_CONFIG_FILEapache2ctl -M или httpd -M — загруженные модулиdpkg-query / rpm -q — версия пакетаInclude/IncludeOptional (включая Debian'овские sites-enabled/, mods-enabled/) → директива Protocols (h2 / h2c / http/1.1)| Флаг | Описание |
|---|---|
--binary | Путь к бинарному файлу Apache (переопределяет автоопределение) |
--json | Вывод отчета в JSON |
--no-color | Отключить цветной вывод |
| Код | Значение |
|---|---|
| 0 | SAFE |
| 1 | PATCH_NEEDED или UNKNOWN |
| 2 | VULNERABLE или AT_RISK |
| Уровень | Значение |
|---|---|
VULNERABLE | Неисправленная версия + выполнены предусловия CVE высокой серьезности (например, включен HTTP/2) |
AT_RISK | Неисправленная версия + выполнено хотя бы одно предусловие CVE |
PATCH_NEEDED | Неисправленная версия, но не включен ни один соответствующий модуль/протокол — все равно исправьте |
SAFE | Версия ≥ 2.4.67 |
UNKNOWN | Не удалось определить версию |
sudo/root рекомендуется для полного чтения конфигурации. Без этого некоторые файлы в sites-enabled/, mods-enabled/ или /etc/httpd/conf.d/ могут быть недоступны для чтения.
Для запуска локального аудита на нескольких хостах и централизованного сбора отчетов, пример ad-hoc команды Ansible:
ansible all -i inventory.ini -b -m script \
-a "apache_local_audit.py --json /tmp/apache_audit.json --no-color"
ansible all -i inventory.ini -b -m fetch \
-a "src=/tmp/apache_audit.json dest=./reports/ flat=no"
Собранные JSON-файлы можно объединить с помощью jq или небольшого Python-скрипта.
Для CVE-2026-23918 (до установки исправления):
h2 и h2c из директивы Protocols в вашей конфигурации, или выполните sudo a2dismod http2 на Debian/Ubuntu, затем перезагрузите службу.mod_dav_lock, если он не используется (CVE-2026-29169)..htaccess (CVE-2026-24072).Официальное уведомление: https://httpd.apache.org/security/vulnerabilities_24.html
Pull request'ы приветствуются. При добавлении новой CVE, пожалуйста:
CVE_TABLE с диапазоном затронутых версий и лямбдой match.needs для проверок предусловий (загруженный модуль, включенный протокол и т.д.).from __future__ import annotations, дженериков PEP 585 (list[int]), subprocess.run(capture_output=True) и @dataclass.MIT © 2026 SiberSAN
Данное программное обеспечение предоставляется «как есть», без каких-либо гарантий. Перед использованием в производственной среде проверьте его в тестовой среде. Пользователь берет на себя всю юридическую ответственность за любое использование в отношении несанкционированных систем.