كتابة خارج حدود الذاكرة في مُفكِّك Brotli
بياناتٌ مُعَدّة بصيغة Brotli تُحدِث كتابةً خارج الحدود في المكتبة التي يضمّها Node، ما قد يقود إلى تعطّلٍ أو تسريب ذاكرةٍ أو تنفيذ أوامر.
ثغرة حرجة في مُفكِّك ضغط Brotli المضمّن داخل Node.js (CVE-2026-111497) قد تسمح بتنفيذ أوامر عن بُعد عند معالجة بيانات Brotli غير موثوقة. صدرت التصحيحات في ٢١ أكتوبر ٢٠٢٦، ويتوفّر إثبات مفهوم — فالترقيع الآن يسبق التسليح.
«node2shell» (ويُسمّى أيضًا HTTP2Shell) هو الاسم الذي أُطلق على ثغرة حرجة في مُفكِّك ضغط Brotli المضمّن داخل Node.js (CVE-2026-111497). بياناتٌ مُعَدّة بعناية بصيغة Brotli قد تُحدِث كتابةً خارج حدود الذاكرة — ما قد يُعطّل العملية أو يُسرّب الذاكرة أو يقود إلى تنفيذ أوامر.
الخلل في المكتبة التي يشحنها Node نفسه، فيؤثّر على أي تطبيق يفكّ ضغط بيانات Brotli غير موثوقة. وتتأثّر كذلك منتجاتٌ أخرى تضمّ المكتبة نفسها مثل Bun.
بياناتٌ مُعَدّة بصيغة Brotli تُحدِث كتابةً خارج الحدود في المكتبة التي يضمّها Node، ما قد يقود إلى تعطّلٍ أو تسريب ذاكرةٍ أو تنفيذ أوامر.
تكون مكشوفًا إذا كان تطبيقك يفكّ ضغط بيانات Brotli قادمة من مصدرٍ لا تثق به: استجابات fetch() المدمجة إلى خوادم خارجية، أو أجسام الطلبات في Express 5 و body-parser 2.x التي تقبل ترميز Content-Encoding: br، أو استخدام node:zlib مباشرةً.
مُصحّحة في 26.12.1
مُصحّحة في 24.22.1
مُصحّحة في 22.23.4
منتهية الدعم — لا تصحيح رسمي
مُصحّحة في 1.4.4
تقييم Google للثغرة 9.2، ويصنّفها فريق Node «عالية».
الخلل في مكتبة Brotli المضمّنة داخل Node نفسه.
تتحقق عند فكّ ضغط Brotli من مصدرٍ لا تثق به — مثل fetch() أو أجسام طلبات Express.
عُرِض تنفيذ أوامرٍ في مختبرات الأبحاث (غير مستقر)، ولا استغلال واسع مؤكد بعد — رقِّع قبل أن يتغيّر ذلك.
الحل الحاسم هو التحديث فورًا. وحتى تُحدّث، قلّل تعرّضك برفض بيانات Brotli غير الموثوقة.
اعرف إصدار Node على كل خدمة، وانتبه لملاحظة التثبيت عبر النظام:
node --version # Node from an OS package may link the system Brotli — # also check your OS brotli / libbrotli package version
رقِّ إلى 22.23.4 أو 24.22.1 أو 26.12.1 (و Bun إلى 1.4.4)، ثم أعد تشغيل التطبيق.
# with nvm nvm install 24.22.1 && nvm use 24.22.1 # then restart your app (pm2 / systemd / container) # Bun users: upgrade to 1.4.4
ارفض الطلبات المُرمَّزة بـ Brotli عند الوكيل العكسي، وتجنّب فكّ ضغط بيانات Brotli من مصادر غير موثوقة:
# nginx: reject Brotli-encoded request bodies
if ($http_content_encoding ~* "\bbr\b") { return 415; }Node 20 وأقدم (وكذلك 23 و 25) لن تتلقّى تصحيحًا؛ انتقل إلى فرعٍ مدعوم (LTS).
شغّل بأقل الصلاحيات، ولا تفكّ ضغط بياناتٍ لا تثق بها، وفعّل جدار حمايةٍ ومراقبةً للسلوك الشاذ.
نحدّد بسرعة ما إذا كانت خدمات Node لديك مكشوفةً لـ node2shell — أي المسارات تفكّ ضغط Brotli غير موثوق — ونعطيك تقريرًا واضحًا بما يجب ترقيعه ودرجة أولويته، ثم نعيد الفحص للتأكد.