
أداة CLI بلغة Go تُحصي نقاط نهاية HTTPS التي تتفاوض على HTTP/2 عبر ALPN لتحديد الأنظمة التي تتطلب مراجعة تخفيف CVE-2023-44487. فحوصات TLS غير استغلالية ومتحقَّق منها عبر الشهادات مع إعدادات افتراضية آمنة.
rapid-reset-check هي أداة CLI صغيرة بلغة Go لجرد سريع لنقاط نهاية HTTPS التي تُظهر HTTP/2 وبالتالي تحتاج إلى مراجعة تخفيف CVE-2023-44487.
الماسح الضوئي غير استغلالي عمدًا. فهو يحلّ كل هدف، ويفتح اتصال TLS تم التحقق من شهادته، ويعرض h2 و http/1.1 عبر ALPN، ويسجّل ما يختاره النظير، ثم يغلق الاتصال. لا يرسل أي طلب HTTP، أو مقدمة اتصال HTTP/2، أو دفقًا، أو إطار RST_STREAM، أو حركة مرور flood.
[!IMPORTANT] التفاوض على
h2هو ملاحظة تعرّض، وليس دليلًا على أن الخدمة معرّضة للخطر أو غير مُصحَّحة. لا يمكن لمصافحة عن بُعد التحقق من حدود Rapid Reset لتنفيذ HTTP/2، أو مستوى التصحيح، أو الأصل المنبع، أو ضوابط DDoS.
CVE-2023-44487 أسلوب حرمان من الخدمة يسيء استخدام الإنشاء والإلغاء السريع لدفقات HTTP/2. إن محاولة إثبات الحالة ضد خدمة حيّة تتطلب بحد ذاتها حركة مرور قد تكون معطِّلة. بدلًا من ذلك، تُجيب هذه الأداة عن السؤال الآمن الأول: أي نقاط نهاية TLS مُختبرة تتفاوض حاليًا على HTTP/2 وبالتالي تتطلب من المشغِّل التحقق من التخفيف؟
يُعلَن عن HTTP/2 عبر TLS باستخدام معرّف ALPN h2 المعرَّف في . توصي Google بالتحقق من أو تصحيح كل خادم ووكيل وموازن أحمال يدعم HTTP/2 في مسار الطلب؛ راجع .
لا يتطلب تشغيل الأداة تثبيت 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 artifact، ويمكن التحقق منها باستخدام 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
تُظهر عمليات البناء من المصدر القيمة dev عند استخدام --version؛ بينما تحصل عمليات بناء الإصدارات على رقم إصدارها من وسم الإصدار.
افحص فقط نقاط النهاية التي تملكها أو المخوَّل لك تقييمها.
افحص نقطة نهاية عامة واحدة أو أكثر:
./rapid-reset-check example.com api.example.com:8443
يتم تطبيع أسماء المضيفين المجردة إلى HTTPS على المنفذ 443. كما تُقبل عناوين URL الخاصة بـ HTTPS التي تحمل سلطة فقط:
./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 لإضافة مرجع مصادقة (CA) خاص؛ لا يوجد وضع تحقق غير آمن.--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 أرقام إصدارات النشر ووسوم vX.Y.Z من رسائل Conventional Commit. لا يتطلب التطوير العادي إنشاء الوسوم أو دفعها:
main إلى قيام Release Please بفتح أو تحديث طلب سحب للإصدار يحتوي على تغييرات الإصدار وسجل التغييرات.استخدم fix: للتغييرات التصحيحية، و feat: للتغييرات الثانوية، وعلامة تغيير جذري (!) أو تذييل BREAKING CHANGE: للتغييرات الرئيسية. يجب على المشرفين تفعيل Settings > Actions > General > Workflow permissions > Allow GitHub Actions to create and approve pull requests مرة واحدة حتى يتمكن Release Please من إدارة طلب السحب الخاص به.
إذا فشل نشر الأصول بعد أن ينشئ Release Please وسمًا، يبقى الإصدار مسودّة. أعد تشغيل سير عمل Release يدويًا باستخدام وسم vX.Y.Z الموجود بعد إصلاح الفشل. لا تنشئ أو تدفع وسمًا بديلًا.