
Proof of Concept (PoC) für CVE-2026-49975 – HTTP/2-Server-Speichererschöpfungsangriff unter Ausnutzung von HPACK-Verstärkung und Verbindungserhalt (HTTP/2 Slowloris).
Ein Denial-of-Service (DoS)-Proof-of-Concept, das auf HTTP/2-Server abzielt. Durch die Kombination von HPACK-Verstärkung mit Stream-Retention kann ein einzelner Rechner mit einer bescheidenen Netzwerkverbindung einen anfälligen Server innerhalb von Sekunden unerreichbar machen.
CVE-2026-49975mod_http2 des Apache HTTP Server ermöglicht einen Denial-of-Service-Angriff durch speziell präparierte HTTP-Anfragen.Der Exploit durchläuft mehrere Phasen, wie aus den Ausführungslogs ersichtlich:
TCP/TLS-Verbindungsaufbau
Es werden mehrere gleichzeitige TCP/TLS-Verbindungen zum Zielserver geöffnet.
HTTP/2-Aushandlung
Der Client erkennt die maximale Anzahl gleichzeitiger Streams, die der Server zulässt (normalerweise 100 oder 128).
HPACK-Vorbereitung
Sorgfältig präparierte HTTP-Header werden gesendet, um den Server zu zwingen, übermäßig große HPACK-Kompressionstabellen zu allokieren, was den Speicherverbrauch schnell erhöht.
Verbindungshaltung
Sobald die Streams geöffnet sind, bleiben die Verbindungen unbegrenzt aktiv, wodurch verhindert wird, dass der allokierte Speicher freigegeben wird, und der verfügbare RAM des Servers schließlich erschöpft wird.
Die Tests wurden gegen mehrere Webserver mit ihren Standardkonfigurationen durchgeführt.
h2.exceptions.TooManyStreamsErrorTritt auf, wenn der an --streams übergebene Wert die maximale Anzahl gleichzeitiger Streams überschreitet, die der Server unterstützt.
Lösung: Das Stream-Limit des Servers vor dem Start des Angriffs abfragen.
NameError: name 'SettingsAcknowledued' is not definedEin einfacher Tippfehler im Quellcode des PoC.
Lösung: Ersetze:
SettingsAcknowledued
mit:
SettingsAcknowledged
[SSL] unknown errorWeist in der Regel darauf hin, dass das Ziel HTTP/2 über TLS nicht unterstützt oder eingehende Verbindungen ablehnt.
EOF occurred in violation of protocolDer entfernte Server hat die Verbindung unerwartet geschlossen.
Dies tritt häufig auf, wenn auf dem Server die Ressourcen zur Neige gehen und er beginnt, neue Verbindungen abzulehnen.
Invalid input ConnectionInputs.SEND_HEADERSDer Server hat die HTTP/2-Verbindung geschlossen, bevor alle Anforderungsheader übertragen werden konnten.
Der Proof-of-Concept ist als Python-Skript implementiert.
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
Einfacher Angriff mit 10 Verbindungen und 100 Streams:
python bomb.py example.com --streams 100 --connections 10
(Erfordert, dass das Ziel mindestens 100 gleichzeitige Streams pro Verbindung zulässt.)
Automatische Erkennung des Stream-Limits:
python bomb.py example.com --connections 10
Großflächiger Angriff:
python bomb.py target.example.com --connections 50
Hochvolumiger Verbindungstest:
python h2bomb.py -t target.example.com:443 -c 1000
Sehr großflächiger Verbindungstest:
python h2bomb.py -t example.com -c 20000
Diese Software wird ausschließlich für Sicherheitsforschung, Bildungszwecke und das Testen von Systemen bereitgestellt, für die Sie ausdrücklich autorisiert sind.
Die unbefugte Nutzung dieses Tools gegen Systeme, die Sie nicht besitzen oder für die Sie keine Testberechtigung haben, kann gegen geltende Gesetze und Vorschriften verstoßen. Die Autoren und Mitwirkenden übernehmen keine Verantwortung für Missbrauch oder Schäden, die durch die Verwendung dieser Software entstehen.
| Webserver | Getestete Version | RAM | Speichererschöpfung | Beobachtetes Verhalten |
|---|
| Envoy | 1.37.2 | 32 GB | ~10 Sekunden | Speicher wurde sehr schnell erfolgreich erschöpft. |
| Apache HTTP Server | 2.4.67 | 32 GB | ~18 Sekunden | Stream-Limit typischerweise 100. Standard-Angriffsablauf durch HPACK-Vorbereitung und unbegrenzte Verbindungshaltung. |
| nginx | 1.29.7 | 32 GB | ~45 Sekunden | Stream-Limit typischerweise 128. Angriff gelingt, benötigt jedoch mehr Zeit, um den verfügbaren Speicher zu verbrauchen. |
| Microsoft IIS | Nicht angegeben | 64 GB | ~45 Sekunden | Kann ungewöhnlich große Stream-Limits wie 4294967297 ankündigen. |
| Nicht anfällige Ziele | Verschiedene | - | - | Sofortige TLS-Fehler oder TooManyStreamsError beim Versuch, das konfigurierte Stream-Limit des Servers zu überschreiten. |