
Go CLI जो ALPN के माध्यम से HTTP/2 पर बातचीत करने वाले HTTPS एंडपॉइंट्स की सूची तैयार करता है, ताकि उन सिस्टमों की पहचान की जा सके जिन्हें CVE-2023-44487 शमन समीक्षा की आवश्यकता है। गैर-शोषणकारी, प्रमाणपत्र-सत्यापित TLS जाँचें, सुरक्षित डिफ़ॉल्ट के साथ।
rapid-reset-check एक छोटा Go CLI है जो HTTPS एंडपॉइंट्स की त्वरित इन्वेंट्री बनाने के लिए है जो HTTP/2 उजागर करते हैं और इसलिए उन्हें CVE-2023-44487 शमन समीक्षा की आवश्यकता होती है।
स्कैनर जानबूझकर गैर-शोषणकारी (non-exploitative) है। यह प्रत्येक लक्ष्य को रिज़ॉल्व करता है, प्रमाणपत्र-सत्यापित TLS कनेक्शन खोलता है, ALPN के माध्यम से h2 और http/1.1 प्रस्तावित करता है, रिकॉर्ड करता है कि पीयर क्या चुनता है, और कनेक्शन बंद कर देता है। यह कोई HTTP अनुरोध, HTTP/2 कनेक्शन प्रस्तावना, स्ट्रीम, RST_STREAM फ्रेम या फ्लड ट्रैफ़िक नहीं भेजता।
[!IMPORTANT]
h2पर बातचीत करना एक एक्सपोज़र अवलोकन है, यह प्रमाण नहीं कि कोई सेवा असुरक्षित या बिना पैच वाली है। एक दूरस्थ हैंडशेक किसी HTTP/2 इम्प्लीमेंटेशन की Rapid Reset सीमाओं, पैच स्तर, अपस्ट्रीम उत्पत्ति या DDoS नियंत्रणों को सत्यापित नहीं कर सकता।
CVE-2023-44487 एक denial-of-service तकनीक है जो तीव्र HTTP/2 स्ट्रीम निर्माण और रद्दीकरण का दुरुपयोग करती है। किसी लाइव सेवा के विरुद्ध इस स्थिति को सिद्ध करने का प्रयास स्वयं संभावित रूप से विघटनकारी ट्रैफ़िक की मांग करेगा। इसके बजाय यह टूल सुरक्षित पहला प्रश्न उत्तर देता है:
TLS पर HTTP/2 को RFC 9113 द्वारा परिभाषित h2 ALPN पहचानकर्ता के माध्यम से विज्ञापित किया जाता है। Google अनुरोध पथ में प्रत्येक HTTP/2-सक्षम सर्वर, प्रॉक्सी और लोड बैलेंसर को सत्यापित या पैच करने की अनुशंसा करता है; इसका CVE-2023-44487 मार्गदर्शन देखें।
टूल चलाने के लिए Go की आवश्यकता नहीं है। अपने प्लेटफ़ॉर्म के लिए आर्काइव नवीनतम GitHub रिलीज़ से डाउनलोड करें:
| प्लेटफ़ॉर्म | रिलीज़ एसेट |
|---|---|
| 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 |
आर्काइव निकालें, फिर rapid-reset-check --version चलाएँ। Windows पर, निष्पादन योग्य फ़ाइल का नाम rapid-reset-check.exe है।
प्रत्येक रिलीज़ में SHA256SUMS शामिल है। Linux पर, उसी निर्देशिका से डाउनलोड किए गए आर्काइव को इस प्रकार सत्यापित करें:
sha256sum --ignore-missing --check SHA256SUMS
macOS पर, shasum -a 256 <archive> की तुलना SHA256SUMS की संबंधित पंक्ति से करें। प्रकाशित सार्वजनिक-रिलीज़ आर्काइव को GitHub आर्टिफैक्ट अटेस्टेशन भी प्राप्त होता है, जिसे GitHub CLI से जाँचा जा सकता है:
gh attestation verify <archive> --repo ramonzx6/http-script-json
किसी Node.js, cURL, nghttp2 या WHOIS स्थापना की आवश्यकता नहीं है।
go test ./...
go build -o rapid-reset-check ./cmd/rapid-reset-check
सोर्स बिल्ड --version से dev रिपोर्ट करते हैं; रिलीज़ बिल्ड अपना संस्करण रिलीज़ टैग से प्राप्त करते हैं।
केवल उन एंडपॉइंट्स को स्कैन करें जिनके मालिक आप हैं या जिनका आकलन करने के लिए आप अधिकृत हैं।
एक या अधिक सार्वजनिक एंडपॉइंट्स स्कैन करें:
./rapid-reset-check example.com api.example.com:8443
बेयर होस्टनाम पोर्ट 443 पर HTTPS के लिए सामान्यीकृत किए जाते हैं। केवल-अथॉरिटी (authority-only) HTTPS URLs भी स्वीकार किए जाते हैं:
./rapid-reset-check https://example.com https://api.example.com:8443
रिपॉज़िटरी की JSON लक्ष्य सूची स्कैन करें:
./rapid-reset-check --input json/urls.json
स्वचालन के लिए स्टैंडर्ड इनपुट का उपयोग करें:
printf '["example.com", "api.example.com"]' | ./rapid-reset-check --input -
सभी सीमाओं और आउटपुट विकल्पों के लिए ./rapid-reset-check --help चलाएँ।
--input मूल JSON एरे प्रारूप स्वीकार करता है:
[
"example.com",
"api.example.com:8443",
"https://www.example.net"
]
ऑब्जेक्ट रूप {"urls": [...]} और {"targets": [...]} भी समर्थित हैं। पोज़िशनल लक्ष्य और --input जानबूझकर परस्पर अनन्य हैं। डुप्लिकेट सामान्यीकृत एंडपॉइंट्स को एक बार स्कैन किया जाता है, और प्रत्येक रन 4,096 इनपुट लक्ष्यों तक सीमित है।
केवल HTTPS एंडपॉइंट्स दायरे में हैं। क्रेडेंशियल, गैर-रूट पथ, क्वेरी, फ्रैगमेंट, असमर्थित स्कीम, गलत प्रारूप वाले पोर्ट और अस्पष्ट होस्टनाम — इन्हें चुपचाप पुनर्लेखित करने के बजाय अस्वीकार कर दिया जाता है।
| मूल्यांकन | अर्थ |
|---|---|
h2_observed_review_required | कम से कम एक सत्यापित TLS पीयर ने h2 चुना। उस पथ के प्रत्येक HTTP/2 घटक की समीक्षा करें; यह कोई भेद्यता निर्णय नहीं है। |
h2_not_observed_on_tested_path | प्रत्येक चयनित पते ने h2 चुने बिना सत्यापित हैंडशेक पूर्ण किया। यह एक निश्चित समय-बिंदु का पथ अवलोकन है, सुरक्षा गारंटी नहीं। |
indeterminate | DNS, कनेक्शन, टाइमआउट, TLS, प्रमाणपत्र या पता-सीमा समस्या ने पूर्ण अवलोकन को रोक दिया। |
not_scanned_policy | रिज़ॉल्व किए गए पतों को स्कैनर की नेटवर्क सुरक्षा नीति द्वारा बाहर रखा गया। |
invalid_target | इनपुट गलत प्रारूप में था या समर्थित HTTPS अथॉरिटी दायरे से बाहर था। |
रिपोर्ट में प्रयास किया गया प्रत्येक रिज़ॉल्व किया गया पता, नेगोशिएटेड ALPN, TLS संस्करण और साइफर, सीमित प्रमाणपत्र पहचान/वैधता डेटा, समय, नीति निर्णय, छोड़े गए पतों की संख्या, एक स्पष्ट पूर्णता फ़्लैग और एक सारांश शामिल होता है। यह प्रतिक्रिया निकाय, प्रतिक्रिया हेडर, कुकीज़ या रॉ प्रमाणपत्र एकत्र नहीं करता।
--ca-file का उपयोग करें; कोई असुरक्षित सत्यापन मोड नहीं है।--allow-private का उपयोग केवल उन आंतरिक एंडपॉइंट्स के लिए करें जिनका आकलन करने के लिए आप अधिकृत हैं।उदाहरण विकल्प:
./rapid-reset-check \
--format json \
--timeout 5s \
--concurrency 4 \
--max-addresses 8 \
example.com > report.json
एक अधिकृत निजी-PKI एंडपॉइंट के लिए:
./rapid-reset-check \
--allow-private \
--ca-file ./internal-root-ca.pem \
service.internal:8443
एग्ज़िट कोड 0 का अर्थ है कि प्रत्येक लक्ष्य ने पूर्ण ALPN अवलोकन उत्पन्न किया। एग्ज़िट कोड 1 का अर्थ है कि कम से कम एक लक्ष्य अमान्य था, नीति द्वारा अवरुद्ध था, या अनिश्चित था; रिपोर्ट फिर भी लिखी जाती है। CLI उपयोग और कॉन्फ़िगरेशन त्रुटियाँ 2 लौटाती हैं। h2 का अवलोकन अपने आप एग्ज़िट कोड नहीं बदलता, क्योंकि यह एक इन्वेंट्री संकेत है, कोई भेद्यता निर्णय नहीं।
प्रत्येक h2_observed_review_required परिणाम के लिए:
परिणाम होस्टनाम, DNS उत्तरों, नेटवर्क पथ, TLS एंडपॉइंट और स्कैन समय के विशिष्ट होते हैं। CDN, anycast, स्प्लिट-होराइज़न DNS, लोड बैलेंसिंग, वैकल्पिक पोर्ट और अप्रयुक्त पते अलग-अलग परिणाम उत्पन्न कर सकते हैं। स्कैनर निम्न कार्य नहीं करता:
h2c), QUIC/HTTP/3, रीडायरेक्ट, एज के पीछे छिपे ऑरिजिन या गैर-HTTPS सेवाओं का निरीक्षण नहीं करता;Server हेडर या CDN फ़िंगरप्रिंट से पैच स्थिति का अनुमान नहीं लगाता;gofmt -w ./cmd ./internal
go vet ./...
go test ./...
go test -race ./...
go build ./...
परीक्षण सुइट स्थानीय TLS फिक्स्चर का उपयोग करता है और सार्वजनिक सेवाओं को स्कैन नहीं करता।
Release Please Conventional Commit संदेशों से रिलीज़ संस्करण और vX.Y.Z टैग प्रबंधित करता है। सामान्य विकास के लिए टैग बनाने या पुश करने की आवश्यकता नहीं होती:
main में मर्ज किए गए कमिट Release Please को संस्करण और चेंजलॉग परिवर्तनों वाला रिलीज़ PR खोलने या अद्यतन करने के लिए प्रेरित करते हैं।पैच परिवर्तनों के लिए fix:, मामूली परिवर्तनों के लिए feat: और प्रमुख परिवर्तनों के लिए breaking-change मार्कर (!) या BREAKING CHANGE: फुटर का उपयोग करें। अनुरक्षकों को Release Please के लिए अपना PR प्रबंधित करने हेतु एक बार Settings > Actions > General > Workflow permissions > Allow GitHub Actions to create and approve pull requests सक्षम करना होगा।
यदि Release Please द्वारा टैग बनाने के बाद एसेट प्रकाशन विफल हो जाता है, तो रिलीज़ ड्राफ्ट ही रहती है। विफलता ठीक करने के बाद उसी मौजूदा vX.Y.Z टैग के साथ Release वर्कफ़्लो को मैन्युअल रूप से पुनः चलाएँ। प्रतिस्थापन टैग न बनाएं और न ही पुश करें।