
CLI in Go che censisce gli endpoint HTTPS che negoziano HTTP/2 tramite ALPN per identificare i sistemi che richiedono una revisione delle mitigazioni per CVE-2023-44487. Controlli TLS non exploitativi, con verifica dei certificati e impostazioni predefinite sicure.
rapid-reset-check è una piccola CLI in Go per inventariare rapidamente gli endpoint HTTPS che espongono HTTP/2 e pertanto richiedono una revisione delle mitigazioni per CVE-2023-44487.
Lo scanner è volutamente inoffensivo: risolve ogni target, apre una connessione TLS con verifica del certificato, offre h2 e http/1.1 tramite ALPN, registra ciò che il peer seleziona e chiude la connessione. Non invia alcuna richiesta HTTP, prefazione di connessione HTTP/2, stream, frame RST_STREAM o traffico flood.
[!IMPORTANT] La negoziazione di
h2è un'osservazione di esposizione, non una prova che un servizio sia vulnerabile o non patchato. Un handshake remoto non può verificare i limiti Rapid Reset di un'implementazione HTTP/2, il livello di patch, l'origine a monte o i controlli DDoS.
CVE-2023-44487 è una tecnica di denial-of-service che abusa della rapida creazione e cancellazione di stream HTTP/2. Tentare di dimostrare la condizione contro un servizio live richiederebbe a sua volta traffico potenzialmente dirompente. Questo strumento risponde invece alla prima domanda sicura: quali endpoint TLS testati negoziano attualmente HTTP/2 e pertanto richiedono che un operatore ne verifichi la mitigazione?
HTTP/2 su TLS viene pubblicizzato utilizzando l'identificatore ALPN h2 definito da RFC 9113. Google consiglia di verificare o applicare patch a ogni server, proxy e load balancer compatibile con HTTP/2 nel percorso della richiesta; consulta la guida su CVE-2023-44487.
Go non è necessario per eseguire lo strumento. Scarica l'archivio per la tua piattaforma dall'ultima release GitHub:
| Piattaforma | Asset della release |
|---|---|
| Linux x86-64 | rapid-reset-check_<version>_linux_amd64.tar.gz |
| Linux ARM64 | rapid-reset-check_<version>_linux_arm64.tar.gz |
| macOS Intel | rapid-reset-check_<version>_darwin_amd64.tar.gz |
| macOS Apple silicon | rapid-reset-check_<version>_darwin_arm64.tar.gz |
| Windows x86-64 | rapid-reset-check_<version>_windows_amd64.zip |
| Windows ARM64 | rapid-reset-check_<version>_windows_arm64.zip |
Estrai l'archivio, quindi esegui rapid-reset-check --version. Su Windows, l'eseguibile si chiama rapid-reset-check.exe.
Ogni release include SHA256SUMS. Su Linux, verifica un archivio scaricato dalla stessa directory con:
sha256sum --ignore-missing --check SHA256SUMS
Su macOS, confronta shasum -a 256 <archive> con la riga corrispondente in SHA256SUMS. Gli archivi pubblicati nelle release pubbliche ricevono anche un'attestazione dell'artefatto GitHub, che può essere verificata con la GitHub CLI:
gh attestation verify <archive> --repo ramonzx6/http-script-json
Non è richiesta alcuna installazione di Node.js, cURL, nghttp2 o WHOIS.
go test ./...
go build -o rapid-reset-check ./cmd/rapid-reset-check
Le build dal sorgente riportano dev con --version; le build di release ricevono la loro versione dal tag della release.
Scansiona solo endpoint che possiedi o che sei autorizzato a valutare.
Scansiona uno o più endpoint pubblici:
./rapid-reset-check example.com api.example.com:8443
I nomi host senza schema vengono normalizzati su HTTPS sulla porta 443. Sono accettati anche URL HTTPS con la sola authority:
./rapid-reset-check https://example.com https://api.example.com:8443
Scansiona l'elenco di target JSON del repository:
./rapid-reset-check --input json/urls.json
Usa l'input standard per l'automazione:
printf '["example.com", "api.example.com"]' | ./rapid-reset-check --input -
Esegui ./rapid-reset-check --help per tutti i limiti e le opzioni di output.
--input accetta il formato originale di array JSON:
[
"example.com",
"api.example.com:8443",
"https://www.example.net"
]
Sono supportate anche le forme a oggetto {"urls": [...]} e {"targets": [...]}. I target posizionali e --input sono intenzionalmente mutuamente esclusivi. Gli endpoint normalizzati duplicati vengono scansionati una sola volta e ogni esecuzione è limitata a 4.096 target di input.
Solo gli endpoint HTTPS sono in scope. Credenziali, percorsi non root, query, frammenti, schemi non supportati, porte malformate e nomi host ambigui vengono rifiutati invece di essere riscritti silenziosamente.
| Valutazione | Significato |
|---|---|
h2_observed_review_required | Almeno un peer TLS verificato ha selezionato h2. Esamina ogni componente HTTP/2 in quel percorso; questo non è un verdetto di vulnerabilità. |
h2_not_observed_on_tested_path | Ogni indirizzo selezionato ha completato un handshake verificato senza selezionare h2. Questa è un'osservazione del percorso in un dato momento, non una garanzia di sicurezza. |
indeterminate | Un problema di DNS, connessione, timeout, TLS, certificato o limite di indirizzi ha impedito un'osservazione completa. |
not_scanned_policy | Gli indirizzi risolti sono stati esclusi dalla policy di sicurezza di rete dello scanner. |
invalid_target | L'input era malformato o al di fuori dell'ambito delle authority HTTPS supportate. |
Il report include ogni indirizzo risolto tentato, ALPN negoziato, versione TLS e cipher, dati limitati di identità/validità del certificato, tempistiche, decisioni di policy, conteggi degli indirizzi omessi, un flag esplicito di completezza e un riepilogo. Non raccoglie body di risposta, header di risposta, cookie o certificati grezzi.
--ca-file per aggiungere una CA privata; non esiste una modalità di verifica non sicura.--allow-private solo per endpoint interni che sei autorizzato a valutare.Opzioni di esempio:
./rapid-reset-check \
--format json \
--timeout 5s \
--concurrency 4 \
--max-addresses 8 \
example.com > report.json
Per un endpoint autorizzato con PKI privata:
./rapid-reset-check \
--allow-private \
--ca-file ./internal-root-ca.pem \
service.internal:8443
Il codice di uscita 0 significa che ogni target ha prodotto un'osservazione ALPN completa. Il codice di uscita 1 significa che almeno un target non era valido, è stato bloccato dalla policy o è indeterminato; il report viene comunque scritto. Gli errori di utilizzo della CLI e di configurazione restituiscono 2. Osservare h2 non modifica di per sé il codice di uscita, perché è un segnale di inventario, non un verdetto di vulnerabilità.
Per ogni risultato h2_observed_review_required: