
Легковесные HTTP/2 зонды для контролируемой проверки векторов DoS CVE-2019-9511 (Data Dribble) и CVE-2019-9513 (Priority Churn) в авторизованных средах.
Репозиторий со скриптами контролируемой валидации поведения, связанного с CVE CVE-2019-9511 и CVE-2019-9513, обе касаются векторов отказа в обслуживании в реализациях HTTP/2.
Скрипты созданы для поддержки технических проверок в авторизованных средах, позволяя наблюдать, договаривается ли сервер об HTTP/2 и отвечает ли на определенные шаблоны, связанные с Data Dribble и Priority Churn, без выполнения атаки типа "отказ в обслуживании".
Цель — подтвердить вектор легким и безопасным способом, с низким объемом запросов и без цели сделать среду недоступной.
| CVE | Имя | Скрипт | Описание |
|---|---|---|---|
CVE-2019-9511 | HTTP/2 Data Dribble | data_dribble_probe.py | Проверяет поведение управления потоком HTTP/2, высвобождая малые объемы данных контролируемым образом. |
CVE-2019-9513 | HTTP/2 Priority Churn / Resource Loop | priority_churn_probe.py | Проверяет поведение обработки фреймов PRIORITY с низкой интенсивностью. |
CVE-2019-9511, известная как HTTP/2 Data Dribble, затрагивает некоторые реализации HTTP/2, которые неэффективно обрабатывают манипуляции с окном потока и постепенную доставку данных.
В этом сценарии атакующий может запрашивать данные у сервера и манипулировать управлением потоком, чтобы ответ оставался открытым и доставлялся небольшими блоками, например пакетами по 1 байту. В зависимости от реализации такое поведение может вызвать чрезмерное потребление CPU, памяти или ресурсов соединения, что приводит к риску отказа в обслуживании.
В этом репозитории соответствующий скрипт:
data_dribble_probe.py
Цель скрипта — проверить поведение легким способом, без создания агрессивной нагрузки и без попыток вызвать недоступность.
Ссылки:
CVE-2019-9513, известная как HTTP/2 Priority Churn или Resource Loop, затрагивает некоторые реализации HTTP/2, которые дорого обрабатывают непрерывные изменения в дереве приоритетов потоков.
В этом сценарии атакующий может создать несколько потоков и многократно изменять приоритет между ними, вызывая "перемешивание" дерева приоритетов. В зависимости от реализации такое поведение может вызвать чрезмерное потребление CPU и привести к отказу в обслуживании.
В этом репозитории соответствующий скрипт:
priority_churn_probe.py
Цель скрипта — проверить, принимает ли сервер и обрабатывает ли фреймы PRIORITY, используя низкую интенсивность и не выполняя DoS-атаку.
Ссылки:
CVE CVE-2019-9511 и CVE-2019-9513 не привязаны к одной конкретной версии веб-сервера, например только nginx, Apache или Tomcat.
Они затрагивают определенные реализации HTTP/2 в различных продуктах, библиотеках, прокси, балансировщиках и серверах. Поэтому проверка должна учитывать, какой компонент ведет переговоры и обрабатывает HTTP/2 в анализируемой среде.
Примеры компонентов, которые могут быть задействованы:
nginx
Apache HTTP Server
Envoy
HAProxy
Tomcat
Jetty
Node.js
Go net/http2
nghttp2
CDN
WAF
Load Balancer
Ingress Controller Kubernetes
Первое техническое условие — подтвердить, что сервис договаривается об HTTP/2 через ALPN. Если сервис не договаривается о h2, эти скрипты неприменимы.
Подтверждение уязвимости по версии должно основываться на официальном предупреждении производителя идентифицированного компонента.
Перед запуском скриптов проверьте, договаривается ли цель об HTTP/2 через ALPN.
Используйте только домен в команде, без https://.
openssl s_client -alpn h2 -connect exemplo.com.br:443 </dev/null 2>/dev/null | grep -i "ALPN"
Также можно использовать с плейсхолдером:
openssl s_client -alpn h2 -connect <HOST>:443 </dev/null 2>/dev/null | grep -i "ALPN"
Ожидаемый вывод:
ALPN protocol: h2
Если вывод показывает h2, сервис договаривается об HTTP/2, и скрипты могут быть применимы.
Если ответа нет или согласован другой протокол, например http/1.1, скрипты для этой конечной точки неприменимы.
| Скрипт | Связанная CVE | Цель | Когда использовать |
|---|---|---|---|
data_dribble_probe.py | CVE-2019-9511 | Проверить поведение, связанное с Data Dribble, используя управление окном для высвобождения малых блоков данных | Использовать, когда сервер поддерживает HTTP/2 и есть необходимость проверить поведение при доставке DATA-фреймов с уменьшенным окном. |
priority_churn_probe.py | CVE-2019-9513 | Проверить поведение, связанное с Priority Churn, используя фреймы PRIORITY с низкой интенсивностью | Использовать, когда сервер поддерживает HTTP/2 и есть необходимость проверить, обрабатывает ли он изменения приоритетов потоков. |
Наиболее логичный порядок использования скриптов:
1. Предварительная проверка HTTP/2 с openssl
↓
2. priority_churn_probe.py
↓
3. data_dribble_probe.py
Сначала используйте команду с openssl, чтобы подтвердить, что цель договаривается об HTTP/2. Затем используйте priority_churn_probe.py для проверки, принимает ли сервер и обрабатывает ли фреймы приоритета. После этого используйте data_dribble_probe.py для наблюдения за поведением сервера при уменьшенном окне потока, высвобождая малые объемы данных контролируемым образом.
Оба скрипта являются легкими пробами. Они не предназначены для вызова недоступности, а для получения технического подтверждения наблюдаемого поведения.
priority_churn_probe.py — это легкая PoC для проверки поведения, связанного с CVE-2019-9513, известной как HTTP/2 Priority Churn.
Скрипт устанавливает соединение HTTP/2 через TLS, открывает небольшие HTTP-потоки и отправляет изменения приоритета через фреймы PRIORITY. Затем измеряет задержку до и после отправки этих фреймов, чтобы наблюдать, есть ли вариация в обработке.
PING;PRIORITY с низкой интенсивностью;Используйте этот скрипт, когда необходимо проверить, принимает ли HTTP/2 сервер и обрабатывает ли фреймы приоритета, связанные с вектором Priority Churn, без выполнения агрессивного DoS-теста.
Он подходит для контролируемой проверки в рамках пентестов, анализа подверженности HTTP/2 и технического подтверждения уязвимого или потенциально чувствительного поведения.
Скрипт принимает значения через аргументы командной строки:
--host
--port
--paths
--shuffles
| Параметр | Описание |
|---|---|
--host | FQDN разрешенной цели. Не включать https://. |
--port | TLS-порт, на котором доступен сервис HTTP/2. По умолчанию: 443. |
--paths | Список простых путей для открытия HTTP/2 потоков. |
--shuffles | Количество циклов изменения приоритета. Держать низким для безопасного теста. |
Используйте легкие, общедоступные пути с низким воздействием, например:
/
/robots.txt
/favicon.ico
/health
/login