
استغلالات RCE في NGINX
إثبات المفهوم لتنفيذ الأوامر عن بُعد (RCE) لـ CVE-2026-42945، وهو تجاوز سعة مخزن مؤقت في الكومة خطير في وحدة ngx_http_rewrite_module الخاصة بـ NGINX والتي تم تقديمها في عام 2008. تمكن هذه الثغرة من تنفيذ التعليمات البرمجية عن بُعد دون مصادقة على الخوادم التي تستخدم توجيهات rewrite و set.
تم اكتشاف هذه الثغرة — إلى جانب ثلاث مشكلات أخرى لتلف الذاكرة (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — بشكل مستقل بواسطة نظام تحليل الأمان depthfirst بعد نقرة واحدة على إضافة مصدر NGINX.
هل ترغب في العثور على مشكلات مثل هذه في كودك الخاص؟ جرب نفس النظام على https://depthfirst.com/open-defense.
يستخدم محرك النصوص الخاص بـ NGINX عملية من تمريرين: أولاً حساب حجم المخزن المؤقت المطلوب، ثم نسخ البيانات إليه. يتم تعيين العلامة is_args على المحرك الرئيسي عندما يحتوي استبدال rewrite على ?، ولكن تمرير حساب الطول يعمل على محرك فرعي تم تصفيره حديثًا. إذن:
is_args = 0 → يعيد طول الالتقاط الخام.is_args = 1 → يستدعي ngx_escape_uri مع NGX_ESCAPE_ARGS، مما يوسع كل بايت قابل للهروب إلى 3 بايتات.يؤدي تمرير النسخ إلى تجاوز سعة المخزن المؤقت في الكومة ذو الحجم الأصغر ببيانات URI يتحكم بها المهاجم. يستخدم الاستغلال تقنية 'فنغ شوي الكومة' عبر الطلبات لإفساد مؤشر cleanup لـ ngx_pool_t المجاور (يتم رشه عبر أجسام POST، نظرًا لأن بايتات URI لا يمكن أن تحتوي على بايتات فارغة)، وتوجيهه إلى هيكل ngx_pool_cleanup_s مزيف يستدعي system() عند تدمير التجمع.
اقرأ المزيد عن هذه الثغرة في المقال الفني.
| المنتج | المتأثر | تم الإصلاح في |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
نشرة البائع الكاملة: https://my.f5.com/manage/s/article/K000160932
K000161616: ثغرة وحدة ngx_http_v3_module في NGINX — يخصص QPACK الخاص بـ HTTP/3 المخزن المؤقت insert_buffer للجلسة من تجمع تيار الترميز أحادي الاتجاه. يؤدي إغلاق هذا التيار إلى تحرير التجمع بينما تحتفظ الجلسة بمؤشر معلق، لذلك يؤدي تيار ترميز لاحق إلى حدوث استخدام بعد التحرير في الكومة في عامل NGINX.
K000162097: ثغرة توجيه map ومطابقة التعبير العادي في NGINX — يمكن أن تؤدي مطابقة التعبير العادي لتوجيه map مع متغيرات الالتقاط إلى تجاوز سعة المخزن المؤقت في الكومة في عملية عامل NGINX.
الخلل يكمن في تقييم القيمة المعقدة ذو التمريرين في محرك النصوص الخاص بالتيار. في تهيئة stream ضعيفة باستخدام ssl_preread، يتم إدخال TLS SNI الذي يتحكم به المهاجم إلى المتغيرات المدعومة بالتعبيرات العادية. يقوم NGINX أولاً بحساب طول المخزن المؤقت للإخراج، ثم ينسخ الإخراج. يمكن لتعبير عادي لـ map تحديث حالة الالتقاط العالمية بين هذين التمريرين: تمرير الطول يأخذ في الاعتبار قيمة صغيرة، بينما يقرأ تمرير النسخ التقاطًا أكبر مثل $1، مما يسبب كتابة خارج الحدود في الكومة في العامل.
إثبات المفهوم المصاحب CVE-2026-42533/ هو استغلال كامل السلسلة. يستخدم بدائية تسرب التيار لاستعادة قواعد الكومة و libc لتجاوز ASLR، ويرش سجلات ngx_pool_cleanup_s المزيفة عبر أجسام طلبات HTTP، ثم يستخدم التجاوز لإفساد مؤشر تنظيف تجمع NGINX المجاور. عندما يتم تدمير التجمع المفسود، يتم إعادة توجيه توزيع التنظيف إلى system() من libc، لتنفيذ الأمر المقدم.