
Sonde HTTP/2 leggere per la validazione controllata dei vettori DoS CVE-2019-9511 (Data Dribble) e CVE-2019-9513 (Priority Churn) in ambienti autorizzati.
Repository con script di validazione controllata per i comportamenti associati alle CVE CVE-2019-9511 e CVE-2019-9513, entrambe relative a vettori di denial of service nelle implementazioni HTTP/2.
Gli script sono stati creati per supportare validazioni tecniche in ambienti autorizzati, consentendo di osservare se il server negozia HTTP/2 e risponde a pattern specifici relativi a Data Dribble e Priority Churn, senza eseguire un attacco di denial of service.
L'obiettivo è dimostrare il vettore in modo leggero e sicuro, con un basso volume di richieste e senza l'intento di rendere indisponibile l'ambiente.
| CVE | Nome | Script | Descrizione |
|---|---|---|---|
CVE-2019-9511 | HTTP/2 Data Dribble | data_dribble_probe.py | Valida il comportamento del controllo di flusso HTTP/2 rilasciando piccoli volumi di dati in modo controllato. |
CVE-2019-9513 | HTTP/2 Priority Churn / Resource Loop | priority_churn_probe.py | Valida il comportamento di elaborazione dei frame PRIORITY a bassa intensità. |
La CVE-2019-9511, nota come HTTP/2 Data Dribble, colpisce alcune implementazioni HTTP/2 che non gestiscono in modo efficiente la manipolazione della finestra di flusso e la consegna graduale dei dati.
In questo scenario, un attaccante può richiedere dati al server e manipolare il controllo di flusso per mantenere aperta la risposta e consegnarla in piccoli blocchi, come pacchetti da 1 byte. A seconda dell'implementazione, questo comportamento può causare un consumo eccessivo di CPU, memoria o risorse di connessione, con conseguente rischio di denial of service.
In questo repository, lo script correlato è:
data_dribble_probe.py
L'obiettivo dello script è validare il comportamento in modo leggero, senza generare carico aggressivo e senza tentare di causare indisponibilità.
Riferimenti:
La CVE-2019-9513, nota come HTTP/2 Priority Churn o Resource Loop, colpisce alcune implementazioni HTTP/2 che elaborano in modo dispendioso le modifiche continue all'albero di priorità degli stream.
In questo scenario, un attaccante può creare più stream e modificare ripetutamente la priorità tra di essi, causando churn nell'albero delle priorità. A seconda dell'implementazione, questo comportamento può generare un consumo eccessivo di CPU e portare al denial of service.
In questo repository, lo script correlato è:
priority_churn_probe.py
L'obiettivo dello script è validare se il server accetta ed elabora i frame PRIORITY, utilizzando una bassa intensità e senza eseguire un attacco DoS.
Riferimenti:
Le CVE CVE-2019-9511 e CVE-2019-9513 non sono associate a un'unica versione specifica di server web, come solo nginx, Apache o Tomcat.
Esse colpiscono determinate implementazioni HTTP/2 in diversi prodotti, librerie, proxy, bilanciatori e server. Per questo, la validazione deve considerare quale componente sta negoziando ed elaborando HTTP/2 nell'ambiente analizzato.
Esempi di componenti che possono essere coinvolti:
nginx
Apache HTTP Server
Envoy
HAProxy
Tomcat
Jetty
Node.js
Go net/http2
nghttp2
CDN
WAF
Load Balancer
Ingress Controller Kubernetes
Il primo criterio tecnico è confermare se il servizio negozia HTTP/2 tramite ALPN. Se il servizio non negozia h2, questi script non sono applicabili.
La conferma della vulnerabilità per versione deve essere effettuata sulla base dell'advisory ufficiale del produttore del componente identificato.
Prima di eseguire gli script, verifica se il target negozia HTTP/2 tramite ALPN.
Usa solo il dominio nel comando, senza https://.
openssl s_client -alpn h2 -connect esempio.com.br:443 </dev/null 2>/dev/null | grep -i "ALPN"
È anche possibile usare un segnaposto:
openssl s_client -alpn h2 -connect <HOST>:443 </dev/null 2>/dev/null | grep -i "ALPN"
Output atteso:
ALPN protocol: h2
Se l'output indica h2, il servizio negozia HTTP/2 e gli script possono essere applicabili.
Se non c'è risposta o il protocollo negoziato è un altro, come http/1.1, gli script non sono applicabili per quell'endpoint.
| Script | CVE correlata | Obiettivo | Quando usarlo |
|---|---|---|---|
data_dribble_probe.py | CVE-2019-9511 | Validare il comportamento associato a Data Dribble utilizzando il controllo della finestra per rilasciare piccoli blocchi di dati | Usarlo quando il server supporta HTTP/2 e c'è la necessità di verificare il comportamento di consegna dei frame DATA con finestra ridotta. |
priority_churn_probe.py | CVE-2019-9513 | Validare il comportamento associato a Priority Churn utilizzando frame PRIORITY a bassa intensità | Usarlo quando il server supporta HTTP/2 e c'è la necessità di verificare se elabora le modifiche di priorità degli stream. |
L'ordine più logico per l'utilizzo degli script è:
1. Pré-validação HTTP/2 com openssl
↓
2. priority_churn_probe.py
↓
3. data_dribble_probe.py
Prima, usa il comando con openssl per confermare se il target negozia HTTP/2. Poi, usa priority_churn_probe.py per validare se il server accetta ed elabora i frame di priorità. Successivamente, usa data_dribble_probe.py per osservare il comportamento del server con una finestra di flusso ridotta, rilasciando piccoli volumi di dati in modo controllato.
Entrambi gli script sono probe leggeri. Non hanno l'obiettivo di causare indisponibilità, ma di generare un'evidenza tecnica del comportamento osservato.
priority_churn_probe.py è una PoC leggera per la validazione del comportamento correlato alla CVE-2019-9513, nota come HTTP/2 Priority Churn.
Lo script stabilisce una connessione HTTP/2 via TLS, apre piccoli stream HTTP e invia modifiche di priorità tramite frame PRIORITY. Successivamente, misura la latenza prima e dopo l'invio di questi frame per osservare se c'è una variazione nell'elaborazione.
PING;PRIORITY a bassa intensità;Usa questo script quando è necessario validare se un server HTTP/2 accetta ed elabora i frame di priorità correlati al vettore Priority Churn, senza eseguire un test DoS aggressivo.
È indicato per la validazione controllata in pentest, l'analisi dell'esposizione HTTP/2 e la dimostrazione tecnica di un comportamento vulnerabile o potenzialmente sensibile.
Lo script riceve i valori tramite argomenti da riga di comando:
--host
--port
--paths
--shuffles
| Parametro | Descrizione |
|---|---|
--host | FQDN del target autorizzato. Non includere https://. |
--port | Porta TLS su cui è disponibile il servizio HTTP/2. Predefinita: 443. |
--paths | Elenco di path semplici per aprire stream HTTP/2. |
--shuffles | Numero di cicli di modifica della priorità. Mantenere basso per un test sicuro. |