Python原生的序列化协议pickle虽然功能强大,但存在已知的安全风险,尤其是在传输不可信数据或保存机器学习模型时。为了缓解风险,开发者通常会在反序列化时限制导入的模块,或使用静态和动态分析工具检测恶意负载。然而,这些方法依赖于对Pickle虚拟机(PVM)操作码的准确解释,而Python的三种原生PVM实现(pickle、cPickle、_pickle等)之间存在行为差异,可能导致误判或漏检。为了高效、可扩展地发现这些差异,本文提出了PickleFuzzer,一种基于生成的定制化模糊测试工具。PickleFuzzer根据自定义语法生成pickle对象,然后分别传递给不同实现,通过比较异常抛出和关键内部状态的变化来检测不一致性。它不需要规范的预言机,而是通过差分测试比较执行行为。实验发现了14个新的不一致性,其中4个是严重的安全缺陷,可绕过Hugging Face等模型托管平台使用的安全扫描工具。作者已向Python软件基金会报告了所有发现,并通过漏洞赏金平台获得750美元奖励。研究表明差分测试是发现pickle实现中安全相关差异的有效方法,为未来更定向的模糊测试提供了方向。
💡 推荐理由: pickle在AI/ML生态中广泛使用,其实现差异可能被攻击者利用绕过安全扫描,导致反序列化攻击。该研究直接揭示了现有防御的盲区,对模型托管和依赖pickle的框架有重要安全参考价值。
🎯 建议动作: 研究跟进