
نص برمجي بلغة Python يتحقق مما إذا كان خادم الويب معرضًا لثغرة MadeYouReset (CVE-2025-8671) — هجوم حجب الخدمة (DoS) عبر HTTP/2 يتجاوز إجراءات الحماية الخاصة بـ Rapid Reset عبر خداع الخادم لإعادة تعيين تدفقاته الخاصة. يستكشف الهدف بإرسال إطار WINDOW_UPDATE غير صالح ويفحص ما إذا كان الخادم يستجيب.
نص برمجي خفيف بلغة Python للكشف عمّا إذا كان خادم الويب معرّضًا بشكل محتمل لثغرة رفض الخدمة عبر HTTP/2 والمُسمّاة MadeYouReset — المُتتبَّعة باسم CVE-2025-8671 (CVSS 7.5 — عالية).
MadeYouReset هي ثغرة رفض خدمة (DoS) عبر HTTP/2 أُعلن عنها في أغسطس 2025 من قِبل باحثين في جامعة تل أبيب وشركة Imperva. تستغل الثغرة تباينًا بين احتساب تدفقات HTTP/2 والمعالجة الداخلية في الواجهة الخلفية (backend) لدى العديد من تطبيقات الخوادم الشائعة.
يرسل الهجوم إطارات تحكم HTTP/2 تالفة عمدًا (مثل إطار WINDOW_UPDATE بقيمة increment=0، وهو أمر غير قانوني وفق RFC 9113 §6.9.1) لإجبار الخادم نفسه على إصدار إطارات RST_STREAM. ولأن الخادم يتعامل مع التدفق (stream) كمغلق على مستوى البروتوكول بينما يواصل معالجة الطلب في الواجهة الخلفية، يمكن للمهاجم تجاوز حد MAX_CONCURRENT_STREAMS واستنزاف موارد الخادم — دون إرسال أي إطار RST_STREAM واحد من جهة العميل.
وهذا يجعله تجاوزًا للتدابير الوقائية التي طُبّقت لهجوم Rapid Reset السابق (CVE-2023-44487).
البرمجيات المعروفة المتأثرة:
| المنتج | CVE |
|---|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
| F5 BIG-IP | CVE-2025-54500 |
| IBM WebSphere Application Server Liberty | CVE-2025-36047 |
| Varnish, Fastly, Jetty, SUSE, Wind River | CVE-2025-8671 |
h2 عبر ALPN.SETTINGS.HEADERS.WINDOW_UPDATE تالفًا (increment=0) على التدفق المفتوح.RST_STREAM على التدفق (دون GOAWAY) → من المحتمل أن يكون الخادم معرّضًا للثغرة.GOAWAY → سلوك صحيح وفق RFC؛ ومن المحتمل أن تكون الثغرة مصحّحة.يُنفّذ النص البرمجي استطلاعًا سلبيًا للقراءة فقط — فهو لا يحاول استغلال الخادم أو اختبار الضغط عليه.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# No pip install needed — no dependencies
python3 main.py <url> [OPTIONS]
| العلامة | الافتراضي | الوصف |
|---|---|---|
--timeout SECONDS | 8 | مهلة قراءة المقبس (socket) |
--no-color | off | تعطيل مخرجات الألوان ANSI |
# Basic check
python3 main.py https://example.com
# Custom port and longer timeout
python3 main.py https://example.com:8443 --timeout 15
# CI-friendly (no colour)
python3 main.py https://example.com --no-color
| الرمز | المعنى |
|---|---|
0 | غير معرّض للثغرة — استجاب الخادم بـ GOAWAY (سلوك صحيح وفق RFC) |
1 | من المحتمل أن يكون معرّضًا للثغرة — أرسل الخادم RST_STREAM على التدفق دون GOAWAY |
2 | غير حاسم — لا يوجد HTTP/2، أو خطأ في الاتصال، أو استجابة غامضة |
تجعل رموز الخروج من السهل دمج الأداة في خطوط CI أو نصوص الأتمتة.
========================================================
MadeYouReset (CVE-2025-8671) Checker
========================================================
Target : https://vulnerable-server.example.com
Host : vulnerable-server.example.com:443
Path : /
Timeout : 8.0s
────────────────────────────────────────────────────────
[*] Connecting to vulnerable-server.example.com:443 ...
✓ TCP connection established
[*] Performing TLS handshake (ALPN: h2, http/1.1) ...
→ Negotiated protocol : h2
✓ HTTP/2 (h2) negotiated via ALPN
[*] Sending HTTP/2 client preface ...
✓ Preface + SETTINGS sent
[*] Waiting for server SETTINGS ...
← Frame type=0x04 stream=0 length=18
✓ Server SETTINGS received
✓ Sent SETTINGS ACK
[*] Opening HTTP/2 stream 1 (HEADERS frame) ...
✓ HEADERS sent on stream 1
[*] Sending malformed WINDOW_UPDATE (increment=0) on stream 1 ...
RFC 9113 §6.9.1: increment=0 is a stream-level FLOW_CONTROL_ERROR
✓ Malformed WINDOW_UPDATE sent
[*] Analysing server response (timeout=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
RESULT
────────────────────────────────────────────────────────
[LIKELY VULNERABLE]
Server responded with RST_STREAM on stream 1
(error_code=0x00000003) but did NOT send GOAWAY.
Recommended actions:
• Patch: Apache Tomcat ≥10.1.44/11.0.10/9.0.108,
Netty ≥4.1.124.Final / 4.2.4.Final,
and other vendor advisories for CVE-2025-8671.
• Interim: disable HTTP/2 or deploy a WAF/proxy that
validates HTTP/2 frames before forwarding.
========================================================
| الإجراء | التفاصيل |
|---|---|
| التحديث (Patch) | طبّق أحدث تحديث من المورّد لمكدّس HTTP/2 لديك (انظر الجدول أعلاه) |
| تعطيل HTTP/2 | العودة إلى HTTP/1.1 كإجراء تخفيفي مؤقت |
| WAF / وسيط (Proxy) | انشر وسيطًا عكسيًا (reverse proxy) أو جدار حماية لتطبيقات الويب (WAF) يتحقق من صحة إطارات HTTP/2 عند الحافة |
| تحديد المعدل (Rate limiting) | فرض حدود قصوى لاتصالات كل عميل وحدود قصوى لمعدل RST_STREAM |
هذه الأداة مخصّصة لأغراض الاختبارات والبحوث الأمنية المصرّح بها فقط.
لا تشغّل هذا النص البرمجي ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها.
لا يتحمّل المؤلفون أي مسؤولية عن سوء الاستخدام.