
Скрипт Python, который проверяет, уязвим ли веб-сервер к атаке MadeYouReset (CVE-2025-8671) — DoS-атаке на HTTP/2, которая обходит меры защиты Rapid Reset, заставляя сервер сбрасывать собственные потоки. Он зондирует цель, отправляя некорректный фрейм WINDOW_UPDATE, и проверяет, отвечает ли сервер.
Легковесный Python-скрипт для обнаружения потенциальной уязвимости веб-сервера к DoS-атаке MadeYouReset на основе HTTP/2, отслеживаемой как CVE-2025-8671 (CVSS 7.5 High).
MadeYouReset — это DoS-уязвимость HTTP/2, раскрытая в августе 2025 года исследователями из Тель-Авивского университета и Imperva. Она использует несоответствие между учётом потоков HTTP/2 и внутренней обработкой бэкенда во многих популярных реализациях серверов.
Атака отправляет преднамеренно искажённые управляющие кадры HTTP/2 (например, WINDOW_UPDATE с increment=0, что запрещено согласно RFC 9113 §6.9.1) чтобы принудить сам сервер отправлять кадры RST_STREAM. Поскольку сервер считает поток закрытым на уровне протокола, но продолжает обрабатывать запрос в бэкенде, злоумышленник может обойти ограничение MAX_CONCURRENT_STREAMS и исчерпать ресурсы сервера — без отправки ни одного клиентского RST_STREAM.
Это делает её обходом мер защиты, введённых для более ранней атаки Rapid Reset (CVE-2023-44487).
Известное уязвимое ПО:
| Продукт | CVE |
|---|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
| F5 BIG-IP | CVE-2025-54500 |
| IBM WebSphere Application Server Liberty | CVE-2025-36047 |
| Varnish, Fastly, Jetty, SUSE, Wind River | CVE-2025-8671 |
h2 через ALPN.SETTINGS.HEADERS.WINDOW_UPDATE (increment=0) на открытом потоке.RST_STREAM на потоке (без GOAWAY) → вероятно, уязвим.GOAWAY → корректное поведение по RFC; вероятно, исправлен.Скрипт выполняет пассивный зонд только на чтение — он не пытается эксплуатировать или нагрузочно тестировать сервер.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# pip install не нужен — нет зависимостей
python3 main.py <url> [ОПЦИИ]
| Флаг | По умолчанию | Описание |
|---|---|---|
--timeout SECONDS | 8 | Таймаут чтения сокета |
--no-color | выкл. | Отключить цветной вывод ANSI |
# Базовая проверка
python3 main.py https://example.com
# Нестандартный порт и увеличенный таймаут
python3 main.py https://example.com:8443 --timeout 15
# Для CI (без цвета)
python3 main.py https://example.com --no-color
| Код | Значение |
|---|---|
0 | Не уязвим — сервер ответил GOAWAY (корректное поведение по RFC) |
1 | Вероятно, уязвим — сервер отправил RST_STREAM на потоке, но не GOAWAY |
2 | Неопределённо — нет HTTP/2, ошибка соединения или неоднозначный ответ |
Коды завершения упрощают интеграцию в CI-пайплайны или скрипты автоматизации.
========================================================
MadeYouReset (CVE-2025-8671) Checker
========================================================
Цель : https://vulnerable-server.example.com
Хост : vulnerable-server.example.com:443
Путь : /
Таймаут : 8.0s
────────────────────────────────────────────────────────
[*] Подключение к vulnerable-server.example.com:443 ...
✓ TCP-соединение установлено
[*] Выполнение TLS-рукопожатия (ALPN: h2, http/1.1) ...
→ Согласованный протокол : h2
✓ HTTP/2 (h2) согласован через ALPN
[*] Отправка предисловия клиента HTTP/2 ...
✓ Предисловие + SETTINGS отправлены
[*] Ожидание SETTINGS от сервера ...
← Кадр type=0x04 stream=0 length=18
✓ SETTINGS сервера получены
✓ Отправлен SETTINGS ACK
[*] Открытие потока HTTP/2 1 (кадр HEADERS) ...
✓ HEADERS отправлены на потоке 1
[*] Отправка искажённого WINDOW_UPDATE (increment=0) на потоке 1 ...
RFC 9113 §6.9.1: increment=0 — это FLOW_CONTROL_ERROR на уровне потока
✓ Искажённый WINDOW_UPDATE отправлен
[*] Анализ ответа сервера (таймаут=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
РЕЗУЛЬТАТ
────────────────────────────────────────────────────────
[ВЕРОЯТНО УЯЗВИМ]
Сервер ответил RST_STREAM на потоке 1
(error_code=0x00000003), но НЕ отправил GOAWAY.
Рекомендуемые действия:
• Заплатка: Apache Tomcat ≥10.1.44/11.0.10/9.0.108,
Netty ≥4.1.124.Final / 4.2.4.Final,
и другие рекомендации вендоров для CVE-2025-8671.
• Временная мера: отключить HTTP/2 или развернуть WAF/прокси,
который проверяет кадры HTTP/2 перед передачей.
========================================================
| Действие | Подробности |
|---|---|
| Заплатка | Установите последнее обновление вендора для вашего стека HTTP/2 (см. таблицу выше) |
| Отключить HTTP/2 | Временно переключитесь на HTTP/1.1 |
| WAF / Прокси | Разверните обратный прокси или WAF, проверяющий кадры HTTP/2 на границе |
| Ограничение скорости | Введите ограничения на количество соединений с одного клиента и скорость RST_STREAM |
Этот инструмент предназначен только для авторизованного тестирования безопасности и исследований.
Не запускайте этот скрипт против систем, которые вам не принадлежат или на которые у вас нет явного письменного разрешения на тестирование.
Авторы не несут ответственности за неправомерное использование.