في هذا المقال
إذا كان تطبيق شركتك أو موقعها أو متجرها الإلكتروني أو واجهتها البرمجية (API) مبنيا على Node.js، ومن ذلك مواقع Next.js والأنظمة الخلفية المبنية بـ Express أو NestJS، فاطلب من مبرمجك اليوم تحديث Node.js إلى الإصدار 22.23.4 أو 24.22.1 أو 26.12.1، ثم إعادة بناء الخادم وتشغيله. أصدر مشروع Node.js هذه الإصدارات في 21 أكتوبر 2026 لسد ثغرة تُعرف باسم Node2Shell (CVE-2026-111497)، درجتها 9.2 من 10، تتيح لمهاجم لا يملك أي كلمة مرور تشغيل أوامره على خادمك بإرسال بيانات مضغوطة مصنوعة بعناية. وأصدرت الهيئة الوطنية للأمن السيبراني تنبيها بمستوى خطورة «عالٍ جدا»، وفي 27 أكتوبر أكدت وكالة الأمن السيبراني الأمريكية CISA أن الثغرة تُستغل في هجمات حقيقية.
ما الذي حدث بالضبط؟
الخلل في Brotli، وهي صيغة ضغط تستخدمها خوادم الويب والمتصفحات لتصغير البيانات التي تتبادلها، ويحمل Node.js نسخته الخاصة من مفكك Brotli الذي تطوره جوجل. بحسب النشرة الأمنية لمشروع Node.js، تجعل البيانات المضغوطة المشوهة المفكك يكتب خارج حدود ذاكرة مؤقتة داخلية، وهذا قد يوقف التطبيق، أو يكشف محتوى ذاكرته، أو يتيح للمهاجم تشغيل أوامره. وتنسب النشرة الإبلاغ عن الثغرة إلى فريق Codex Security في OpenAI، وقد سد الإصدار نفسه 10 ثغرات في المجموع، 4 منها عالية الخطورة.
ثم تسارعت الأحداث. في 22 أكتوبر، بعد يوم واحد من الإصلاح، شغّل الفريق الأحمر في Imperva أوامر على صورة Node.js الرسمية 24.22.0 عبر مسارين يوميين: دالة fetch() المدمجة، والطلبات التي يعالجها Express 5. وفي 26 أكتوبر رصدت شركة ELLIO حركة استغلال حقيقية تحمل شيفرة هجوم منشورة للعموم. وفي 27 أكتوبر أضافت CISA الثغرة إلى قائمتها للثغرات التي تُستغل فعلا.
والخلل نفسه قديم. بحسب سجل الثغرة الرسمي، يمس إصدارات Brotli من 1.0.3 إلى 1.2.0، وتقول OpenAI إن أصل المشكلة أُصلح في شيفرة Brotli المصدرية في فبراير 2026 دون أن يعرف أحد أنه ثغرة أمنية ودون إصدار جديد، حتى صدر Brotli 1.2.1 في 21 أكتوبر. وإن بدت القصة مألوفة فلأنها كذلك: كتبنا الأسبوع الماضي عن ثغرة PHP2Shell التي فتحت خوادم PHP وووردبريس، وNode2Shell خطر من النوع نفسه على التطبيقات المبنية بلغة JavaScript.
هل تطبيقي متأثر؟
يشغّل Node.js الجانب الخلفي لنسبة كبيرة من المواقع الحديثة، والأنظمة الخلفية لتطبيقات الجوال، ولوحات التحكم، والواجهات البرمجية. إذا بُني نظامك في السنوات الأخيرة على يد وكالة أو مبرمج مستقل، فاحتمال أن يعمل على Node.js دون علمك كبير. الفروع المتأثرة هي 22.x و24.x و26.x قبل الإصدارات المصححة، إضافة إلى الفروع المنتهي دعمها 20.x و23.x و25.x، التي يقول مشروع Node.js إنها متأثرة دائما ولن يصلها إصلاح.
وتشغيل Node.js وحده لا يعني أنك مكشوف، فلا بد أن يمرر شيء ما بيانات المهاجم إلى المفكك. ويذكر الباحثون ثلاثة مسارات شائعة:
- طلبات مضغوطة تصل إلى خادمك. تفك أدوات قراءة الطلبات في Express 5 وbody-parser 2 وKoa ضغط الطلبات المضغوطة بصيغة Brotli تلقائيا، قبل أن تعمل شيفرتك أصلا.
- محتوى يجلبه خادمك من الخارج. إذا كان تطبيقك يفتح روابط خارجية، مثل معاينة الروابط، أو الإشعارات الآلية بين الأنظمة (webhooks)، أو أدوات الزحف، أو وكلاء الذكاء الاصطناعي الذين يقرؤون صفحات الويب، فيمكن لموقع معادٍ أن يرد ببيانات مضغوطة مسمومة. ودالة fetch() المدمجة ومكتبة axios وطلبات الخادم في أطر مثل Next.js تفك ضغطها تلقائيا.
- ملفات يرفعها المستخدمون. أي شيفرة تفك ضغط بيانات Brotli أرسلها عميل أو زائر.
ويتجاوز الخطر Node.js نفسه. يذكر تنبيه الهيئة الوطنية للأمن السيبراني لغة Python وBun وEnvoy أيضا، وأصدرت مايكروسوفت في 25 أكتوبر إصلاحات لـ .NET 8 و9 و10 و11، وVisual Studio 2019 و2022 و2026، وPowerShell من 7.4 إلى 7.6، وصنفت الثغرة حرجة في .NET مع تقييم «الاستغلال مرجح». وتوضح مايكروسوفت أن فك ضغط Brotli غير مفعّل افتراضيا في .NET، فالمكشوف هو التطبيق الذي فعّله فقط.
وإذا كان موقعك مستضافا على Vercel، فالشركة تقول في نشرتها إنها نشرت قواعد جدار حماية تحجب مسار الهجوم الوارد لكل المشاريع في اليوم الذي نشر فيه Node.js الإصلاح، وإن كل عملية نشر جديدة منذ 28 أكتوبر تستخدم Node.js مصححا. المشاريع القائمة تحتاج إلى إعادة نشر، والمشاريع التي ما زالت على Node.js 20 يجب نقلها إلى 22 أو 24.
ماذا تفعل اليوم؟ خمس خطوات
- اسأل سؤالا واحدا مكتوبا. ما إصدار Node.js الذي يعمل على خوادمنا وداخل صور Docker الخاصة بنا؟ اطلب من مبرمجك التحقق من رقم إصدار Node.js بالأمر node -v. ولا تعتمد على رقم إصدار Brotli، فقد وجدت ELLIO أنه يظهر 1.2.0 في النسخ المصححة وغير المصححة على حد سواء.
- حدّث إلى إصدار مصحح. 22.23.4 أو 24.22.1 أو 26.12.1. وإن كنت على 20.x أو 23.x أو 25.x، فانتقل إلى فرع مدعوم مثل 22 أو 24، واختبر قبل الإطلاق.
- أعد البناء والتشغيل. العملية التي تعمل الآن تبقى على الشيفرة القديمة. أعد بناء صور الحاويات على صورة أساس مصححة، لأن ملف Dockerfile المثبت على 24.22.0 سيظل ينشر النسخة المصابة حتى يعدّل أحد ذلك السطر. وافحص خوادم الاختبار وخطوط البناء والدوال السحابية أيضا.
- حدّث النسخ الأخرى. حزمتي Brotli وbrotlicffi في Python (الإصداران 1.2.1 و1.2.1.0)، وBun، وEnvoy، ومكتبة Brotli في توزيعة لينكس لديك، و.NET عبر تحديث مايكروسوفت الصادر في 25 أكتوبر.
- راجع السجلات وملفات الانهيار. ابحث عن طلبات مضغوطة بصيغة Brotli أكبر من المعتاد، وعن انهيارات متكررة للعمليات. وتحذر ELLIO من أن أغلب محاولات الهجوم الفاشلة تُسقط العملية، وأن ملف الانهيار قد يحفظ ملفات تعريف جلسات الزوار ومفاتيحهم، فقيّد من يقرأ ملفات الانهيار (core dumps) وقصّر مدة الاحتفاظ بها.
إذا لم تستطع التحديث اليوم
كإجراء مؤقت، احجب الطلبات الواردة التي تحمل الترويسة Content-Encoding: br في الخادم الأمامي أو جدار الحماية، إذا كان تطبيقك لا يحتاجها. أضافت Vercel وImperva قواعد جدار حماية لهذه الثغرة، لكن Vercel نفسها تؤكد أن جدار الحماية لا يغطي الردود التي يجلبها خادمك من مواقع أخرى، وأن تحديث Node.js وحده يغلق هذا المسار. اعتبر أي طبقة حماية وقتا إضافيا، لا بديلا عن التحديث.
رأي أوريجامي
ثغرتان حرجتان في أساسات الويب خلال شهر واحد، PHP2Shell ثم Node2Shell، ترويان قصة واضحة: قد تكون الشيفرة التي كتبها فريقك سليمة بينما البيئة التي تعمل عليها مفتوحة. بقي إصلاح Node2Shell في شيفرة Brotli المصدرية نحو ثمانية أشهر قبل أن يدرك أحد أنه مشكلة أمنية، وما إن نُشرت التفاصيل حتى احتاج الباحثون يوما واحدا لتشغيل أوامر على نسخة رسمية. وما نراه في شركات كثيرة تطبيق سُلّم قبل سنوات ولا أحد مسؤول عن تحديثاته، ولا قائمة بالأماكن التي يعمل فيها Node.js فعلا. إذا كان هذا وضعك، فابدأ بهذه القائمة اليوم. في أوريجامي نبني تطبيقات الويب والأنظمة، وكثير منها يعمل على Node.js وNext.js، ونتابع تحديثات بيئتها من اليوم الأول. وإذا أردت فحص تطبيقك أو ترقية Node.js دون توقف، تواصل معنا.
المصادر
- الهيئة الوطنية للأمن السيبراني: تنبيه Brotli رقم 2026-7959
- Node.js: النشرة الأمنية لإصدارات 21 أكتوبر 2026
- Google Brotli على GitHub: ملاحظات الإصدار 1.2.1
- CVE.org: سجل الثغرة CVE-2026-111497 والإصدارات المتأثرة ودرجة 9.2
- CISA: إضافة ثغرتين إلى قائمة الثغرات المستغلة، 27 أكتوبر 2026
- مركز مايكروسوفت للاستجابة الأمنية: CVE-2026-111497
- Vercel: النشرة الأمنية الخاصة بـ Node.js
- الفريق الأحمر في Imperva: تقرير Node2Shell
- ELLIO: رصد استغلال Node2Shell في هجمات حقيقية
- SecurityWeek: تحديثات مايكروسوفت وNode.js وحزم Python
أسئلة شائعة
هل موقع شركتي متأثر بثغرة Node2Shell إذا كان مبنيا على Next.js؟
قد يكون. يعمل Next.js على Node.js، وطلباته من جهة الخادم تمر عبر المفكك المصاب. على Vercel تستخدم عمليات النشر الجديدة نسخة مصححة منذ 28 أكتوبر فتكفي إعادة النشر، أما إذا كنت تستضيفه بنفسك فحدّث Node.js إلى 22.23.4 أو 24.22.1 أو 26.12.1.
ما إصدارات Node.js التي تسد ثغرة Node2Shell؟
الإصدارات 22.23.4 و24.22.1 و26.12.1 الصادرة في 21 أكتوبر 2026. أما الفروع 20.x و23.x و25.x فقد انتهى دعمها ولن يصلها إصلاح، فانتقل إلى 22 أو 24.
كيف أعرف إصدار Node.js الذي يعمل عليه تطبيقي؟
اطلب من مبرمجك تشغيل الأمر node -v على الخادم وداخل كل صورة Docker، وأن يرسل لك النتيجة كتابيا. ولا تعتمد على رقم إصدار Brotli، فهو يظهر 1.2.0 في النسخ المصححة وغير المصححة على حد سواء.
هل يكفي جدار حماية تطبيقات الويب (WAF) بدل التحديث؟
لا. قد يحجب جدار الحماية الطلبات المضغوطة الخبيثة الواردة، لكنه لا يغطي الردود التي يجلبها خادمك من مواقع أخرى. أضافت Vercel وImperva قواعد حماية لهذه الثغرة، وكلتاهما ما زالت تطلب من العملاء تحديث Node.js.
تابع أوريجامي في نتائج قوقل
ثبت أوريجامي كمصدر مفضل، فتظهر لك مقالاتنا أولا في نتائج قوقل وفي الأخبار الرائجة.
الإضافة إلى المصادر المفضلة في Google






