ثغرة واحدة بأسماء متعددة
في أكتوبر 2026، ظهرت تفاصيل ثغرة أمنية حرجة في مكتبة ضغط البيانات Brotli، المستخدمة في عدد كبير من التطبيقات ومكتبات البرمجيات.
تحمل الثغرة المعرّف CVE-2026-111497، واشتهرت بعدة أسماء، أبرزها:
Node2Shell
Broccoli2Shell
HTTP2Shell
هذه الأسماء تشير إلى المشكلة الأمنية نفسها، وليست إلى ثلاث ثغرات مستقلة.
بدأ الاهتمام بالثغرة من خلال تأثيرها على Node.js، ثم اتضح أن نطاق التأثير أوسع بسبب استخدام Brotli Decoder في بيئات ومكتبات أخرى، بما في ذلك Python وبعض منتجات Microsoft وأنظمة Proxy.
تُظهر هذه الحالة أهمية مراجعة Dependencies والمكتبات المضمنة داخل البرامج، وليس الاكتفاء بفحص التطبيق الرئيسي.
ما هي ثغرة CVE-2026-111497؟
الثغرة هي مشكلة من نوع Out-of-Bounds Write في Brotli Decoder، أي كتابة بيانات خارج الحدود المخصصة للذاكرة.
تُستخدم Brotli لضغط البيانات وتقليل حجمها، بما يساعد على تحسين أداء نقل الملفات ومحتوى الويب. وعندما يستقبل التطبيق بيانات مضغوطة، يجب على Decoder فك الضغط بطريقة تتحقق من صحة البيانات وتحافظ على سلامة الذاكرة.
في الإصدارات المتأثرة، قد تؤدي معالجة بعض أنماط البيانات المضغوطة المصممة خصيصًا إلى خلل في التعامل مع انتقالات الكتل داخل تدفق Brotli.
ترتبط المشكلة بطريقة التمييز بين حالتين مختلفتين:
أن تكون البيانات غير مكتملة وتحتاج إلى مزيد من الإدخال.
أن تكون البيانات غير صالحة ويجب رفضها.
عندما لا يتم التعامل مع هذه الحالات بصورة صحيحة، قد يستمر Decoder في معالجة البيانات بطريقة غير آمنة، ما قد يؤدي إلى الكتابة خارج حدود Buffer داخلي.
وقد تشمل النتائج المحتملة:
Memory Corruption: فساد محتويات الذاكرة.
Process Crash: انهيار العملية المتأثرة.
Memory Disclosure: كشف بيانات موجودة في الذاكرة.
Remote Code Execution (RCE): تنفيذ أوامر برمجية في ظروف استغلال معينة.
لا يعني وجود الثغرة أن كل تطبيق يستخدم Brotli قابل تلقائيًا لتنفيذ الأوامر عن بُعد؛ إذ يعتمد ذلك على إمكانية وصول بيانات يتحكم فيها المهاجم إلى Decoder المتأثر، وعلى تفاصيل بيئة التشغيل.
لماذا تحمل الثغرة أسماء Node2Shell وBroccoli2Shell وHTTP2Shell؟
تختلف الأسماء بسبب اتساع نطاق البحث في المشكلة الأمنية، لكن جميعها مرتبطة بالمعرّف CVE-2026-111497.
Node2Shell
ظهر هذا الاسم عند التركيز على تأثير الثغرة في Brotli Decoder المضمّن في Node.js، حيث يمكن للبيانات المضغوطة الخبيثة أن تصل إلى مكوّن فك الضغط أثناء معالجة الطلبات أو الاستجابات.
Broccoli2Shell
يستخدم هذا الاسم للإشارة بصورة أوسع إلى خلل Brotli الأساسي، مع التركيز على إمكانية تحوله إلى نقطة دخول لتنفيذ أوامر في الأنظمة المتأثرة.
HTTP2Shell
يعكس هذا الاسم امتداد النقاش إلى التطبيقات التي تتعامل مع بيانات HTTP المضغوطة، بما فيها بعض المكتبات والخدمات التي تستخدم Brotli.
تنبيه تقني: اسم HTTP2Shell لا يعني أن بروتوكول HTTP/2 نفسه هو مصدر الخلل. المشكلة الأساسية في Brotli Decoder، ويمكن أن تصل البيانات المتأثرة إلى Decoder عبر مسارات مختلفة، سواء من طلب HTTP أو استجابة HTTP أو بيانات مضغوطة أخرى.
ما مستوى خطورة الثغرة؟
يحمل CVE-2026-111497 تقييم CVSS 4.0 يبلغ 9.2 من 10 في قاعدة بيانات GitHub الأمنية، بينما صنّف مشروع Node.js الثغرة على أنها High Severity وفق تقييمه الخاص.
قد يستطيع مهاجم عن بُعد غير مصادق عليه استغلال الثغرة إذا تمكن من إيصال بيانات Brotli مصممة خصيصًا إلى Decoder متأثر.
من المهم التفريق بين وجود خلل نظري وإمكانية الاستغلال الفعلي. فقد أظهرت الأبحاث التقنية إمكانية تنفيذ أوامر في بيئات محددة، لكن ذلك لا يثبت أن جميع الأنظمة المتأثرة قابلة للاستغلال بالطريقة نفسها.
ما الأنظمة والبرمجيات المتأثرة؟
لأن Brotli مكوّن يُستخدم في بيئات متعددة، لا يقتصر نطاق المراجعة على Node.js فقط.
1. Node.js
تتضمن بيئة Node.js مكتبة node:zlib التي تدعم فك ضغط Brotli.
قد تتأثر التطبيقات التي تستخدمها لمعالجة بيانات مضغوطة غير موثوقة، بما فيها بعض الخدمات التي تعالج HTTP Request Bodies أو تجلب HTTP Responses من مصادر خارجية.
ومن الأمثلة على المسارات التي تستحق المراجعة:
تطبيقات Express التي تعالج Compressed Request Bodies.
خدمات API التي تتعامل مع بيانات Brotli.
Web Applications التي تجلب محتوى من مصادر خارجية.
Containers التي تستخدم إصدارات Node.js متأثرة.
2. Python
قد تتأثر بيئات Python التي تحتوي على الحزم التالية:
Brotlibrotlicffi
وتزداد أهمية فحص Dependencies لأن بعض HTTP Clients والمكتبات قد تستخدم هذه الحزم بصورة غير مباشرة.
من أمثلة المكونات التي تستحق المراجعة بحسب طريقة تثبيتها وإعدادها:
requestsوurllib3httpxaiohttpScrapy
لا يعني ذلك أن كل تثبيت لهذه المكتبات متأثر. العامل الحاسم هو وجود Decoder متأثر وإمكانية وصول بيانات غير موثوقة إليه.
3. Bun وEnvoy
تشمل مراجعة التأثير أيضًا بيئات مثل Bun وEnvoy Proxy، وفق الإصدارات والمكونات التي تستخدم Brotli.
في بيئات Proxy وService Mesh، يجب التحقق من إصدار المنتج الفعلي، وما إذا كان يتضمن المكوّن المتأثر، ومن تحديثات المورّد الخاصة بالفرع المستخدم.
4. منتجات Microsoft
أعلنت Microsoft أيضًا عن تحديثات أمنية مرتبطة بالثغرة في بعض منتجات .NET وVisual Studio وPowerShell.
هذا يوضح أن المشكلة ليست محصورة في لغة برمجة واحدة، بل يمكن أن تنتقل عبر مكتبة مشتركة أو نسخة مضمّنة من Decoder داخل برنامج أكبر.
لذلك يجب مراجعة Security Advisories الخاصة بكل منتج بدل افتراض أن تحديث Node.js أو Brotli في بيئة واحدة سيصلح جميع المنتجات الأخرى.
ما إصدارات Brotli وNode.js التي يجب تحديثها؟
وفقًا لمعلومات التحديث المنشورة عن الثغرة، تتضمن الإصدارات المصححة ما يلي:
| المكوّن | الإصدارات المصححة |
|---|---|
| Google Brotli | 1.0.10 أو 1.1.1 أو 1.2.1، بحسب الفرع المستخدم |
| Node.js 22.x | 22.23.4 أو أحدث ضمن الفرع |
| Node.js 24.x | 24.22.1 أو أحدث ضمن الفرع |
| Node.js 26.x | 26.12.1 أو أحدث ضمن الفرع |
Python Brotli | 1.2.1 أو أحدث |
Python brotlicffi | 1.2.1.0 أو أحدث |
يجب دائمًا مراجعة التنبيه الرسمي للمنتج للتأكد من الإصدار المناسب. وقد تختلف أرقام الإصدارات وطريقة توفير التصحيح بين توزيعات Linux والمنتجات التي تدمج نسخة خاصة من المكتبة.
أما إصدارات Node.js غير المدعومة، فلا ينبغي افتراض وجود تحديث رسمي لها؛ الأفضل الانتقال إلى فرع مدعوم ومصحح.
كيف تتحقق من وجود نسخة متأثرة؟
ابدأ بحصر البرامج والبيئات التي قد تستخدم Brotli Decoder.
فحص Node.js
يمكنك معرفة إصدار Node.js المستخدم على جهاز أو Server من خلال:
node --versionلكن هذا الأمر لا يكفي وحده. فقد تعمل Production Containers أو Services أخرى بإصدار مختلف عن إصدار الجهاز الذي تجري عليه الفحص.
راجع أيضًا:
إصدارات Node.js داخل Containers.
Base Images المستخدمة في Deployment.
Lockfiles وإصدارات Dependencies.
الخدمات التي تستخدم
node:zlibلفك ضغط Brotli.إعدادات Middleware التي تعالج Compressed Request Bodies.
فحص Python
يمكن استخدام الأوامر التالية لمعرفة ما إذا كانت الحزم موجودة وإصداراتها:
python -m pip show Brotli
python -m pip show brotlicffiافحص أيضًا Dependency Tree وLockfiles؛ فقد تكون إحدى الحزم مثبتة بصورة غير مباشرة، حتى إذا لم يستورد التطبيق Brotli مباشرة في كوده.
فحص الأنظمة الأخرى
بالنسبة إلى Bun وEnvoy و.NET وغيرها، استخدم أدوات إدارة الحزم وInventory الخاصة بالبيئة، ثم راجع التنبيه الأمني الرسمي للمنتج.
لا تعتمد على فحص ملف واحد أو جهاز واحد؛ فقد تكون هناك نسخ مختلفة من المكتبة على عدة Servers أو داخل Images قديمة.
كيف تعالج الثغرة وتحمي الأنظمة؟
الخطوة الأولى: تحديث المكونات المتأثرة
ثبّت الإصدارات المصححة من Node.js أو Brotli أو الحزم والمنتجات الأخرى بحسب بيئتك.
الخطوة الثانية: إعادة بناء Containers
إذا كان التطبيق يعمل داخل Docker أو Kubernetes، فلا يكفي تحديث الحزم على جهاز التطوير.
يجب تحديث Base Image وDependencies، ثم إعادة بناء Image وإعادة نشرها.
الخطوة الثالثة: إعادة تشغيل الخدمات
قد تستمر العملية الحالية في استخدام النسخة القديمة من المكتبة حتى بعد تحديث الملفات على القرص.
أعد تشغيل الخدمات المتأثرة أو نفّذ عملية Deployment مناسبة للتأكد من أن النسخة المصححة أصبحت مستخدمة فعليًا.
الخطوة الرابعة: تقليل التعرض مؤقتًا
إذا تعذّر التحديث مباشرة:
قيّد معالجة Brotli للبيانات غير الموثوقة حيثما أمكن.
راجع إمكانية تعطيل مسارات فك الضغط غير الضرورية.
استخدم WAF أو Reverse Proxy لتطبيق ضوابط مناسبة عند دعمها.
قيّد الاتصالات والصلاحيات غير الضرورية.
لا تعتمد على WAF وحده، لأن البيانات قد تصل إلى Decoder عبر مسارات أخرى.
الخطوة الخامسة: التحقق من سلامة النظام
راجع Application Logs وProcess Activity والاتصالات الصادرة والملفات التي تغيرت بصورة غير مبررة.
إذا ظهرت مؤشرات اختراق، فتعامل مع الحادث وفق Incident Response Procedures، واحفظ الأدلة قبل إجراء تغييرات قد تؤثر في التحقيق.
هل يكفي تحديث Node.js لحل المشكلة؟
ليس بالضرورة لجميع البيئات.
إذا كانت المشكلة تصل إلى Brotli Decoder المضمّن في Node.js، فإن تحديث Node.js إلى إصدار مصحح هو الإجراء الأساسي.
لكن إذا كان النظام يستخدم نسخة منفصلة من Brotli داخل Python Package أو Proxy أو منتج آخر، فقد يحتاج ذلك المكوّن إلى تحديث مستقل.
الأمر نفسه ينطبق على مكتبات C المضمّنة داخل البرامج؛ فقد يستمر المنتج في استخدام نسخة قديمة حتى بعد تحديث المكتبة على مستوى نظام التشغيل.
لهذا السبب يجب فحص Software Bill of Materials (SBOM) وDependency Tree عندما تكون هذه الأدوات متاحة.
ما الدروس الأمنية التي تكشفها Broccoli2Shell؟
توضح هذه الثغرة عدة نقاط مهمة لفرق Development وSecurity Operations:
أولًا: Dependencies جزء من سطح الهجوم.
قد يحتوي تطبيق آمن من ناحية كود الأعمال على مكتبة خارجية متأثرة.
ثانيًا: لا تقتصر المخاطر على Inbound Traffic.
قد تصل البيانات الخبيثة إلى Decoder عندما يستقبل التطبيق Response من مصدر خارجي، وليس فقط عندما يستقبل Request من المستخدم.
ثالثًا: تحديث المصدر لا يحدّث جميع النسخ تلقائيًا.
قد تكون هناك نسخ مضمّنة داخل Containers أو منتجات مستقلة.
رابعًا: يجب التحقق من نجاح المعالجة.
التحديث لا يكتمل بمجرد تثبيت الحزمة؛ يجب التأكد من أن العمليات النشطة وProduction Deployments تستخدم النسخ المصححة.
الخلاصة
تُعد CVE-2026-111497 مثالًا على كيفية تحوّل خلل في مكتبة مشتركة إلى مشكلة أمنية واسعة النطاق.
سواء صادفت اسم Node2Shell أو Broccoli2Shell أو HTTP2Shell، فإن أول خطوة هي ربط التنبيه بالمعرّف CVE-2026-111497، ثم تحديد المكونات المتأثرة وتحديثها والتحقق من سلامة الأنظمة.
Patch the vulnerable component. Rebuild affected images. Restart services. Verify every deployment.
الأسئلة الشائعة حول Node2Shell وBroccoli2Shell وHTTP2Shell
هل Node2Shell وHTTP2Shell وBroccoli2Shell ثغرات مختلفة؟
لا. هذه أسماء متعددة مرتبطة بثغرة Brotli نفسها، التي تحمل المعرّف CVE-2026-111497.
هل الثغرة موجودة في بروتوكول HTTP/2؟
لا تشير المعلومات التقنية إلى أن HTTP/2 Protocol نفسه هو أصل الخلل؛ المشكلة في Brotli Decoder، وقد تصل البيانات المصممة خصيصًا إليه عبر مسارات مختلفة.
هل يمكن أن تؤدي الثغرة إلى Remote Code Execution؟
نعم، أظهرت الأبحاث إمكانية تنفيذ أوامر عن بُعد في بيئات محددة. لكن النتيجة الفعلية تعتمد على إمكانية الوصول إلى Decoder المتأثر وتفاصيل البيئة.
هل Python Applications معرّضة للخطر؟
قد تتأثر بيئات Python التي تستخدم إصدارات متأثرة من Brotli أو brotlicffi، بما في ذلك الحالات التي تأتي فيها الحزم كـ Dependencies غير مباشرة.
هل يكفي تحديث npm Packages؟
ليس دائمًا. يجب تحديث Node.js Runtime نفسه إذا كان هو المكوّن المتأثر، وكذلك فحص المكتبات المستقلة والمنتجات الأخرى التي تستخدم Brotli.
ما الإجراء الأهم لمسؤولي الأنظمة؟
حصر جميع البيئات التي تحتوي على Brotli Decoder متأثر، وتطبيق التحديث المناسب، وإعادة بناء Containers، وإعادة تشغيل الخدمات، ثم مراجعة مؤشرات الاختراق.

ليست هناك تعليقات:
إرسال تعليق