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))
缺少的保护措施:
- ❌ 无解压缩大小限制
- ❌ 无压缩比验证
- ❌ 无文件数量限制
- ❌ 无总提取大小验证
影响 拒绝服务场景
-
CI/CD 管道中断
- 攻击者向 PyPI 发布恶意包
- 开发者将包添加到 requirements.txt
- CI/CD 运行 GuardDog 扫描
- 磁盘空间耗尽(GitHub Actions:标准 14GB 限制)
- 所有部署被阻止
-
资源耗尽
- 本地开发环境
- 安全扫描基础设施
- 自动化扫描系统
- 磁盘空间有限的 Docker 容器
-
供应链攻击放大
- 单个恶意包会阻塞安全扫描
- 阻止检测其他恶意包
- 迫使人工干预
- 增加安全团队工作量
建议修复 为 ZIP 文件添加类似于 tarsafe 为 TAR 文件提供的大小验证。
配置选项 通过环境变量或配置文件使限制可配置。
其他改进建议
- 当存档接近限制时添加警告日志
- 为用户提供清晰的错误消息
- 在面向用户的文档中记录限制
- 添加 zip 炸弹检测测试
- 考虑使用安全的 ZIP 库(类似于 tarsafe)
致谢 报告者: Charbel (dwbruijn)
参考链接
- GHSA-ffj4-jq7m-9g6v
- nvd.nist.gov/vuln/detail…
- DataDog/guarddog@c3fb07b
严重程度
严重等级: 高 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==