في 13 مايو، تم إصلاح ثغرة أمنية في خادم الويب nginx، وهو خيار شائع للأنظمة ذات الأحمال العالية: CVE-2026-42945مما قد يؤدي إلى تنفيذ أوامر عن بعد. ظهرت هذه الثغرة الأمنية قبل 18 عامًا (في عام 2008) في الإصدار 0.6.27.
لاستخدامه، يجب أن يحتوي تكوين الخادم على مجموعة محددة من التوجيهات، غير موجودة في جميع الحالات، ولكنها موجودة في بعض الأماكن، على سبيل المثال:
أعد كتابة ^(.*) /new?c=1;
قم بتعيين $myvar $1;
return 200 $myvar;
تفاصيل مهمة:
- أولاً يأتي توجيه إعادة الكتابة، حيث يتم استبدال (الوسيط الأول) وهو تعبير نمطي مع معلمة قابلة للتحديد (شيء ما بين قوسين) بواسطة (الوسيط الثاني) وهو مسار يحتوي على علامة استفهام؛
- التوجيه set (إعادة الكتابة الثانية أو إذا ستعمل أيضًا بدلاً من ذلك)، والذي يستخدم المعلمة المحددة من المسار الأصلي المعاد كتابته (في هذه الحالة، $1).
تعمل الثغرة الأمنية على النحو التالي:
- تقوم توجيهات إعادة الكتابة الأولى، عندما تصادف علامة استفهام، بتعيين علامة is_args الداخلية، مما يعني "نحن الآن نجمع معلمات get لعنوان URL المستبدل، ويجب تهريب كل شيء"، و(هذا هو جوهر الخطأ) تنسى إعادة تعيين هذه العلامة في نهاية عملها؛
- عند إنشاء قيمة للمتغير $myvar باستخدام الأمر set اللاحق، يتم تطبيق قيمة is_args المُحددة مسبقًا بشكل خاطئ، وكتابة القيمة المُهرّبة للمعامل المُخصص $1 إلى المتغير my_var. تكمن المشكلة في أن المخزن المؤقت للمتغير $myvar يُخصص مُسبقًا، قبل إجراء عمليات الاستبدال، ويتم حساب طوله باستخدام is_args=0. هذا يعني أن القيمة المُهرّبة أطول من المخزن المؤقت المُخصص، مما يؤدي إلى الكتابة إلى هياكل بيانات أخرى على الخادم خارج المخزن المؤقت المُخصص. ولحل هذه المشكلة، يكفي إرسال طلب يحتوي على الأحرف التي تحتاج إلى تهريب، مثل علامات الجمع، في موضع مُعامل التعبير النمطي.
إذا لم يكن هناك ALSR على المضيف، فيمكن استغلال هذه الثغرة الأمنية لتنفيذ التعليمات البرمجية عن بُعد بصلاحيات عملية عامل nginx. اضغط لتتحدث (هذا ليس استغلالًا صريحًا، بل هو عرض توضيحي في بيئة تجريبية).
تم إصلاح الثغرة الأمنية في الفرع المستقر من nginx 1.30.1، وفي فرع التطوير الجديد 1.31.0. رابط الالتزام.
ومن الجدير بالذكر أنه قبل 14 عامًا (2012) حدث خطأ مماثل تم تصحيحها بالفعل في أماكن أخرى قريبة.
---
يوصي موقع F5 الإلكتروني بحل مؤقت لهذه الثغرة الأمنية في حال تعذر تحديث إصدار NGINX بسرعة. يتمثل الحل في استبدال المعلمات المخصصة غير المسماة بمعلمات مسماة، مما سيمنع، بحسب الموقع، ظهور الثغرة. مثال من الموقع:
كان: إعادة كتابة ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
أصبح: إعادة كتابة ^/users/(? [0-9]+)/الملف الشخصي/(? .*)$ /profile.php?id=$user_id&tab=$section last;
تم الإبلاغ عن الثغرة الأمنية من قبل زينبنغ (ليو) لين من شركة ديبث فيرست. كما أبلغ عن المشكلات التالية، والتي تم إصلاحها أيضاً:
- CVE-2026-40701 (ارتكب) استخدام بعد التحرير عند استخدام ssl_verify_client+ssl_ocsp (على ما يبدو بدون RCE)
- CVE-2026-42934 (ارتكبقد تؤدي قراءة البيانات خارج نطاق المخزن المؤقت في محلل UTF-8 في ظروف معينة إلى تسرب بيانات صغير أو تعطل عملية العامل.
- CVE-2026-42946 (ارتكبقد يؤدي تخصيص الذاكرة المفرط وقراءة البيانات خارج النطاق عند استخدام وحدات scgi/uwsgi إلى مشاكل، وتتجلى هذه المشكلة في وجود خادم خلفي خبيث (الخادم الرئيسي) عبر البروتوكولات المحددة، أو عند اعتراض قناة الاتصال مع الخادم الخلفي، مما قد يؤدي إلى قراءة ذاكرة nginx أو تعطل عملية العامل.
المصدر: linux.org.ru
