
Prova di concetto (PoC) per CVE-2026-49975 – attacco di esaurimento della memoria del server HTTP/2 che sfrutta l'amplificazione HPACK e la persistenza delle connessioni (HTTP/2 Slowloris).
Una proof of concept di denial-of-service (DoS) che prende di mira i server HTTP/2. Combinando l'amplificazione HPACK con la ritenzione degli stream, una singola macchina con una connessione di rete modesta può rendere un server vulnerabile non disponibile in pochi secondi.
CVE-2026-49975mod_http2 di Apache HTTP Server consente un attacco di denial-of-service tramite richieste HTTP appositamente formulate.Lo sfruttamento procede attraverso diverse fasi, come illustrato dai suoi log di esecuzione:
Stabilimento della connessione TCP/TLS
Vengono aperte più connessioni TCP/TLS concorrenti verso il server di destinazione.
Negoziazione HTTP/2
Il client rileva il numero massimo di stream concorrenti consentiti dal server (tipicamente 100 o 128).
Preparazione HPACK
Vengono inviate intestazioni HTTP appositamente formulate per costringere il server ad allocare tabelle di compressione HPACK eccessivamente grandi, aumentando rapidamente il consumo di memoria.
Ritenzione delle connessioni
Una volta aperti gli stream, le connessioni rimangono attive a tempo indeterminato, impedendo il rilascio della memoria allocata ed esaurendo infine la RAM disponibile del server.
I test sono stati eseguiti su più server web utilizzando le loro configurazioni predefinite.
h2.exceptions.TooManyStreamsErrorSi verifica quando il valore fornito a --streams supera il numero massimo di stream concorrenti supportato dal server.
Soluzione: Individuale il limite di stream del server prima di iniziare l'attacco.
NameError: name 'SettingsAcknowledued' is not definedUn semplice errore di battitura nel codice sorgente della PoC.
Soluzione: Sostituisci:
SettingsAcknowledued
con:
SettingsAcknowledged
[SSL] unknown errorDi solito indica che il target non supporta HTTP/2 su TLS o sta rifiutando le connessioni in arrivo.
EOF occurred in violation of protocolIl server remoto ha chiuso la connessione inaspettatamente.
Ciò si verifica comunemente quando il server inizia a esaurire le proprie risorse e inizia a rifiutare nuove connessioni.
Invalid input ConnectionInputs.SEND_HEADERSIl server ha chiuso la connessione HTTP/2 prima che tutte le intestazioni della richiesta potessero essere trasmesse.
La proof of concept è implementata come script Python.
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
Attacco di base con 10 connessioni e 100 stream:
python bomb.py example.com --streams 100 --connections 10
(Richiede che il target consenta almeno 100 stream concorrenti per connessione.)
Rilevamento automatico del limite di stream:
python bomb.py example.com --connections 10
Attacco su larga scala:
python bomb.py target.example.com --connections 50
Test di connessione ad alto volume:
python h2bomb.py -t target.example.com:443 -c 1000
Test di connessione su scala molto ampia:
python h2bomb.py -t example.com -c 20000
Questo software è fornito esclusivamente per ricerca sulla sicurezza, scopi educativi e test su sistemi per i quali si dispone di esplicita autorizzazione.
L'uso non autorizzato di questo strumento contro sistemi di cui non si è proprietari o per i quali non si ha il permesso di testare può violare leggi e regolamenti applicabili. Gli autori e i collaboratori non si assumono alcuna responsabilità per usi impropri o danni derivanti dall'utilizzo di questo software.
| Server Web | Versione Testata | RAM | Esaurimento della Memoria | Comportamento Osservato |
|---|
| Envoy | 1.37.2 | 32 GB | ~10 secondi | Memoria esaurita con successo molto rapidamente. |
| Apache HTTP Server | 2.4.67 | 32 GB | ~18 secondi | Limite di stream tipicamente 100. Progressione standard dell'attacco tramite preparazione HPACK e ritenzione indefinita delle connessioni. |
| nginx | 1.29.7 | 32 GB | ~45 secondi | Limite di stream tipicamente 128. L'attacco riesce ma richiede più tempo per consumare la memoria disponibile. |
| Microsoft IIS | Non specificato | 64 GB | ~45 secondi | Può pubblicizzare limiti di stream insolitamente elevati come 4294967297. |
| Target non vulnerabili | Vari | - | - | Errori TLS immediati o TooManyStreamsError quando si tenta di superare il limite di stream configurato dal server. |