
Ein Go-CLI, das HTTPS-Endpunkte erfasst, die über ALPN HTTP/2 aushandeln, um Systeme zu identifizieren, die eine Überprüfung der Mitigation für CVE-2023-44487 benötigen. Nicht-exploitative, zertifikatsverifizierte TLS-Prüfungen mit sicheren Standardeinstellungen.
rapid-reset-check ist ein kleines Go-CLI-Tool zur schnellen Inventarisierung von HTTPS-Endpunkten, die HTTP/2 bereitstellen und daher eine Überprüfung der Maßnahmen zu CVE-2023-44487 benötigen.
Der Scanner ist bewusst nicht-exploitativ. Er löst jedes Ziel auf, öffnet eine zertifikatgeprüfte TLS-Verbindung, bietet h2 und http/1.1 über ALPN an, zeichnet auf, was der Gegenüber auswählt, und schließt die Verbindung. Er sendet keine HTTP-Anfrage, kein HTTP/2-Connection-Preface, keinen Stream, keinen RST_STREAM-Frame und keinen Flood-Traffic.
[!IMPORTANT] Das Aushandeln von
h2ist eine Beobachtung der Exposition, kein Beweis dafür, dass ein Dienst verwundbar oder nicht gepatcht ist. Ein entfernter Handshake kann die Rapid-Reset-Grenzen, den Patchstand, den vorgelagerten Ursprung oder die DDoS-Schutzmaßnahmen einer HTTP/2-Implementierung nicht verifizieren.
CVE-2023-44487 ist eine Denial-of-Service-Technik, die das schnelle Erstellen und Abbrechen von HTTP/2-Streams missbraucht. Der Versuch, die Bedingung gegen einen Live-Dienst nachzuweisen, würde selbst potenziell störenden Datenverkehr erfordern. Dieses Tool beantwortet stattdessen die sichere erste Frage: Welche getesteten TLS-Endpunkte handeln derzeit HTTP/2 aus und erfordern daher, dass ein Betreiber die Abhilfemaßnahmen überprüft?
HTTP/2 über TLS wird über den h2-ALPN-Bezeichner angekündigt, der in RFC 9113 definiert ist. Google empfiehlt, jeden HTTP/2-fähigen Server, Proxy und Load Balancer im Anforderungspfad zu überprüfen oder zu patchen; siehe die CVE-2023-44487-Anleitung von Google.
Go ist nicht erforderlich, um das Tool auszuführen. Laden Sie das Archiv für Ihre Plattform von der neuesten GitHub-Version herunter:
| Plattform | Release-Asset |
|---|---|
| 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 |
Entpacken Sie das Archiv und führen Sie dann rapid-reset-check --version aus. Unter Windows heißt die ausführbare Datei rapid-reset-check.exe.
Jede Version enthält SHA256SUMS. Unter Linux überprüfen Sie ein heruntergeladenes Archiv aus demselben Verzeichnis mit:
sha256sum --ignore-missing --check SHA256SUMS
Unter macOS vergleichen Sie shasum -a 256 <archive> mit der entsprechenden Zeile in SHA256SUMS. Veröffentlichte öffentliche Release-Archive erhalten außerdem eine GitHub-Artefaktattestierung, die mit der GitHub-CLI überprüft werden kann:
gh attestation verify <archive> --repo ramonzx6/http-script-json
Es ist keine Installation von Node.js, cURL, nghttp2 oder WHOIS erforderlich.
go test ./...
go build -o rapid-reset-check ./cmd/rapid-reset-check
Quellcode-Builds melden dev bei --version; Release-Builds erhalten ihre Version aus dem Release-Tag.
Scannen Sie nur Endpunkte, die Ihnen gehören oder deren Bewertung Sie autorisiert sind.
Einen oder mehrere öffentliche Endpunkte scannen:
./rapid-reset-check example.com api.example.com:8443
Nackte Hostnamen werden auf HTTPS über Port 443 normalisiert. Nur-Autoritäts-HTTPS-URLs werden ebenfalls akzeptiert:
./rapid-reset-check https://example.com https://api.example.com:8443
Die JSON-Zielliste des Repositorys scannen:
./rapid-reset-check --input json/urls.json
Standardeingabe für die Automatisierung verwenden:
printf '["example.com", "api.example.com"]' | ./rapid-reset-check --input -
Führen Sie ./rapid-reset-check --help aus, um alle Grenzen und Ausgabeoptionen anzuzeigen.
--input akzeptiert das ursprüngliche JSON-Array-Format:
[
"example.com",
"api.example.com:8443",
"https://www.example.net"
]
Die Objektformen {"urls": [...]} und {"targets": [...]} werden ebenfalls unterstützt. Positionale Ziele und --input schließen sich bewusst gegenseitig aus. Doppelte normalisierte Endpunkte werden nur einmal gescannt, und jeder Lauf ist auf 4.096 Eingabeziele begrenzt.
Nur HTTPS-Endpunkte sind im Rahmen. Anmeldedaten, Nicht-Root-Pfade, Abfragen, Fragmente, nicht unterstützte Schemata, fehlerhafte Ports und mehrdeutige Hostnamen werden abgelehnt und nicht stillschweigend umgeschrieben.
| Bewertung | Bedeutung |
|---|---|
h2_observed_review_required | Mindestens ein verifizierter TLS-Gegenüber hat h2 ausgewählt. Überprüfen Sie jede HTTP/2-Komponente in diesem Pfad; dies ist kein Schwachstellenurteil. |
h2_not_observed_on_tested_path | Jede ausgewählte Adresse hat einen verifizierten Handshake abgeschlossen, ohne h2 auszuwählen. Dies ist eine punktuelle Pfadbeobachtung, keine Sicherheitsgarantie. |
indeterminate | Ein DNS-, Verbindungs-, Timeout-, TLS-, Zertifikats- oder Adresslimitproblem verhinderte eine vollständige Beobachtung. |
not_scanned_policy | Die aufgelösten Adressen wurden von der Netzwerksicherheitsrichtlinie des Scanners ausgeschlossen. |
invalid_target | Die Eingabe war fehlerhaft oder außerhalb des unterstützten HTTPS-Autoritätsbereichs. |
Der Bericht enthält jede versuchte aufgelöste Adresse, ausgehandeltes ALPN, TLS-Version und -Cipher, begrenzte Daten zu Zertifikatsidentität/-gültigkeit, Zeitmessung, Richtlinienentscheidungen, Anzahl ausgelassener Adressen, ein explizites Vollständigkeitskennzeichen und eine Zusammenfassung. Er erfasst keine Antwortkörper, Antwort-Header, Cookies oder rohe Zertifikate.
--ca-file, um eine private CA hinzuzufügen; es gibt keinen unsicheren Verifizierungsmodus.--allow-private nur für interne Endpunkte, deren Bewertung Sie autorisiert sind.Beispieloptionen:
./rapid-reset-check \
--format json \
--timeout 5s \
--concurrency 4 \
--max-addresses 8 \
example.com > report.json
Für einen autorisierten Endpunkt mit privater PKI:
./rapid-reset-check \
--allow-private \
--ca-file ./internal-root-ca.pem \
service.internal:8443
Exitcode 0 bedeutet, dass jedes Ziel eine vollständige ALPN-Beobachtung ergeben hat. Exitcode 1 bedeutet, dass mindestens ein Ziel ungültig, durch Richtlinien blockiert oder unbestimmt war; der Bericht wird trotzdem geschrieben. CLI-Nutzungs- und Konfigurationsfehler geben 2 zurück. Das Beobachten von h2 ändert für sich genommen nicht den Exitcode, da es ein Inventarsignal und kein Schwachstellenurteil ist.
Für jedes h2_observed_review_required-Ergebnis: