
Leichte HTTP/2-Sonden zur kontrollierten Validierung von CVE-2019-9511 (Data Dribble) und CVE-2019-9513 (Priority Churn) DoS-Vektoren in autorisierten Umgebungen.
Repository mit kontrollierten Validierungsskripten für Verhaltensweisen im Zusammenhang mit den CVEs CVE-2019-9511 und CVE-2019-9513, die beide mit Denial-of-Service-Vektoren in HTTP/2-Implementierungen verbunden sind.
Die Skripte wurden erstellt, um technische Validierungen in autorisierten Umgebungen zu unterstützen. Sie ermöglichen die Beobachtung, ob der Server HTTP/2 aushandelt und auf bestimmte Muster im Zusammenhang mit Data Dribble und Priority Churn reagiert, ohne einen Denial-of-Service-Angriff auszuführen.
Ziel ist es, den Vektor auf leichte und sichere Weise nachzuweisen, mit geringem Anfragevolumen und ohne das Ziel, die Umgebung lahmzulegen.
| CVE | Name | Skript | Beschreibung |
|---|---|---|---|
CVE-2019-9511 | HTTP/2 Data Dribble | data_dribble_probe.py | Validiert das Verhalten der HTTP/2-Flusskontrolle durch kontrollierte Freigabe kleiner Datenmengen. |
CVE-2019-9513 | HTTP/2 Priority Churn / Resource Loop | priority_churn_probe.py | Validiert das Verhalten bei der Verarbeitung von PRIORITY-Frames mit geringer Intensität. |
Die CVE-2019-9511, bekannt als HTTP/2 Data Dribble, betrifft einige HTTP/2-Implementierungen, die das Fenstermanagement und die schrittweise Datenauslieferung nicht effizient handhaben.
In diesem Szenario kann ein Angreifer Daten vom Server anfordern und die Flusskontrolle so manipulieren, dass die Antwort offen gehalten und in kleinen Blöcken (z. B. 1‑Byte-Paketen) ausgeliefert wird. Je nach Implementierung kann dieses Verhalten zu übermäßigem CPU‑, Speicher- oder Verbindungsressourcenverbrauch führen, was ein Denial-of-Service-Risiko darstellt.
In diesem Repository ist das zugehörige Skript:
data_dribble_probe.py
Ziel des Skripts ist es, das Verhalten auf leichte Weise zu validieren, ohne aggressive Last zu erzeugen oder eine Nichtverfügbarkeit herbeizuführen.
Referenzen:
Die CVE-2019-9513, bekannt als HTTP/2 Priority Churn oder Resource Loop, betrifft einige HTTP/2-Implementierungen, die kontinuierliche Änderungen im Prioritätsbaum der Streams aufwändig verarbeiten.
In diesem Szenario kann ein Angreifer mehrere Streams erstellen und wiederholt die Priorität zwischen ihnen ändern, was zu Churn im Prioritätsbaum führt. Je nach Implementierung kann dieses Verhalten übermäßigen CPU‑Verbrauch verursachen und zu einem Denial-of-Service führen.
In diesem Repository ist das zugehörige Skript:
priority_churn_probe.py
Ziel des Skripts ist es zu validieren, ob der Server PRIORITY-Frames akzeptiert und verarbeitet – bei geringer Intensität und ohne einen DoS-Angriff auszuführen.
Referenzen:
Die CVEs CVE-2019-9511 und CVE-2019-9513 sind nicht an eine einzige spezifische Version eines Webservers (wie nur nginx, Apache oder Tomcat) gebunden.
Sie betreffen bestimmte HTTP/2-Implementierungen in verschiedenen Produkten, Bibliotheken, Proxys, Load-Balancern und Servern. Daher sollte die Validierung berücksichtigen, welche Komponente im analysierten Umfeld HTTP/2 aushandelt und verarbeitet.
Beispiele für möglicherweise beteiligte Komponenten:
nginx
Apache HTTP Server
Envoy
HAProxy
Tomcat
Jetty
Node.js
Go net/http2
nghttp2
CDN
WAF
Load Balancer
Ingress Controller Kubernetes
Das erste technische Kriterium ist die Bestätigung, ob der Dienst HTTP/2 per ALPN aushandelt. Falls der Dienst kein h2 aushandelt, sind diese Skripte nicht anwendbar.
Die Bestätigung einer Schwachstelle pro Version muss auf Grundlage des offiziellen Advisories des Herstellers der identifizierten Komponente erfolgen.
Führen Sie vor der Ausführung der Skripte eine Validierung durch, ob das Ziel HTTP/2 per ALPN aushandelt.
Verwenden Sie im Befehl nur die Domain, ohne https://.
openssl s_client -alpn h2 -connect exemplo.com.br:443 </dev/null 2>/dev/null | grep -i "ALPN"
Auch mit Platzhalter möglich:
openssl s_client -alpn h2 -connect <HOST>:443 </dev/null 2>/dev/null | grep -i "ALPN"
Erwartete Ausgabe:
ALPN protocol: h2
Wenn die Ausgabe h2 anzeigt, handelt der Dienst HTTP/2 aus, und die Skripte können anwendbar sein.
Wenn keine Rückmeldung erfolgt oder das ausgehandelte Protokoll ein anderes ist (z. B. http/1.1), sind die Skripte für diesen Endpunkt nicht anwendbar.
| Skript | Zugehörige CVE | Zweck | Wann verwenden |
|---|---|---|---|
data_dribble_probe.py | CVE-2019-9511 | Validierung des Data‑Dribble-Verhaltens mittels Fensterkontrolle zur Freigabe kleiner Datenblöcke | Wenn der Server HTTP/2 unterstützt und das Verhalten der DATA‑Frame-Auslieferung mit reduziertem Fenster überprüft werden soll. |
priority_churn_probe.py | CVE-2019-9513 | Validierung des Priority‑Churn-Verhaltens mittels PRIORITY-Frames bei geringer Intensität | Wenn der Server HTTP/2 unterstützt und geprüft werden soll, ob er Prioritätsänderungen von Streams verarbeitet. |
Die logischste Reihenfolge zur Verwendung der Skripte ist:
1. HTTP/2-Vorvalidierung mit openssl
↓
2. priority_churn_probe.py
↓
3. data_dribble_probe.py
Verwenden Sie zuerst den Befehl mit openssl, um zu bestätigen, dass das Ziel HTTP/2 aushandelt. Verwenden Sie dann priority_churn_probe.py, um zu validieren, ob der Server Prioritäts-Frames akzeptiert und verarbeitet. Verwenden Sie anschließend data_dribble_probe.py, um das Serververhalten bei reduziertem Flussfenster zu beobachten, indem kleine Datenmengen kontrolliert freigegeben werden.
Beide Skripte sind leichte Sonden. Sie zielen nicht darauf ab, eine Nichtverfügbarkeit herbeizuführen, sondern einen technischen Nachweis des beobachteten Verhaltens zu erbringen.
priority_churn_probe.py ist eine leichte PoC zur Validierung des Verhaltens im Zusammenhang mit CVE-2019-9513, bekannt als HTTP/2 Priority Churn.
Das Skript stellt eine HTTP/2-Verbindung per TLS her, öffnet kleine HTTP-Streams und sendet Prioritätsänderungen mittels PRIORITY-Frames. Anschließend misst es die Latenz vor und nach dem Senden dieser Frames, um festzustellen, ob es eine Verarbeitungsvariation gibt.
PING;PRIORITY-Frames mit geringer Intensität;Verwenden Sie dieses Skript, wenn validiert werden muss, ob ein HTTP/2-Server Prioritäts-Frames im Zusammenhang mit dem Priority Churn-Vektor akzeptiert und verarbeitet – ohne einen aggressiven DoS-Test durchzuführen.
Es eignet sich für kontrollierte Validierungen in Pentests, HTTP/2-Expositionsanalysen und den technischen Nachweis eines anfälligen oder potenziell sensiblen Verhaltens.
Das Skript erhält die Werte über Kommandozeilenargumente:
--host
--port
--paths
--shuffles