GuardDog安全扫描工具中Zip炸弹漏洞可导致拒绝服务攻击

0 阅读3分钟

GuardDog Zip Bomb Vulnerability in safe_extract() Allows DoS · CVE-2026-22870 · GitHub Advisory Database

漏洞详情

包管理器: pip 受影响包: guarddog (pip) 受影响版本: < 2.7.1 已修复版本: 2.7.1

描述

摘要 GuardDog 的 safe_extract() 函数在提取 ZIP 档案(如 wheels、eggs)时未验证解压缩后文件的大小,允许攻击者通过 zip 炸弹造成拒绝服务。一个恶意包可以用几兆字节的压缩数据消耗数吉字节的磁盘空间。

漏洞详情

  • 受影响组件: guarddog/utils/archives.py 中的 safe_extract() 函数
  • 漏洞类型: CWE-409 - 对高压缩率数据(Zip炸弹)处理不当
  • 严重程度: 高(CVSS ~8)
  • 攻击媒介: 网络(上传到 PyPI/npm 的恶意包)或本地

根本原因 safe_extract() 函数使用 tarsafe 库安全地处理 TAR 文件,但 ZIP 文件提取没有大小验证:

elif zipfile.is_zipfile(source_archive):
    with zipfile.ZipFile(source_archive, "r") as zip:
        for file in zip.namelist():
            zip.extract(file, path=os.path.join(target_directory, file))

缺少的保护措施:

  • ❌ 无解压缩大小限制
  • ❌ 无压缩比验证
  • ❌ 无文件数量限制
  • ❌ 无总提取大小验证

影响 拒绝服务场景

  1. CI/CD 管道中断

    • 攻击者向 PyPI 发布恶意包
    • 开发者将包添加到 requirements.txt
    • CI/CD 运行 GuardDog 扫描
    • 磁盘空间耗尽(GitHub Actions:标准 14GB 限制)
    • 所有部署被阻止
  2. 资源耗尽

    • 本地开发环境
    • 安全扫描基础设施
    • 自动化扫描系统
    • 磁盘空间有限的 Docker 容器
  3. 供应链攻击放大

    • 单个恶意包会阻塞安全扫描
    • 阻止检测其他恶意包
    • 迫使人工干预
    • 增加安全团队工作量

建议修复 为 ZIP 文件添加类似于 tarsafe 为 TAR 文件提供的大小验证。

配置选项 通过环境变量或配置文件使限制可配置。

其他改进建议

  • 当存档接近限制时添加警告日志
  • 为用户提供清晰的错误消息
  • 在面向用户的文档中记录限制
  • 添加 zip 炸弹检测测试
  • 考虑使用安全的 ZIP 库(类似于 tarsafe)

致谢 报告者: Charbel (dwbruijn)

参考链接

严重程度

严重等级: 高 CVSS 总体评分: 7.1 / 10

CVSS v4 基础指标 Exploitability 指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 攻击要求: 无
  • 所需权限: 无
  • 用户交互: 被动

脆弱系统影响指标

  • 保密性: 无
  • 完整性: 无
  • 可用性: 高

后续系统影响指标

  • 保密性: 无
  • 完整性: 无
  • 可用性: 无

EPSS 评分: 0.055% (第17百分位)

弱点

弱点: CWE-409 描述: 不当处理高压缩率数据(数据放大) 产品未处理或错误处理了具有极高压缩比、会产生巨大输出的压缩输入。

CVE ID: CVE-2026-22870 GHSA ID: GHSA-ffj4-jq7m-9g6v 源代码: DataDog/guarddog

贡献者: dwBruijn (报告者)FINISHED glyoVzOLZA9nMhz/bDHDAWzfRfZ0dSZtQUalpUyOmxd2cHGL5ZCm1H+5D3UA9pwOPoSOsE38becOq2cExVjc4w==