
lighttpd 1.4.85 - High - Remote - Path - native Win32 GET /..%20/ document-root के बाहर पढ़ता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · lighttpd-win32-dotdot-space
वर्ग: फ़ाइल पठन पहुँच: रिमोट
lighttpd 1.4.85 (4852959) - lighttpd
नेटिव _WIN32 staticfile buffer_path_simplify के बाद document-root को rel_path से जोड़ता है। Simplify केवल तब ../ को फोल्ड करता है जब तीसरा बाइट / हो। http_response_prepare_physical केवल पूरे पथ से अनुगामी स्पेस और डॉट हटाता है। इसलिए GET /..%20/windows/win.ini /.. /windows/win.ini ही रहता है। \\?\ प्रीफ़िक्स के बिना _wstati64 / _wopen फिर Win32 को प्रति-घटक स्पेस हटाने देते हैं और उस सेगमेंट को .. मान लेते हैं।
नेटिव Windows lighttpd पर अनधिकृत GET/HEAD document-root के बाहर की एक नियमित फ़ाइल पढ़ता है जिसे worker अकाउंट खोल सकता है। Unix/Linux यह leftover नहीं है। फ़ाइल पठन, RCE नहीं।
लैब उन pin फ़ंक्शनों का एक gadget है। यह लाइव नेटिव Win32 worker नहीं है। अंतिम पंक्ति how=gadget का उपयोग करती है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | फ़ाइल पठन (पथ ट्रैवर्सल, नेटिव Win32 ..%20/) |
| पहुँच | रिमोट (अनधिकृत GET/HEAD) |
| CWE | CWE-22 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N |
| उत्पाद | lighttpd1.4 |
| प्रभावित | 1.4.85 (4852959e67ef51ea68084984400d3264b854c97d) नेटिव _WIN32 |
| प्रमाणीकरण | कोई नहीं। डिफ़ॉल्ट mod_staticfile |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1, how=gadget |
नेटिव Windows lighttpd की आवश्यकता है जो स्टैटिक फ़ाइलें सर्व कर रहा हो। Worker अकाउंट को लक्ष्य नियमित फ़ाइल खोलने में सक्षम होना चाहिए।
| विशेषाधिकार | विधि / sink | लैब-प्रमाणित या अनुमानित |
|---|---|---|
document-root के बाहर की फ़ाइल पढ़ना | अनधिकृत GET /..%20/<name> | लैब-प्रमाणित (gadget)। HTTP 200 बॉडी पैरेंट सीक्रेट है |
गैर-अंतिम .. घटक पर अन्य अनुगामी ASCII स्पेस/डॉट के लिए समान वर्ग | url-decode फिर simplify .. रखता है | %20 के लिए लैब-प्रमाणित। अन्य अनुगामी स्पेस/डॉट के लिए अनुमानित |
| उसी पथ पर HEAD | staticfile HEAD | अनुमानित। लैब ने GET का उपयोग किया |
नकारात्मक: वास्तविक /../ | buffer_path_simplify ../ को फोल्ड करता है | लैब-प्रमाणित। 404, सरलीकृत /windows/win.ini, कोई witness नहीं |
| नकारात्मक: अनसिम्प्लिफ़ाइड भौतिक स्ट्रिंग का Unix POSIX open | open("/srv/htdocs/.. /windows/win.ini") | लैब-प्रमाणित। ENOENT |
इस leftover पर बंद: Unix/Linux staticfile; Cygwin (समान strip, POSIX open); 1.4.85 %5C parseopt; CVE-2018-19052 alias; CVE-2014-2324 Host। RCE नहीं। लेखन नहीं।
मैंने टैग lighttpd-1.4.85 को pin किया। बीस hunts। डिफ़ॉल्ट Unix/Linux staticfile, FastCGI, proxy, TLS, auth, HTTP/2, alias/rewrite: इस बार पर कोई नहीं। 1.4.81-1.4.85 parser wave ने पहले ही trailers, CGI header conflicts, और अमान्य backend Content-Length को बंद कर दिया था।
buffer_path_simplify केवल तब ../ को फोल्ड करता है जब walk[2] == '/' हो। http_response_prepare_physical (src/response.c 334-360) में WIN32 strip पूरे-पथ का tail है। _wstati64 / _wopen (src/fs_win32.c 24-77) \\?\ के बिना UTF-16 पास करते हैं, इसलिए Win32 प्रति-घटक अनुगामी स्पेस हटाता है और .. .. बन जाता है। भौतिक join doc_root + rel_path है और post-stat basedir जाँच नहीं है।
पहले से दर्ज गलत मोड़: Unix ENOENT को "बग नहीं" मानना (यह negative control है); Cygwin को नेटिव Win32 कहना; 1.4.85 %5C को यह leftover बताना; फ़ाइल पठन को RCE तक बढ़ाना। नाटक: एक reverse shell। Oracle document-root के पैरेंट से आने वाली 200 बॉडी है।
python3 lighttpd-win32-dotdot-space-Abraxas-Labs.py
या
cd lab
./run.sh
लैब buffer_urldecode_path, buffer_path_simplify (Win32 '\\' map), response.c tail strip, और \\?\ के बिना _wstati64 का एक faithful gadget है। Unix POSIX open negative control है। Win32 resolve को समान प्रति-घटक अनुगामी-स्पेस strip, फिर . / .., फिर resolved पथ के POSIX open के रूप में लागू किया गया है। Loopback HTTP 127.0.0.1:19400।
/index.html -> 200 public-index, कोई witness नहीं।/../windows/win.ini -> 404, सरलीकृत /windows/win.ini।/..%20/windows/win.ini -> decoded /.. /windows/win.ini, simplify ने स्पेस रखा, Unix ENOENT, Win32 ने /srv/windows/win.ini resolve किया, 200 witness।SUCCESS lighttpd-win32-dotdot-space how=gadget win32-get=200 unix-open=enoent simplify-kept-dotdot-space=yes LIGHTTPD-WIN32-DOTDOT-SPACE-WITNESS
simplify से पहले प्रति पथ घटक अनुगामी स्पेस और डॉट हटाएँ, या Win32 opens को \\?\ से प्रीफ़िक्स करें और ऐसे भौतिक पथ को अस्वीकार करें जो document-root के अंतर्गत न रहे।
4852959e67ef51ea68084984400d3264b854c97d)src/buffer.c · src/response.c · src/fs_win32.c%5C parseopt · CVE-2018-19052 alias · CVE-2014-2324 HostGNU Affero GPL v3.0। देखें LICENSE। केवल Loopback लैब। कोई वारंटी नहीं।