
إثبات المفهوم (PoC) لـ CVE-2026-49975 – هجوم استنزاف ذاكرة خادم HTTP/2 يستغل تضخيم HPACK والاحتفاظ بالاتصال (HTTP/2 Slowloris).
إثبات مفهوم (PoC) لهجوم حجب الخدمة (DoS) يستهدف خوادم HTTP/2. من خلال الجمع بين تضخيم HPACK والاحتفاظ بالتدفقات (streams)، يمكن لجهاز واحد ذي اتصال شبكة متواضع أن يجعل الخادم المستهدف غير متاح في غضون ثوانٍ.
CVE-2026-49975mod_http2 الخاصة بـ Apache HTTP Server بتنفيذ هجوم حجب خدمة عبر طلبات HTTP مصممة خصيصًا.يسير الاستغلال عبر عدة مراحل، كما توضحها سجلات التنفيذ:
إنشاء اتصال TCP/TLS
يتم فتح اتصالات TCP/TLS متزامنة متعددة إلى الخادم المستهدف.
تفاوض HTTP/2
يكتشف العميل الحد الأقصى لعدد التدفقات المتزامنة التي يسمح بها الخادم (عادةً 100 أو 128).
تهيئة HPACK
يتم إرسال ترويسات HTTP مصممة بعناية لإجبار الخادم على تخصيص جداول ضغط HPACK كبيرة بشكل مفرط، مما يزيد استهلاك الذاكرة بسرعة.
الاحتفاظ بالاتصال
بمجرد فتح التدفقات، تظل الاتصالات حية إلى أجل غير مسمى، مما يمنع تحرير الذاكرة المخصصة ويستنزف في النهاية ذاكرة الوصول العشوائي المتاحة للخادم.
تم إجراء الاختبارات على عدة خوادم ويب باستخدام إعداداتها الافتراضية.
h2.exceptions.TooManyStreamsErrorيحدث عندما تتجاوز القيمة الممررة إلى --streams الحد الأقصى للتدفقات المتزامنة التي يدعمها الخادم.
الحل: افحص حد تدفقات الخادم قبل بدء الهجوم.
NameError: name 'SettingsAcknowledued' is not definedخطأ كتابي بسيط في الكود المصدري لإثبات المفهوم.
الحل: استبدل:
SettingsAcknowledued
بـ:
SettingsAcknowledged
[SSL] unknown errorيشير عادةً إلى أن الهدف لا يدعم HTTP/2 عبر TLS أو يرفض الاتصالات الواردة.
EOF occurred in violation of protocolأغلق الخادم البعيد الاتصال بشكل غير متوقع.
يحدث هذا غالبًا عندما يبدأ الخادم في استنفاد موارده ويرفض الاتصالات الجديدة.
Invalid input ConnectionInputs.SEND_HEADERSأغلق الخادم اتصال HTTP/2 قبل اكتمال إرسال جميع ترويسات الطلب.
تم تنفيذ إثبات المفهوم كبرنامج نصي بلغة بايثون.
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
هجوم أساسي باستخدام 10 اتصالات و100 تدفق:
python bomb.py example.com --streams 100 --connections 10
(يتطلب أن يسمح الهدف بما لا يقل عن 100 تدفق متزامن لكل اتصال.)
اكتشاف تلقائي لحد التدفقات:
python bomb.py example.com --connections 10
هجوم واسع النطاق:
python bomb.py target.example.com --connections 50
اختبار اتصالات عالية الحجم:
python h2bomb.py -t target.example.com:443 -c 1000
اختبار اتصالات واسع النطاق جدًا:
python h2bomb.py -t example.com -c 20000
يُقدَّم هذا البرنامج حصريًا لأغراض البحث الأمني والتعليم واختبار الأنظمة التي لديك تفويض صريح لاختبارها.
قد يشكل الاستخدام غير المصرح به لهذه الأداة ضد أنظمة لا تملكها أو لا تملك إذنًا لاختبارها انتهاكًا للقوانين واللوائح المعمول بها. لا يتحمل المؤلفون والمساهمون أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن استخدام هذا البرنامج.
| خادم الويب | الإصدار المختبر | الذاكرة (RAM) | استنزاف الذاكرة | السلوك الملاحَظ |
|---|
| Envoy | 1.37.2 | 32 جيجابايت | ~10 ثوانٍ | نجح في استنزاف الذاكرة بسرعة كبيرة. |
| Apache HTTP Server | 2.4.67 | 32 جيجابايت | ~18 ثانية | حد التدفقات عادةً 100. تقدم الهجوم القياسي عبر تهيئة HPACK والاحتفاظ بالاتصال إلى أجل غير مسمى. |
| nginx | 1.29.7 | 32 جيجابايت | ~45 ثانية | حد التدفقات عادةً 128. ينجح الهجوم لكنه يتطلب مزيدًا من الوقت لاستهلاك الذاكرة المتاحة. |
| Microsoft IIS | غير محدد | 64 جيجابايت | ~45 ثانية | قد يعلن عن حدود تدفقات كبيرة بشكل غير معتاد مثل 4294967297. |
| أهداف غير معرضة للثغرة | متنوعة | - | - | فشل فوري في TLS أو TooManyStreamsError عند محاولة تجاوز حد التدفقات المكوَّن على الخادم. |