
PoC لثغرة CVE-2026-42945 (nginx Rift) — تجاوز سعة المخزن المؤقت في الكومة في ngx_http_rewrite_module. يتضمن أوضاع الكشف/الاستطلاع/الاستغلال، ومختبر Docker بإعدادين، واكتشافًا تجريبيًا للعناوين، ومسح إزاحات موثَّق عبر OOB. الإفصاح الأصلي بواسطة depthfirst.
إثبات مفهوم للاستغلال عن بُعد (RCE) لثغرة CVE-2026-42945، وهي تجاوز سعة مخزن مؤقت في الكومة (heap buffer overflow) خطيرة في وحدة ngx_http_rewrite_module من NGINX أُدخلت عام 2008. تتيح تنفيذ أوامر عن بُعد بدون مصادقة على الخوادم التي تستخدم توليفات rewrite ... ?... + set للالتقاط.
الكشف الأصلي عن الثغرة: depthfirst — اكتُشفت إلى جانب CVE-2026-42946 وCVE-2026-40701 وCVE-2026-42934 عبر نظام تدقيق المصدر المستقل الخاص بهم.
poc-CVE-2026-42945/
├── exploit.py — نموذج PoC محسّن (3 أوضاع: --check / --probe / --exploit)
├── poc.py.orig — نموذج depthfirst الأصلي (مرجع)
├── env/ — مختبر Docker مزدوج البيئة
│ ├── Dockerfile (ثغرة: nginx commit 98fc3bb78)
│ ├── Dockerfile.patched (مصحّح: release-1.31.0)
│ ├── docker-compose.yml (الخدمتان معًا)
│ ├── nginx.conf (إعداد rewrite + set القابل للاستغلال)
│ ├── entrypoint.sh (يعمل تحت setarch -R — إيقاف ASLR)
│ └── server.py (نموذج خلفي)
├── discover-addresses.sh — استخراج HEAP_BASE / LIBC_BASE / إزاحة system() من الحاوية قيد التشغيل
├── verify.sh — أداة إعادة إنتاج مزدوجة البيئة (استغلال الثغرة، إثبات أن النسخة المصحّحة تمنعها)
├── setup.sh — مساعد بناء (صورة مفردة قديمة)
├── references.md — آليات الثغرة الكاملة، استراتيجية الاستغلال، وسائل التخفيف
└── README.md — هذا الملف
محرّك برمجي بمرحلتَين، عدم تزامن في علامة is_args:
is_args = 0 → تخصص طول الالتقاط الخامis_args = 1 → توسعة 3x عبر ngx_escape_uri(NGX_ESCAPE_ARGS) → تجاوز في الكومةالاستغلال: هندسة الكومة (heap feng shui) عبر POST /spray في جسم الطلب (بايتات NUL مسموح بها في الجسم، تُزرع بنية ngx_pool_cleanup_s مزيفة) + تجاوز في URI يُفسد رأس ngx_pool_t.cleanup المجاور. عند إتلاف التجمع (pool) → تنفيذ system(cmd).
الآليات الكاملة + استراتيجية الاستغلال في references.md.
| المنتج | الإصدارات المتأثرة | الإصدارات المصحّحة |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.30.1, 1.31.0 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
نشرة البائع: https://my.f5.com/manage/s/article/K000160932
# بناء البيئتين
docker compose -f env/docker-compose.yml build
# تشغيل المختبر (الثغرة=:19321، المصحّح=:19421)
docker compose -f env/docker-compose.yml up -d
# كشف فقط (بدون تشغيل التجاوز)
python3 exploit.py --check --host 127.0.0.1 --port 19321
# استغلال كامل
python3 exploit.py --exploit --host 127.0.0.1 --port 19321 \
--cmd 'echo pwned > /tmp/rift'
docker exec nginx-rift-vuln cat /tmp/rift
# تحقق مزدوج البيئة (استغلال الثغرة + تأكيد أن المصحّح يمنع)
./verify.sh
# إيقاف وإزالة البيئة
docker compose -f env/docker-compose.yml down
الأهداف غير المحلية (non-localhost) تتطلب وسم --i-have-tested-this (إقرار بأن الإزاحات المثبتة تتطابق مع البناء المنشور).
القيم الافتراضية --heap-base / --libc-base / --system-offset هي قيم المختبر المرفق (Ubuntu 22.04 / glibc 2.35 / nginx commit 98fc3bb78 / ASLR مطفأ). لبناء جديد أو نسخة libc مختلفة:
docker compose -f env/docker-compose.yml up -d nginx-vuln
./discover-addresses.sh
# انسخ القيم إلى استدعاء exploit.py
setarch -R. الأهداف الحقيقية لديها ASLR مفعّل — يتطلب وسيلة إضافية لتسريب المعلومات.rewrite ... ? + set $X $N في ملف nginx.conf المنشور. كثير من الإعدادات الحقيقية لا تحوي ذلك.--check، وتعداد الإزاحات --probe، وبيئة مصحّحة، ومساعد اكتشاف العناوين، ومُحقّق مزدوج البيئة.| الوضع | حالة الاستخدام | الأثر الجانبي |
|---|
--check | الكشف عن وجود سطح إعادة الكتابة (rewrite) | لا شيء — يرسل مسارات فحص صغيرة فقط |
--probe | تعداد إزاحات مواضع الرش (spray-landing) لهذا البناء | يتسبب بانهيار العامل/العاملين أثناء البحث؛ بدون تنفيذ |
--exploit | سلسلة RCE كاملة | انهيار العامل + استدعاء system() مع --cmd |