अपडेट पर वापस जाएँ
UpdatedJul 31, 2026

CVE-2026-27654-PoC — Updated!

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 अंडरफ़्लो के कारण उत्पन्न होता है।

⚠️ अस्वीकरण: यह टूल केवल अधिकृत सुरक्षा अनुसंधान और परीक्षण के लिए है। इसका उपयोग केवल उन्हीं सिस्टम पर करें जिनके स्वामी आप हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति है। लेखक दुरुपयोग के लिए कोई ज़िम्मेदारी नहीं लेते हैं।

CVE-2026-27654 लोगो

🔥 भेद्यता अवलोकन

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 समर्थन अक्षम है)।

📦 इंस्टॉलेशन

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

🚀 उपयोग

इंटरैक्टिव मोड (मेनू)

python exploit.py --target 192.168.1.100:8080

आपको एक क्रमांकित मेनू दिखाया जाएगा और एक मोड चुनने के लिए प्रॉम्प्ट किया जाएगा।

भेद्यता जाँच (गैर‑इंटरैक्टिव)

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

यह crash मोड को बाध्य करता है, एक्सप्लॉइट चलाता है, और कोड 0 या 1 के साथ बाहर निकलने से पहले [VULNERABLE] या [NOT VULNERABLE] प्रिंट करता है।

HTTP proxy के साथ

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-prefixDAV लोकेशन प्रीफ़िक्स (डिफ़ॉल्ट: /uploads/)। nginx कॉन्फ़िग में alias लोकेशन से मेल खाना चाहिए।--location-prefix /dav/
--remote-nameDAV लोकेशन के अंदर रखा जाने वाला रिमोट स्रोत फ़ाइलनाम (डिफ़ॉल्ट: 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-depthDAV रूट से बाहर निकलने के लिए ../ पथ घटकों की संख्या (डिफ़ॉल्ट 1)।--escape-depth 3
--payload-filepayload के रूप में अपलोड करने के लिए लोकल फ़ाइल। डिफ़ॉल्ट परीक्षण कंटेंट को ओवरराइड करता है।--payload-file ./shell.php
--payload-textwrite-file मोड के लिए शाब्दिक टेक्स्ट payload।--payload-text "<?php phpinfo(); ?>"
--lhostReverse shell कॉलबैक होस्ट (cron-shell के लिए)। यदि छोड़ा जाता है, तो स्क्रिप्ट इंटरैक्टिव रूप से प्रॉम्प्ट करती है।--lhost 192.168.1.50
--lportReverse shell कॉलबैक पोर्ट (cron-shell के लिए)।--lport 4444
--cron-commandcron के माध्यम से चलाने के लिए कमांड (cron-cmd के लिए)। यदि छोड़ा जाता है, तो स्क्रिप्ट इंटरैक्टिव रूप से प्रॉम्प्ट करती है।--cron-command "rm -rf /tmp/*"
--waitcron डिलीवरी के बाद जॉब निष्पादित होने के लिए प्रतीक्षा करने के लिए सेकंड (डिफ़ॉल्ट 65)।--wait 120
--checkभेद्यता जाँच चलाएँ (क्रैश परीक्षण, गैर‑इंटरैक्टिव)। VULNERABLE/NOT VULNERABLE आउटपुट करता है और कोड 0/1 के साथ बाहर निकलता है।--check
--proxy PROXY_URLHTTP/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 पुनः स्पॉन करेगी।

उदाहरण:

python exploit.py --target 10.0.0.5:80
# Select mode 1 (crash)

2. write-file

श्रेणियाँ