
إثبات مفهوم لـ RCE لثغرة CVE-2026-42945، وهي ثغرة حرجة من نوع تجاوز سعة المخزن المؤقت في الكومة (heap buffer overflow) في وحدة ngx_http_rewrite_module في NGINX، أُدخل هذا الخطأ إلى الكود عام 2008. تتيح الثغرة تنفيذ كود عن بُعد دون مصادقة ضد الخوادم التي تستخدم توجيهات rewrite وset.
اكتُشفت هذه الثغرة — إلى جانب ثلاث مشاكل أخرى لتلف الذاكرة (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — بشكل مستقل بواسطة نظام التحليل الأمني لـ depthfirst بعد نقرة واحدة لدمج مصدر NGINX.
يستخدم محرك السكربت في NGINX عملية من مرحلتين: أولاً حساب حجم المخزن المؤقت المطلوب، ثم نسخ البيانات إليه. تُعيّن علامة is_args على المحرك الرئيسي عندما يحتوي استبدال rewrite على ?، لكن مرحلة حساب الطول تعمل على محرك فرعي مصفّر حديثًا. لذلك:
is_args = 0 → تُرجع طول الالتقاط الخام.is_args = 1 → تستدعي ngx_escape_uri مع NGX_ESCAPE_ARGS، لتوسيع كل بايت قابل للتهريب إلى 3 بايتات.يؤدي النسخ إلى تجاوز سعة المخزن المؤقت في الكومة صغير الحجم ببيانات URI يتحكم فيها المهاجم. يستخدم الاستغلال تقنية heap feng shui عبر الطلبات لإفساد مؤشر cleanup لـ ngx_pool_t المجاور (يُرشّ عبر أجسام POST، لأن بايتات URI لا يمكن أن تحتوي على بايتات فارغة)، ويعيد توجيهه إلى بنية ngx_pool_cleanup_s مزيّفة تستدعي system() عند تدمير التجمع.
اقرأ المزيد عن هذه الثغرة في قناتنا: https://t.me/p3Nt3st3rsTAr
| المنتج | المتأثر | أُصلح في |
|---|---|---|
| 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 — فتح شل.