
إثبات المفهوم لاستغلال CVE-2026-42945، وهو تجاوز سعة المخزن المؤقت في كومة الذاكرة (heap buffer overflow) في وحدة إعادة الكتابة (rewrite module) في NGINX مما يتيح تنفيذ تعليمات برمجية عن بُعد دون مصادقة عبر تقنية فنغ شوي للكومة عبر الطلبات (cross-request heap feng shui).
دليل إثبات المفهوم لثغرة CVE-2026-42945، وهي تجاوز سعة لمخزن مؤقت في كومة (heap buffer overflow) حرجة في وحدة ngx_http_rewrite_module الخاصة بـ NGINX والتي أُدرجت عام 2008. تُمكّن الثغرة من تنفيذ الأكواد عن بُعد دون مصادقة (unauthenticated remote code execution) ضد الخوادم التي تستخدم توجيهات rewrite و set.
هذه الثغرة — إلى جانب ثلاث مشكلات أخرى في تلف الذاكرة (CVE-2026-42946 و CVE-2026-40701 و CVE-2026-42934) — تم اكتشافها بشكل مستقل بواسطة نظام تحليل الأمان الخاص بـ depthfirst بعد نقرة واحدة لإعداد كود NGINX المصدر.
هل تريد العثور على مشكلات كهذه في الكود الخاص بك؟ جرب نفس النظام على https://depthfirst.com/open-defense.
يستخدم محرك النصوص (script engine) الخاص بـ NGINX عملية من خطوتين: أولاً حساب الحجم المطلوب للمخزن المؤقت، ثم نسخ البيانات داخله. يتم تعيين العلامة is_args على المحرك الرئيسي عندما يحتوي بديل rewrite على ?، لكن عملية حساب الطول تُنفذ على محرك فرعي جديد تم صفره. لذا:
is_args = 0 → تُعيد طول الالتقاط الخام.is_args = 1 → تُستدعي ngx_escape_uri مع NGX_ESCAPE_ARGS، مما يُوسع كل بايت قابل للهروب إلى 3 بايتات.يؤدي النسخ إلى تجاوز سعة المخزن المؤقت في الكومة (الذي هو أصغر من المطلوب) ببيانات URI يتحكم بها المهاجم. يستغل الاستغلال تقنية "هندسة الكومة بين الطلبات" (cross-request heap feng shui) لإفساد مؤشر cleanup الخاص بـ ngx_pool_t المجاور (الذي يتم رشه عبر أجسام POST، لأن بايتات URI لا يمكن أن تحتوي على بايتات null)، مما يُعيد توجيهه إلى بنية ngx_pool_cleanup_s وهمية تستدعي الدالة system() عند تدمير التجمع (pool).
اقرأ المزيد عن هذه الثغرة في الشرح الفني.
| المنتج | المتأثر | تم الإصلاح في |
|---|---|---|
| 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
تم الاختبار على Ubuntu 24.04.3 LTS.
./setup.sh — بناء الحاوية.docker compose -f env/docker-compose.yml up — تشغيل خادم NGINX الضعيف.python3 poc.py --shell — فتح شل.