
Концептуальный прототип (PoC) для CVE-2026-49975 – атака исчерпания памяти HTTP/2-сервера, использующая усиление HPACK и удержание соединений (HTTP/2 Slowloris).
Доказательство концепции отказа в обслуживании (DoS), нацеленное на HTTP/2 серверы. Комбинируя усиление HPACK с удержанием потоков, одна машина с умеренным сетевым подключением может вывести уязвимый сервер из строя в течение секунд.
CVE-2026-49975mod_http2 Apache HTTP Server позволяет осуществить атаку отказа в обслуживании через специально сформированные HTTP-запросы.Эксплойт проходит несколько этапов, как показано в журналах выполнения:
Установка TCP/TLS соединения
Открывается несколько параллельных TCP/TLS соединений к целевому серверу.
Согласование HTTP/2
Клиент определяет максимальное количество параллельных потоков, разрешенное сервером (обычно 100 или 128).
Подготовка HPACK
Отправляются тщательно сформированные HTTP-заголовки, чтобы заставить сервер выделить чрезмерно большие таблицы сжатия HPACK, быстро увеличивая потребление памяти.
Удержание соединения
После открытия потоков соединения остаются активными неопределенно долго, предотвращая освобождение выделенной памяти и в конечном итоге истощая доступную оперативную память сервера.
Тестирование проводилось на нескольких веб-серверах с использованием их конфигураций по умолчанию.
h2.exceptions.TooManyStreamsErrorВозникает, когда значение, переданное в --streams, превышает максимальное количество параллельных потоков, поддерживаемое сервером.
Решение: Узнайте лимит потоков сервера перед началом атаки.
NameError: name 'SettingsAcknowledued' is not definedПростая типографическая ошибка в исходном коде PoC.
Решение: Замените:
SettingsAcknowledued
на:
SettingsAcknowledged
[SSL] unknown errorОбычно указывает на то, что цель не поддерживает HTTP/2 через TLS или отклоняет входящие соединения.
EOF occurred in violation of protocolУдаленный сервер неожиданно закрыл соединение.
Это часто происходит, когда сервер начинает исчерпывать свои ресурсы и начинает отклонять новые соединения.
Invalid input ConnectionInputs.SEND_HEADERSСервер закрыл HTTP/2 соединение до того, как все заголовки запроса были переданы.
Доказательство концепции реализовано в виде скрипта на Python.
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Базовая атака с использованием 10 соединений и 100 потоков:
python bomb.py example.com --streams 100 --connections 10
(Требуется, чтобы цель разрешала как минимум 100 параллельных потоков на одно соединение.)
Автоматическое определение лимита потоков:
python bomb.py example.com --connections 10
Масштабная атака:
python bomb.py target.example.com --connections 50
Тест с большим количеством соединений:
python h2bomb.py -t target.example.com:443 -c 1000
Тест с очень большим количеством соединений:
python h2bomb.py -t example.com -c 20000
Данное программное обеспечение предоставляется исключительно для исследований в области безопасности, образовательных целей и тестирования систем, на которые у вас есть явное разрешение.
Несанкционированное использование этого инструмента против систем, которые вам не принадлежат или на тестирование которых у вас нет разрешения, может нарушать действующие законы и правила. Авторы и участники не несут ответственности за любое неправомерное использование или ущерб, возникший в результате использования данного программного обеспечения.
| Веб-сервер | Протестированная версия | ОЗУ | Истощение памяти | Наблюдаемое поведение |
|---|
| Envoy | 1.37.2 | 32 ГБ | ~10 секунд | Успешно истощил память очень быстро. |
| Apache HTTP Server | 2.4.67 | 32 ГБ | ~18 секунд | Лимит потоков обычно 100. Стандартное развитие атаки через подготовку HPACK и бесконечное удержание соединений. |
| nginx | 1.29.7 | 32 ГБ | ~45 секунд | Лимит потоков обычно 128. Атака успешна, но требуется больше времени для потребления доступной памяти. |
| Microsoft IIS | Не указана | 64 ГБ | ~45 секунд | Может рекламировать необычно большие лимиты потоков, например 4294967297. |
| Неуязвимые цели | Различные | - | - | Немедленные сбои TLS или TooManyStreamsError при попытке превысить настроенный лимит потоков. |