pickle
Python标准库内置的对象序列化模块,通过将Python对象转换为字节流实现持久化存储,支持大多数内置Python类型,是Python生态中最基础的序列化工具
核心事实
时间轴 (近 90 天)
模型权重文件可能被植入恶意代码,例如通过 pickle 反序列化漏洞执行任意命令。
如果模型内部包含大型numpy数组(scikit-learn模型普遍如此),joblib在速度和可靠性上比pickle更有优势
pickle通过将Python对象转换为字节流实现序列化,该过程称为pickling,反向恢复称为unpickling
pickle是Python内置标准库,用于序列化大多数Python对象,但处理大型numpy数组较慢,不适合大数据场景
大量现存模型仍以 pickle 格式(.pkl、.pt、.bin)分发,使得入库前的静态扫描(如 picklescan 工具)成为必要防线
针对Hugging Face等平台,历史上已记录过通过恶意pickle文件在模型加载时触发任意代码执行的攻击案例
在加载模型时优先使用 safetensors 而非 pickle 格式,可从根源上规避反序列化代码执行风险
Hugging Face 支持使用 safetensors 格式替代 pickle 格式
PyTorch的.pt/.pth文件和许多框架的checkpoint依赖pickle进行序列化存储
应使用安全的序列化格式如safetensors而非pickle,并对拉取的模型进行完整性校验
还有 3 条时间轴事件
全部知识事实 (13)
Python pickle格式在反序列化时可以执行任意代码,攻击者可以在模型文件中嵌入恶意代码
65%待验证模型权重文件可能被植入恶意代码,例如通过 pickle 反序列化漏洞执行任意命令。
50%待验证如果模型内部包含大型numpy数组(scikit-learn模型普遍如此),joblib在速度和可靠性上比pickle更有优势
50%待验证pickle是Python内置标准库,用于序列化大多数Python对象,但处理大型numpy数组较慢,不适合大数据场景
50%待验证pickle通过将Python对象转换为字节流实现序列化,该过程称为pickling,反向恢复称为unpickling
50%待验证大量现存模型仍以 pickle 格式(.pkl、.pt、.bin)分发,使得入库前的静态扫描(如 picklescan 工具)成为必要防线
50%待验证针对Hugging Face等平台,历史上已记录过通过恶意pickle文件在模型加载时触发任意代码执行的攻击案例
50%待验证Hugging Face 支持使用 safetensors 格式替代 pickle 格式
50%待验证在加载模型时优先使用 safetensors 而非 pickle 格式,可从根源上规避反序列化代码执行风险
50%待验证PyTorch的.pt/.pth文件和许多框架的checkpoint依赖pickle进行序列化存储
50%待验证应使用安全的序列化格式如safetensors而非pickle,并对拉取的模型进行完整性校验
50%待验证safetensors等安全格式正在推广作为pickle格式的替代,但大量存量模型仍使用pickle格式
50%待验证深度学习社区长期以pickle格式分享模型权重(.pt、.pkl文件),safetensors等安全格式正在推广以替代
50%