احجز استشارة
تنبيه أمني · ثغرة Node.js حرجة · أكتوبر ٢٠٢٦

node2shell: تنفيذ أوامر عن بُعد في Node.js عبر Brotli

ثغرة حرجة في مُفكِّك ضغط Brotli المضمّن داخل Node.js (CVE-2026-111497) قد تسمح بتنفيذ أوامر عن بُعد عند معالجة بيانات Brotli غير موثوقة. صدرت التصحيحات في ٢١ أكتوبر ٢٠٢٦، ويتوفّر إثبات مفهوم — فالترقيع الآن يسبق التسليح.

  • CVSS 9.2 — حرجة
  • تنفيذ عن بُعد عبر Brotli
  • إثبات مفهوم متاح
  • رقِّع قبل أن يُسلَّح
٠١ — نظرة عامة

ما هي node2shell؟

«node2shell» (ويُسمّى أيضًا HTTP2Shell) هو الاسم الذي أُطلق على ثغرة حرجة في مُفكِّك ضغط Brotli المضمّن داخل Node.js (CVE-2026-111497). بياناتٌ مُعَدّة بعناية بصيغة Brotli قد تُحدِث كتابةً خارج حدود الذاكرة — ما قد يُعطّل العملية أو يُسرّب الذاكرة أو يقود إلى تنفيذ أوامر.

الخلل في المكتبة التي يشحنها Node نفسه، فيؤثّر على أي تطبيق يفكّ ضغط بيانات Brotli غير موثوقة. وتتأثّر كذلك منتجاتٌ أخرى تضمّ المكتبة نفسها مثل Bun.

CVE-2026-111497

كتابة خارج حدود الذاكرة في مُفكِّك Brotli

بياناتٌ مُعَدّة بصيغة Brotli تُحدِث كتابةً خارج الحدود في المكتبة التي يضمّها Node، ما قد يقود إلى تعطّلٍ أو تسريب ذاكرةٍ أو تنفيذ أوامر.

٠٢ — الأنظمة المتأثرة

هل أنت متأثر؟

تكون مكشوفًا إذا كان تطبيقك يفكّ ضغط بيانات Brotli قادمة من مصدرٍ لا تثق به: استجابات fetch() المدمجة إلى خوادم خارجية، أو أجسام الطلبات في Express 5 و body-parser 2.x التي تقبل ترميز Content-Encoding: br، أو استخدام node:zlib مباشرةً.

قد لا يكفي رقم الإصدار. إن ثُبِّت Node عبر مدير حزم نظام التشغيل فقد يرتبط بمكتبة Brotli الخاصة بالنظام، فلا يعكس node --version وحده حالتك — تحقّق أيضًا من مكتبة Brotli في نظامك.

Node.js 26

مُصحّحة في 26.12.1

Node.js 24

مُصحّحة في 24.22.1

Node.js 22

مُصحّحة في 22.23.4

Node.js 25 / 23 / 20

منتهية الدعم — لا تصحيح رسمي

Bun

مُصحّحة في 1.4.4

صدرت التصحيحات في ٢١ أكتوبر ٢٠٢٦. تتأثّر أيضًا منتجاتٌ تضمّ مُفكِّك Brotli نفسه (مثل Bun، وبعض حزم Brotli في بايثون، و Envoy). وحتى ٢٦ أكتوبر لم تُدرَج الثغرة في قائمة CISA KEV ولم يُؤكَّد استغلالٌ واسع في البرية.

٠٣ — الخطورة

لماذا تهمّك؟

٠١

حرجة (CVSS 9.2)

تقييم Google للثغرة 9.2، ويصنّفها فريق Node «عالية».

٠٢

بُنى Node القياسية

الخلل في مكتبة Brotli المضمّنة داخل Node نفسه.

٠٣

عبر بياناتٍ غير موثوقة

تتحقق عند فكّ ضغط Brotli من مصدرٍ لا تثق به — مثل fetch() أو أجسام طلبات Express.

٠٤

إثبات مفهوم للتنفيذ

عُرِض تنفيذ أوامرٍ في مختبرات الأبحاث (غير مستقر)، ولا استغلال واسع مؤكد بعد — رقِّع قبل أن يتغيّر ذلك.

٠٤ — المعالجة

كيف تتحقق وتُصلح؟

الحل الحاسم هو التحديث فورًا. وحتى تُحدّث، قلّل تعرّضك برفض بيانات Brotli غير الموثوقة.

١. تحقّق من إصدارك

اعرف إصدار Node على كل خدمة، وانتبه لملاحظة التثبيت عبر النظام:

bash
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)، ثم أعد تشغيل التطبيق.

bash
# 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
# nginx: reject Brotli-encoded request bodies
if ($http_content_encoding ~* "\bbr\b") { return 415; }

٤. أنهِ الإصدارات منتهية الدعم

Node 20 وأقدم (وكذلك 23 و 25) لن تتلقّى تصحيحًا؛ انتقل إلى فرعٍ مدعوم (LTS).

٥. دفاع متعدد الطبقات

شغّل بأقل الصلاحيات، ولا تفكّ ضغط بياناتٍ لا تثق بها، وفعّل جدار حمايةٍ ومراقبةً للسلوك الشاذ.

٠٥ — ريلاينت

كيف تساعدك ريلاينت؟

نحدّد بسرعة ما إذا كانت خدمات Node لديك مكشوفةً لـ node2shell — أي المسارات تفكّ ضغط Brotli غير موثوق — ونعطيك تقريرًا واضحًا بما يجب ترقيعه ودرجة أولويته، ثم نعيد الفحص للتأكد.

  • فحص تعرّضٍ سريع لـ CVE-2026-111497 عبر خدماتك وتبعياتها.
  • تحديد المسارات التي تفكّ ضغط Brotli غير موثوق (fetch و Express و zlib).
  • اختبار اختراق لتطبيقات الويب وواجهات API.
  • تقرير قابل للتنفيذ مع خطوات الإصلاح وإعادة فحصٍ للتحقق.

هذه الصفحة محتوى توعوي أمني؛ واختبار الأنظمة يتطلّب تفويضًا من مالكها.المصادر: التنبيه الرسمي من Node.js، وتحليلات Akamai و Sysdig و Aikido.حُدِّثت: ٢٧ أكتوبر ٢٠٢٦ · reliant.sa