يقوم كل من Freenginx و nginx الآن بالتحقق من حجم متغير نصي قبل كتابة البيانات إليه (+ CVE)


3

TL؛ DRبعد اكتشاف ثغرة تجاوز سعة المخزن المؤقت الثالثة في عام 2026 (والتي تُعتبر، وفقًا لشركة F5، ثغرة تنفيذ تعليمات برمجية عن بُعد في حال عدم وجود تقنية ASLR) أثناء العمل مع التعابير النمطية والمتغيرات، قرر مطور Freenginx، ماكسيم دونين، معالجة هذه الثغرة، فأضاف فحصًا لحجم المتغير إلى منتجه قبل كتابة البيانات إليه. وقد تبنى Nginx هذه الميزة لاحقًا، مما يُعطي الأمل في القضاء على الثغرات الأمنية الجديدة المرتبطة بهذه المشكلة.

والآن إلى التفاصيل.

تم اتخاذ قرار في 19 يونيو ارتكب في Freenginx، تمت إضافة حقل "النهاية" إلى مُعرِّف المتغير، للإشارة إلى نهاية المخزن المؤقت. سابقًا، كان هناك مؤشر فقط إلى بدايته (pos)، وكان الطول المطلوب يُحسب مسبقًا (ولا يزال كذلك)، وبحلول وقت نسخ البيانات إلى المتغير، كان يُفترض أن الطول المحسوب بدقة سيضمن احتواء البيانات في المخزن المؤقت. لسوء الحظ، ثبت خطأ هذا مرتين في مايو 2026 بسبب أخطاء مختلفة.1 (linux.org.ru), 2 (linux.org.ru)مما أدى إلى تجاوزات في سعة المخزن المؤقت وعواقب وخيمة. الآن، عند إنشاء مخزن مؤقت لمتغير، يتم أيضًا ملء المؤشر إلى نهايته، وقبل كتابة البيانات إلى المتغير، إذا لم تتسع البيانات، فسيتم إنهاء معالجة الطلب بخطأ بطريقة مُتحكم بها. هذا يعني أن أخطاء حساب الطول قد تستمر، لكنها لن تُهدر الذاكرة؛ بل ستفشل فقط طلب HTTP المحدد. الالتزامات التالية (2 (freenginx.org), 3 (freenginx.org)تمت إضافة حماية مماثلة لأجزاء أخرى من الكود، بما في ذلك كود تسجيل الوصول. ونُشرت نسخة منه في 7 يوليو. Freenginx 1.31.3، والذي يتضمن هذا الإصلاح.

في 15 يوليو، تم التقاط هذه التغييرات بواسطة nginx (1 (github.com), 2 (github.com), 3 (github.com)(لسبب ما، تم تبديل العنصرين الثاني والثالث في السلسلة)، وتم تكليف هذه المسألة CVE-2026-42533وأصدرت شركة F5 بياناً رسمياً SA (f5.com).

فيما يتعلق بالثغرة الأمنية المحددة هذه المرة: تظهر عند استخدام توجيه الخريطة مع التعبيرات النمطية ذات المعلمات المستخرجة. أما بالنسبة للشروط الأخرى اللازمة لتفعيلها، فيختلف النص في وصف الالتزام والنص في تقرير الأمان اختلافًا طفيفًا: ينص تقرير الأمان على ضرورة حساب سلسلة نصية معينة لاحقًا، والتي تستخدم المعلمة المستخرجة المتبقية من الخريطة، قبل نتيجة الخريطة نفسها. في وصف الالتزام في المثال، بين هاتين الخطوتين، يتم أيضًا تصفير المتغير الذي يحتوي على المعلمة المستخرجة. ومع ذلك، فمن غير المرجح أن يحدث هذا في معظم خوادم nginx قيد التشغيل، وبالتالي لم تؤثر الثغرة الأمنية إلا على عدد قليل من المستخدمين. تجدر الإشارة أيضًا إلى أن إصلاحًا لحساب الطول خاصًا بهذه الحالة غير موجود في التعديلات الملتزمة (أو ربما لم أبحث جيدًا؟)، فهناك فقط حماية تحول المشكلة إلى فشل طلب HTTP مُتحكم فيه. على الرغم من إضافة بعض الإصلاحات إلى freenginx في 19 يوليو (5بفب, 7622, b906) حساب الطول لحالة مماثلة، ولكن ليس من الواضح على الفور ما إذا كان هذا هو الحال أم لا.

ظهرت الثغرة الأمنية في الإصدار nginx 0.9.6، وتم تضمين الإصلاحات في الإصدارات freenginx 1.31.3 و nginx 1.30.4 و nginx 1.31.3.

تتقدم شركة nginx SA بالشكر لعدد من الأفراد الذين قاموا بالإبلاغ بشكل مستقل عن الثغرة الأمنية والالتزام بـ "معايير الإفصاح المنسق":

تُعرب F5 عن امتنانها لكل من مينغ شوان، وDKD (@pidifn)، وجيان تشو، وزين يان من مختبر AntAISecurityLab، ورافائيل غاسيك، وسيرجي نيغوديوك من شركة EVO.company، ولام جون رونغ من شركة Calif.io، ومفيد في إتش من شركة Winfunc Research (winfunc.com)، وشركة Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin من depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin من Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil), and Milan Jovic (Kljunowsky) لجهودهم المستقلة في لفت انتباهنا إلى هذه المشكلة واتباع أعلى معايير الإفصاح المنسق.

في Freenginx، تقتصر المعلومات المصاحبة حول الإصلاح فعليًا على رسالة الالتزام. التغييرلم يُصنّف هذا الإصلاح حتى على أنه "إصلاح أمني" أو "إصلاح خلل"، بل "ميزة" فقط. على ما يبدو، لم يعتبر المؤلف هذه المشكلة حرجة. من المستحيل تحديد العلاقة بين المشكلات التي أبلغ عنها الأفراد المذكورون في F5 والتحديث المنسوخ من freenginx، أو ما إذا كانوا (أو أي شخص آخر) قد أبلغوا مطور freenginx بالمشكلة.

المصدر: linux.org.ru

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster