كشفت تحديثات أمنية حديثة عن ثغرة في Node.js، أحد أشهر بيئات تشغيل JavaScript، أعادت تسليط الضوء على تقنية تُستخدم على نطاق واسع في البنية التحتية للويب، وهي Brotli، خوارزمية ضغط البيانات التي تساعد على تسريع تحميل المواقع والتطبيقات.
تحمل الثغرة المعرّف CVE-2026-111497، وتؤثر في وحدة فك ضغط Brotli المضمّنة في Node.js. ويمكن لبيانات مضغوطة جرى إعدادها بطريقة خاصة أن تتسبب في فساد الذاكرة داخل عملية Node.js متأثرة، ما قد يؤدي إلى توقف التطبيق أو كشف معلومات موجودة في الذاكرة أو، في ظروف معينة، تنفيذ تعليمات برمجية عن بُعد.
صدرت تحديثات المعالجة ضمن إصدارات الأمان الخاصة بـ Node.js بتاريخ 21 أكتوبر 2026. وتشمل الإصدارات المتأثرة الفروع 22.x و24.x و26.x قبل الوصول إلى الإصدارات المصححة المحددة في التنبيه الأمني.
بالنسبة إلى الشركات التي تعتمد على المواقع الإلكترونية وواجهات البرمجة والتطبيقات التي تعمل على الخوادم، لا يكفي السؤال عمّا إذا كانت تستخدم Brotli. السؤال الأهم هو: هل يمكن للتطبيق معالجة بيانات Brotli خبيثة باستخدام وحدة فك ضغط تحتوي على هذه الثغرة؟
تكتسب هذه المسألة أهمية خاصة بالنسبة إلى التطبيقات المبنية باستخدام Next.js وغيرها من الأطر التي تعمل فوق Node.js.
ما هي Brotli، ولماذا تُستخدم في المواقع الإلكترونية؟
Brotli هي خوارزمية لضغط البيانات طوّرتها Google، وتهدف إلى تقليل حجم الملفات المنقولة عبر الإنترنت حتى تصل إلى المستخدم بسرعة أكبر.
تعتمد المواقع الحديثة على ضغط ملفات HTML وJavaScript وCSS والخطوط وغيرها من الموارد. ويساعد تقليل حجم هذه الملفات على توفير استهلاك البيانات وتحسين سرعة تحميل الصفحات، خصوصاً لدى المستخدمين الذين يعتمدون على اتصالات إنترنت بطيئة.
أصبحت Brotli مدعومة على نطاق واسع في المتصفحات الحديثة وخوادم الويب وشبكات توزيع المحتوى (CDN) والعديد من منصات الاستضافة.
لكن عملية الضغط تتضمن مرحلتين مختلفتين: ضغط البيانات، ثم فك ضغطها. وعندما يعالج البرنامج بيانات مضغوطة، يجب عليه تفسير بنيتها بطريقة صحيحة، حتى عندما تكون البيانات غير سليمة أو مصممة عمداً لاستغلال أخطاء البرنامج.
وهنا تكمن أهمية الثغرة الأمنية المكتشفة في Node.js.
ما حقيقة الثغرة CVE-2026-111497؟
تؤثر الثغرة CVE-2026-111497 في وحدة فك ضغط Brotli المضمّنة في Node.js. ووفقاً للتنبيه الأمني الرسمي، يمكن لبعض البيانات المضغوطة المصممة بصورة غير سليمة أن تتسبب في كتابة بيانات خارج حدود مساحة الذاكرة المخصصة للعملية.
بعبارة أبسط، قد يحاول البرنامج الكتابة في مساحة ذاكرة لا يُفترض أن يصل إليها أثناء معالجة البيانات.
وبحسب ظروف الاستغلال، يمكن أن يؤدي هذا النوع من الأخطاء إلى عواقب أمنية مختلفة، منها:
تعطيل الخدمة: قد تتوقف العملية المتأثرة عن العمل، ما يؤدي إلى انقطاع التطبيق مؤقتاً.
كشف البيانات: قد يتمكن المهاجم، في ظروف معينة، من الوصول إلى معلومات موجودة في ذاكرة العملية.
تنفيذ تعليمات برمجية عن بُعد: قد تسمح ظروف الاستغلال المناسبة بتنفيذ تعليمات برمجية داخل العملية المتأثرة.
صُنّفت الثغرة على أنها عالية الخطورة في التنبيه الأمني الخاص بـ Node.js.
لكن من الضروري فهم نقطة أساسية: يتطلب استغلال هذه الثغرة وصول بيانات Brotli يتحكم فيها المهاجم إلى وحدة فك الضغط المتأثرة. لذلك، لا يصبح كل موقع يستخدم Brotli عرضة للهجوم تلقائياً لمجرد أنه يقدّم ملفاته مضغوطة.
هذا الفرق أساسي عند تقييم مستوى الخطر الحقيقي.
لماذا يمكن أن تتأثر تطبيقات Next.js؟
Next.js إطار عمل مبني على React، يُستخدم لتطوير المواقع والتطبيقات الإلكترونية، بما في ذلك التطبيقات التي تُنشئ صفحاتها على الخادم.
في عمليات النشر التقليدية التي تعتمد على Node.js، يعمل Next.js فوق بيئة التشغيل هذه، ويستفيد من وظائفها الأساسية، مثل الاتصالات الشبكية والتعامل مع الملفات وعمليات الضغط وفك الضغط.
لذلك، قد تؤثر ثغرة في بيئة التشغيل نفسها في التطبيق، حتى لو لم يحتوِ الكود الذي كتبه المطوّر على خطأ أمني واضح.
لنفترض السيناريو التالي:
يستقبل التطبيق بيانات من مصدر خارجي عبر الإنترنت.
يحاول التطبيق أو أحد المكوّنات التي يعتمد عليها فك ضغط هذه البيانات باستخدام وحدة Brotli المتأثرة.
يرسل المهاجم بيانات مضغوطة ومصممة خصيصاً لاستغلال الثغرة.
قد تتعرض ذاكرة العملية للفساد، ما قد يؤدي إلى عواقب أمنية أكثر خطورة.
يعتمد مدى التأثر الفعلي على طريقة معالجة البيانات داخل التطبيق، والمكتبات المستخدمة، وبيئة التشغيل التي يعمل فيها.
هل جميع مواقع Next.js معرضة للخطر؟
لا.
فالموقع الذي يستخدم Next.js لتقديم صفحات وملفات مضغوطة بصورة طبيعية ليس بالضرورة معرضاً لمسار الهجوم نفسه. المشكلة تتعلق بفك ضغط بيانات Brotli خبيثة، وليس بمجرد إرسال الملفات المضغوطة إلى المتصفح.
مع ذلك، لا ينبغي افتراض أن التطبيق آمن من دون التحقق. فقد تسمح بعض المكتبات الخارجية أو الوظائف المخصصة أو واجهات معالجة البيانات أو التكاملات مع خدمات خارجية بوصول بيانات خبيثة إلى وحدة فك الضغط.
التصرف الصحيح هو التحقق من إصدار Node.js المستخدم في بيئة الإنتاج، ومراجعة التنبيه الأمني الرسمي، وتطبيق التحديثات اللازمة.
هل هذه هي ثغرة PHP2Shell نفسها؟
لا. تتعلق الحادثتان بمكوّنات برمجية مختلفة، لكنهما تسلطان الضوء على مشكلة مشتركة: العواقب الخطيرة التي قد تنتج عن معالجة البيانات غير الموثوقة بطريقة غير آمنة.
خلال أكتوبر 2026، شهدت PHP أيضاً الإعلان عن ثغرتين أمنيتين مهمتين تحملان المعرّفين CVE-2026-109618 وCVE-2026-109619، وجرى تناولهما معاً تحت اسم PHP2Shell.
تؤثر تلك الثغرات في بيئة تشغيل PHP وتتعلق بمشكلات مختلفة في إدارة الذاكرة. وقد تسمح، وفقاً لظروف الاستغلال، بتنفيذ تعليمات برمجية عن بُعد أو كشف معلومات موجودة في ذاكرة العملية.
أما ثغرة Brotli موضوع هذا المقال، فتتعلق بوحدة فك الضغط في Node.js.
وتوضح المقارنة حقيقة مهمة: لا تعتمد سلامة الموقع الإلكتروني على الكود الذي يكتبه فريق التطوير فقط، بل تعتمد أيضاً على بيئات التشغيل والمكتبات والبنية التحتية التي يقوم عليها.
فقد يكون التطبيق مكتوباً بطريقة جيدة، ومع ذلك يظل معرضاً للخطر بسبب ثغرة في أحد المكوّنات التي يعتمد عليها.
ما إصدارات Node.js المتأثرة؟
بحسب تحديث الأمان المنشور في 21 أكتوبر 2026، تشمل الفروع المتأثرة الإصدارات التالية، مع الحد الأدنى من الإصدارات التي تتضمن المعالجة.
فرع Node.js الإصدارات المتأثرة الحد الأدنى للإصدار المصحح Node.js 22.x الإصدارات الأقدم من 22.23.4 22.23.4 Node.js 24.x الإصدارات الأقدم من 24.22.1 24.22.1 Node.js 26.x الإصدارات الأقدم من 26.12.1 26.12.1
تمثل هذه الأرقام الحد الأدنى للإصدارات المصححة وفقاً للتنبيه المشار إليه. ويُفضّل تثبيت أحدث إصدار أمني متاح ضمن الفرع المدعوم، بدلاً من اعتبار هذه الأرقام هدفاً نهائياً للتحديث.
أما الفروع القديمة التي لم تعد مدعومة، فتحتاج إلى اهتمام إضافي، لأنها قد لا تتلقى التحديثات الأمنية نفسها. وينبغي للشركات التي لا تزال تعتمد عليها التخطيط للانتقال إلى إصدار مدعوم.
ومن المهم أيضاً التذكير بأن معالجة هذه الثغرة لا تعني بالضرورة معالجة جميع الثغرات الأخرى المحتملة في Node.js أو Next.js.
كيف تتحقق مما إذا كان تطبيقك متأثراً؟
لا تحتاج إلى البدء بتدقيق أمني شامل. يمكنك أولاً تحديد بيئة التشغيل المستخدمة فعلياً في الإنتاج.
1. تحقّق من إصدار Node.js
افتح الطرفية (Terminal) داخل مشروعك ونفّذ الأمر التالي:
node --version
قارن النتيجة بالإصدارات المصححة الواردة في الجدول السابق.
تذكّر أن إصدار Node.js المثبّت على جهاز المطوّر قد يختلف عن الإصدار المستخدم على خادم الإنتاج.
2. افحص بيئة الإنتاج
حدّد إصدار بيئة التشغيل الذي يستخدمه التطبيق المنشور فعلياً.
قد تكون بيئتك واحدة من الحالات التالية:
عملية Node.js تعمل مباشرة على خادم VPS.
إصدار Node.js داخل حاوية Docker.
بيئة استضافة مُدارة.
منصة نشر تختار إصدار بيئة التشغيل نيابة عنك.
إذا كنت تستخدم Docker، فتحقّق من إصدار Node.js داخل صورة الحاوية المستخدمة في الإنتاج، وليس فقط من الإصدار المثبّت على الخادم المضيف.
أما في منصات الاستضافة المُدارة، فتحقّق مما إذا كانت المنصة قد حدّثت بيئة التشغيل، وما إذا كان مشروعك يفرض استخدام إصدار محدد.
3. راجع المكتبات ومسارات فك الضغط
تحقّق مما إذا كان الكود أو إحدى المكتبات التي يعتمد عليها التطبيق تستخدم وظائف فك ضغط Brotli بشكل مباشر، بما في ذلك الواجهات المتاحة عبر node:zlib في Node.js.
راجع أيضاً المسارات البرمجية التي تعالج الملفات المرفوعة من المستخدمين أو المحتوى الخارجي أو البيانات المضغوطة أو المعلومات المسترجعة من خدمات أخرى.
يساعد هذا الفحص على تحديد ما إذا كانت بيانات يتحكم فيها المهاجم قادرة على الوصول إلى وحدة فك الضغط المتأثرة. لكنه يكمّل التحديث الأمني ولا يحلّ محله.
4. حدّث التطبيق وأعد نشره
ثبّت إصدار Node.js المصحح والمناسب لبيئتك، ثم أعد بناء التطبيق أو نشره عند الحاجة.
أعد تشغيل العمليات أو الحاويات المتأثرة حتى تستخدم الإصدار الجديد فعلياً. فتثبيت إصدار جديد على الخادم لا يؤدي تلقائياً إلى تحديث عملية تعمل بالفعل أو استبدال صورة حاوية قديمة.
بعد ذلك، تحقّق من إصدار بيئة التشغيل في الإنتاج، وتأكد من أن التطبيق يعمل بصورة طبيعية.
ما الإجراءات التي ينبغي لمطوّري Next.js اتخاذها؟
ينبغي التعامل مع أمان Next.js وبيئة التشغيل التي يعتمد عليها باعتبارهما جانبين منفصلين يحتاج كل منهما إلى المراجعة.
أولاً: تحديث Node.js. إذا كان التطبيق يستخدم إصداراً متأثراً، فإن الترقية إلى إصدار مصحح هي الإجراء الأساسي لمعالجة هذه الثغرة.
ثانياً: مراجعة التنبيهات الأمنية الخاصة بـ Next.js. تحقّق مما إذا كان إصدار إطار العمل المستخدم يتضمن ثغرات مستقلة أو يحتاج إلى تحديث إضافي. طبّق التحديثات التي توصي بها التنبيهات ذات الصلة.
ثالثاً: مراجعة إعدادات النشر. قد يعمل المشروع بإصدار حديث من Node.js أثناء التطوير، بينما يستخدم إصداراً أقدم في حاوية الإنتاج أو على منصة الاستضافة.
رابعاً: مراجعة معالجة البيانات غير الموثوقة. أعطِ اهتماماً خاصاً للوظائف التي تفك ضغط البيانات أو تعالج الملفات المرفوعة أو تمرّر محتوى خارجياً إلى واجهات بيئة التشغيل.
خامساً: مراقبة التطبيق. راجع سجلات الخادم والتنبيهات الأمنية للبحث عن توقفات غير معتادة أو طلبات مشبوهة أو مؤشرات أخرى على نشاط ضار.
إذا ظهرت مؤشرات على استغلال الثغرة، فقد لا يكون تثبيت التحديث كافياً وحده. ينبغي أيضاً تقييم احتمال انكشاف بيانات اعتماد أو رموز مصادقة أو معلومات حساسة أخرى.
ماذا عن التطبيقات التي تستخدم Bun؟
Bun بيئة تشغيل JavaScript مستقلة عن Node.js، ولها تطبيقاتها وتكاملاتها الخاصة، مع توفير التوافق مع عدد كبير من واجهات Node.js.
لذلك، لا ينبغي افتراض أن البيئتين متطابقتان من الناحية الأمنية.
إذا كان تطبيقك يعمل باستخدام Bun، فراجع التنبيهات الأمنية الخاصة به وتحقّق مما إذا كانت الوظيفة المتأثرة موجودة في الإصدار الذي تستخدمه.
الإصدار المصحح من Node.js لا يعني أن تثبيت Bun قد أصبح آمناً تلقائياً. وبالمثل، لا يضمن استخدام Bun غياب الخطر من دون مراجعة التنبيه المناسب والتأكد من تفاصيل التنفيذ.
في جميع الحالات، من المهم المحافظة على تحديث بيئة التشغيل والمكتبات وصور النشر.
هل يكفي تعطيل Brotli للتخلص من الخطر؟
ليس بالضرورة.
تتعلق الثغرة بفك ضغط بيانات Brotli غير سليمة. لذلك، فإن تعطيل ضغط الاستجابات على مستوى خادم الويب أو شبكة توزيع المحتوى (CDN) لا يضمن توقف التطبيق عن استخدام وحدة فك ضغط متأثرة داخلياً.
إذا تم تحديد مسار معالجة معرض للخطر، فقد يساعد تقييد الوصول إليه مؤقتاً على تقليل التعرض إلى حين تطبيق التحديث. لكن يجب أن تستند هذه الإجراءات إلى بنية التطبيق الفعلية وطريقة عمله.
يبقى التحديث إلى إصدار مصحح هو الإجراء الأساسي. ولا ينبغي اعتبار تغييرات الإعدادات بديلاً عن تثبيت التحديث الأمني.
ما الذي ينبغي للشركات فعله الآن؟
تختلف التفاصيل بحسب النظام المستخدم، لكن الأولويات واضحة:
التحديد: حصر تطبيقات الإنتاج التي تستخدم Node.js 22.x أو 24.x أو 26.x، ومعرفة الإصدارات المثبتة فعلياً.
التحديث: ترقية بيئات التشغيل المتأثرة إلى أحدث إصدار أمني مناسب.
التحقق: التأكد من أن العمليات الفعلية وصور الحاويات تستخدم الإصدارات المصححة.
المراجعة: تحديد المسارات البرمجية التي تفك ضغط بيانات Brotli القادمة من مصادر غير موثوقة.
المراقبة: فحص النشاط غير المعتاد وتقييم احتمال التعرض للخطر عند وجود مؤشرات على الاستغلال.
الصيانة المستمرة: وضع آلية منتظمة لمتابعة التنبيهات الأمنية وتحديث بيئات التشغيل والمكتبات.
بالنسبة إلى الأنظمة المتاحة عبر الإنترنت، يُنصح بإعطاء الأولوية للخدمات المكشوفة مباشرة وللتطبيقات التي تعالج بيانات غير موثوقة.
إذا تعذّر تحديث أحد التطبيقات فوراً، فينبغي تقييم مستوى تعرضه للخطر والنظر في تقييد الوظائف المعنية مؤقتاً. وإذا تعذّر احتواء المخاطر بدرجة كافية، فقد يكون إيقاف الخدمة مؤقتاً هو الخيار الأنسب إلى حين تطبيق المعالجة.
الدرس الأهم: أمن التطبيقات يتجاوز الكود البرمجي
تعتمد تطبيقات الويب الحديثة على طبقات متعددة من البرمجيات. فقد يتضمن النظام إطاراً للواجهة الأمامية، وبيئة تشغيل على الخادم، ومكتبات خارجية، وصورة حاوية، ووكيل اتصال عكسياً، وشبكة توزيع محتوى، ونظام تشغيل.
يمكن لثغرة في أحد هذه المكونات أن تؤثر في أمن التطبيق بأكمله، حتى لو لم يتغير الكود البرمجي الخاص به.
لهذا السبب، لا يقتصر الأمن على إضافة المصادقة أو التحقق من النماذج أو كتابة منطق أعمال آمن. فهذه الممارسات ضرورية، لكنها تحتاج إلى بنية تحتية محدّثة وعملية موثوقة لتطبيق التحديثات الأمنية.
بالنسبة إلى أصحاب الشركات، يعني ذلك أن أمن الموقع يجب أن يكون جزءاً من الصيانة المستمرة، لا مجرد مهمة تُنجز عند إطلاق المشروع.
أما بالنسبة إلى فرق التطوير، فالقاعدة بسيطة: اعرف إصدار بيئة التشغيل المستخدمة في الإنتاج، واعرف كيف يتم تحديثها، وتأكد من وصول التصحيحات الأمنية إلى الأنظمة المنشورة فعلياً.
الخلاصة
تذكّرنا الثغرة CVE-2026-111497 في وحدة فك ضغط Brotli بأن المكونات البرمجية واسعة الاستخدام قد تتحول إلى مصدر لمخاطر أمنية كبيرة. وبما أن Node.js يشكّل أساساً للعديد من التطبيقات التي تعمل على الخوادم، بما فيها عمليات النشر التقليدية لـ Next.js، فمن الضروري التحقق من مدى التأثر وتطبيق التحديثات الأمنية المناسبة بسرعة.
لا يعني ذلك ضرورة التخلي عن Brotli أو Node.js أو Next.js، بل يعني ضرورة صيانتها بطريقة صحيحة.
تعتمد المعالجة الفعالة على ثلاثة عناصر أساسية: تطبيق التصحيحات الأمنية في الوقت المناسب، وفهم كيفية انتقال البيانات غير الموثوقة داخل التطبيق، والتحقق من بيئة الإنتاج الفعلية.
تساعد هذه الممارسات الشركات على تقليل المخاطر من دون الحاجة إلى تغييرات معمارية غير ضرورية.
في Hamo، نؤمن بأن المنتجات الرقمية الموثوقة لا تعتمد فقط على الميزات الجيدة والتصميم المتقن، بل تحتاج أيضاً إلى الانضباط الهندسي الذي يحافظ على أمان الأنظمة وتحديثها واستعدادها للتطور.
المصادر الرسمية
تعكس المعلومات الواردة في هذا المقال التنبيهات المتاحة حتى 24 أكتوبر 2026. يُرجى مراجعة التنبيهات الصادرة عن الجهات المطوّرة للاطلاع على أي تحديثات لاحقة.

