تحليل معمق · قراءة نحو 6 دقائق
كشف ثغرة في أداة فك ترميز Brotli: يجب أن يصل التصحيح إلى كل نسخة قيد التشغيل
توثّق Node.js الثغرة CVE-2026-111497، ويعرض دليل النشر إصلاحات المشاريع التابعة وضوابط مؤقتة، مع حدود مهمة تتعلق بفك الترميز ودورة الدعم.
- نُشر هنا
- تاريخ المصدر
- تم التحقق من المصدر
توثّق Node.js الثغرة CVE-2026-111497 التي أبلغ عنها فريق OpenAI Codex Security، بينما ترتّب PatchthePlanet إصلاحات المشاريع التابعة والضوابط المؤقتة. توضح هذه الحالة الفجوة بين إصلاح مكتبة مشتركة وحماية البرمجيات المنشورة فعليًا. يتوقف التعرض للخطر على وصول بيانات غير موثوقة إلى أداة فك ترميز متأثرة؛ فاستخدام Brotli وحده لا يثبت أن كل بيئة نشر معرضة للثغرة.
استمع إلى الأخبار
استمع إلى هذا المقال أو تابع تشغيل الأخبار.
جارٍ تجهيز القراءة…
صوت الجهاز
يتولى المتصفح أو الجهاز معالجة النطق. لا يرسل AISubHub النص إلى واجهة صوتية. تختلف الأصوات والتشغيل مع قفل الشاشة حسب الجهاز.
قد تتكرر عبارة قصيرة عند المتابعة.
لمحة سريعة
- تذكر Node.js إصلاحات في الإصدارات 22.23.4 و24.22.1 و26.12.1؛ وقد يتسبب الخلل في إفساد الذاكرة عندما يفك تطبيق ضغط بيانات Brotli يزوّده بها مهاجم.
- يسرد دليل النشر إصلاحات Bun وEnvoy وIstio ومشروع Brotli الأصلي، لكنه يحذّر من أن إصدارًا مصححًا ضمن فرع غير مدعوم لا يشكّل مسار ترقية مدعومًا.
- يجب أن تمنع الضوابط المؤقتة بيانات Brotli غير الموثوقة قبل فك ترميزها في كل المسارات ذات الصلة. لا يكفي تعطيل ضغط المخرجات أو إزالة br من Accept-Encoding وحدها.
التمييز بين الكشف وتواريخ المصادر
ينسب دليل Node.js الإبلاغ عن ثغرة Brotli إلى Khai Tran وSylvie Mayer من فريق OpenAI Codex Security، وإصلاحها إلى mcollina وaduh95. ويربط دليل النشر من PatchthePlanet البرمجيات المتأثرة بالإصدارات والضوابط المؤقتة المناسبة. ويتمثل تحليل AISubHub العملي في أن الحماية يجب أن تمر عبر إصدارات المكوّنات وبيئات التشغيل المضمّنة والتطبيقات المعاد بناؤها وصولًا إلى عمليات النشر الفعلية قيد التشغيل لدى المستخدمين؛ فتثبيت حزمة واحدة لا يثبت بمفرده اكتمال المعالجة.
يحمل عنوان صفحة Node.js تاريخ 21 أكتوبر لإصدارات الأمان، لكنه لا يحدد تاريخ إضافة كل بند من بنود CVE. وتذكر PatchthePlanet أنها حُدّثت في 23 أكتوبر، وهذا ليس توقيت نشرها الأول. ولا تثبت هذه التواريخ متى وصلت كل إصلاحات المشاريع التابعة إلى المستخدمين. قرأت AISubHub هذه المواد العامة في 24 أكتوبر؛ فتاريخ الاطلاع منفصل عن تاريخ عنوان صفحة الإصدار أو علامة التحديث.
كيف تصبح ثمانية بايتات مصدر خطر
توضح Node.js أن انتقالًا غير صالح بين الكتل عومل باعتباره حاجة مؤقتة إلى مزيد من المدخلات، بدلًا من اعتباره خطأ دائمًا في التنسيق. واصلت أداة فك الترميز المتدفق إضافة بايتات إلى مخزن داخلي سعته ثمانية بايتات، وكان من الممكن أن تكتب خارج حدوده. وفي تطبيق يفك ضغط بيانات يتحكم بها مهاجم عبر node:zlib، قد تشمل النتائج التعطل أو كشف محتويات الذاكرة أو تنفيذ شيفرة عن بُعد.
الحد الأمني المعني هو فك ترميز المدخلات غير الموثوقة، مثل أجسام الطلبات والردود الواردة من خوادم غير موثوقة والملفات المضغوطة. أما ضغط البيانات الصادرة فقط فلا يثبت التعرض للخطر. وينبّه الدليل أيضًا إلى بيئات التشغيل المضمّنة، وcurl/libcurl، وروابط Python أو Java، وأدوات فك ترميز الخطوط وقراءة الملفات. قد يحتوي تطبيق Electron على نسختين منفصلتين من Chromium وNode.js؛ وإصلاح إحداهما لا يثبت إصلاحهما معًا.
اختيار إصدار مدعوم لكل مكوّن
تحدد Node.js الإصدارات 22.23.4 و24.22.1 و26.12.1. وتسرد PatchthePlanet إصدار Bun 1.4.4 الذي يتضمن Brotli 1.2.1، وكذلك إصدارات مشروع Brotli الأصلي 1.0.10 و1.1.1 و1.2.1 لفروع المكتبة المعنية. هذه إصدارات خاصة بكل مكوّن، وليست رقم إصدار موحدًا يصلح كل تطبيق يضم أداة فك الترميز.
يسرد الدليل نفسه إصدارات Envoy 1.40.0 و1.39.3 و1.38.6 و1.37.8. ويتضمن Envoy 1.36.12 الإصلاح أيضًا، لكن فرعه غير مدعوم. أما إصلاحات Istio فهي في 1.29.9 و1.30.6 و1.31.2؛ وقد انتهى عمر الفرع 1.29. يتطلب هذان الاستثناءان الانتباه إلى مسارات الترقية المدعومة، بدلًا من مساواة وجود التصحيح باستمرار الصيانة.
منع المدخلات قبل فك ترميزها
توصي PatchthePlanet بتعطيل فك ترميز Brotli للبيانات غير الموثوقة مؤقتًا عندما يتعذر تطبيق التصحيح فورًا. يسمح مثال Express بالقيم identity وgzip وdeflate قبل جميع محللات أجسام الطلبات، ويرفض الترميزات الأخرى أو المتراكبة برمز HTTP 415. ويحتاج أي وكيل يفك الترميز أولًا إلى حماية خاصة به. أما البديل inflate:false فيرفض جميع أجسام الطلبات المضغوطة، بما فيها gzip وdeflate.
بالنسبة إلى الردود التي يجلبها التطبيق، فإن إزالة br من Accept-Encoding لا تعدو كونها تفضيلًا؛ إذ يظل بإمكان الخادم إرسال Brotli. يؤخر مثال Python قراءة جسم الرد وفك ترميزه حتى التحقق من Content-Encoding. ويعطّل المثال عمليات إعادة التوجيه وإعادة المحاولة؛ وإذا أُضيفت، وجب فحص كل رد. قد تفك عمليات fetch المعتادة أو القراءة التلقائية الترميز قبل أن يفحص التطبيق الترويسات. ولا تغطي حدود الحجم وقواعد جدار حماية تطبيقات الويب WAF وحدها جميع المسارات.
للحلول المؤقتة نطاق حماية محدود
في Envoy وIstio، يعطّل الدليل أداة فك ضغط Brotli في الاتجاهين، ويزيل إعدادات التجاوز أثناء التشغيل التي قد تعيد تفعيلها، ويحذّر من أن الاتجاه الذي لا يُحدد يكون مفعّلًا افتراضيًا. ينبغي الإبقاء على مرشحات gzip أو zstd المنفصلة؛ فاشتراكها في اسم المرشح ليس سببًا لحذفها جميعًا. وقد تُمرر البايتات المرمّزة إلى الأنظمة اللاحقة، ولذلك تظل أدوات فك الترميز في التطبيقات بحاجة إلى الحماية.
يتمثل الحل المؤقت لـNext.js في ضبط images.unoptimized على مستوى التطبيق، ثم إعادة البناء والنشر، والتحقق من أن /_next/image لم يعد يشغّل أداة التحسين المضمّنة. ولا يحمي ذلك أدوات التحميل المخصصة، أو عمليات الجلب الأخرى من جهة الخادم، أو أدوات فك الترميز الأخرى. وفي Istio، يجب فحص الإعداد الفعلي لكل بوابة ولكل وكيل جانبي؛ فتعديل ملف إعداد واحد لا يثبت تغير جميع النسخ قيد التشغيل.
التحقق من النشر الفعلي قيد التشغيل
يدعو الدليل إلى تحديث أرقام الإصدارات المحددة لبيئات التشغيل والصور، وإعادة بناء الحاويات أو الملفات التنفيذية التي تضمها، وإعادة تشغيل أو نشر الخدمات وعمليات العمل الخلفية والمهام المجدولة والنسخ المتماثلة. يجب مطابقة الملف الثنائي أو الصورة قيد التشغيل مع الإصدار المصحح للمكوّن المعني. لا يثبت تنزيل تصحيح أو تحديث جهاز البناء أو إصلاح مكوّن في المتصفح أن كل عملية تستخدم أداة فك الترميز المصححة.
في مثال افتراضي من AISubHub، قد تضغط شبكة CDN الردود الصادرة بينما يفك عامل خلفي منفصل ترميز المحتوى الذي يجلبه. لن يغيّر تعطيل ضغط CDN تعرض ذلك العامل للخطر، وقد يتجاوز مسار بديل إلى خادم الأصل حماية الوكيل أيضًا. هذا مثال معماري توضيحي، وليس فحصًا لخوادمنا. ينبغي أن يشمل التحقق المسارات ذات الصلة وأن يؤكد استمرار عمل أساليب الضغط المسموح بها.
لماذا يهم
الدرس العملي هو حصر مواضع فك الترميز وربط إصلاحات المشروع الأصلي ببيئات نشر أُعيد بناؤها وتعمل فعليًا. لفحص الإصدارات وللحواجز المؤقتة وظيفتان مختلفتان؛ ولا يثبت اسم مكتبة مشتركة أو تغيير إعداد واحد حماية جميع الأنظمة.
القيود والتوافر
راجعنا الدليلين العامين، ولم نراجع شيفرة استغلال أو جميع ملاحظات الإصدارات المرتبطة أو أنظمة العملاء المنشورة. تُنسب تفاصيل الإصدارات غير الخاصة بـNode.js إلى مراجعة PatchthePlanet بتاريخ 23 أكتوبر. لم ننفذ استغلالًا أو ترقية لبيئة تشغيل أو تدقيقًا للخوادم، ولا تثبت هذه المواد وقوع هجمات واسعة النطاق أو معالجة شاملة في كل الأنظمة.
المصادر والأدلة
تاريخ المصدر: · تم التحقق من المصدر:
قراءات إضافية
مقالات تحريرية بمساعدة الذكاء الاصطناعي تُراجع مقابل المصادر الأولية المذكورة. تُنسب ادعاءات الشركات إليها، والإدراج لا يعني التوصية.