Picklescan 因未能检测 numpy.f2py.crackfortran.myeval 而存在远程代码执行漏洞

本文详细分析了Python安全扫描工具Picklescan中的一个高危漏洞。该漏洞源于工具未能检测到恶意Pickle文件中对numpy.f2py.crackfortran.myeval函数的调用,导致攻击者可绕过检测实现远程代码执行,对依赖该工具扫描PyTorch模型等场景构成严重威胁。

漏洞详情

摘要 Picklescan 使用了 numpy.f2py.crackfortran.myeval 函数,该函数是 NumPy 中用于执行远程 pickle 文件的函数。

详情 攻击载荷通过以下步骤执行:

  1. 首先,攻击者在其 __reduce__ 方法中调用 numpy.f2py.crackfortran.myeval 函数来构造攻击载荷。
  2. 然后,当受害者使用 Picklescan 库检查 pickle 文件是否安全,而该库未检测到任何危险函数时,受害者可能会对该恶意 pickle 文件使用 pickle.load(),从而导致远程代码执行。

概念验证代码

1
2
3
4
class RCE:
    def __reduce__(self):
        from numpy.f2py.crackfortran import myeval
        return (myeval, ("os.system('ls')",))

影响

  • 任何依赖 picklescan 来检测 PyTorch 模型内部恶意 pickle 文件的组织或个人都会受到影响。
  • 攻击者可以在 pickle 文件中嵌入恶意代码,这些代码在 pickle 文件被加载时执行,但不会被检测到。
  • 攻击者可以通过 ML 模型、API 或保存的 Python 对象分发受感染的 pickle 文件。

报告者

参考链接

  • GHSA-3329-ghmp-jmv5
  • mmaitre314/picklescan#53
  • mmaitre314/picklescan@70c1c6c

技术信息

受影响的包

  • pip 包: picklescan

受影响版本

  • < 0.0.33

已修复版本

  • 0.0.33

严重等级

  • CVSS 总体评分: 7.4 / 10

CVSS v4 基础指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 攻击要求: 无
  • 所需权限: 无
  • 用户交互: 被动
  • 漏洞系统影响指标:
    • 机密性: 高
    • 完整性: 高
    • 可用性: 高
  • 后续系统影响指标:
    • 机密性: 无
    • 完整性: 无
    • 可用性: 无

弱点

  • CWE-94: 对代码生成的管控不当(‘代码注入’)
    • 产品使用来自上游组件的受外部影响的输入来构建全部或部分代码段,但未能消除或错误地消除了可能修改预期代码段语法或行为的特殊元素。

标识符

  • GHSA ID: GHSA-3329-ghmp-jmv5
  • CVE ID: 暂无已知 CVE

源代码仓库

  • mmaitre314/picklescan

时间线

  • 发布到 mmaitre314/picklescan: 2025年12月27日
  • 发布到 GitHub 咨询数据库: 2025年12月29日
  • 已审核: 2025年12月29日
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计