PyPI代码库安全审计深度解析:Warehouse与Cabotage漏洞挖掘

74 阅读3分钟

我们对PyPI的审计 - Trail of Bits博客

这是一篇与PyPI维护者联合发布的文章;请在此阅读他们的公告!

本次审计由开放技术基金(Open Tech Fund)赞助,是其保护互联网关键基础设施使命的一部分。完整报告可在我们的出版物仓库中查阅。

PyPI简介

PyPI(Python包索引)是Python生态系统的官方主要包索引和仓库:

  • 托管由75万独立用户上传的50万个独特Python包
  • 每月服务超过260亿次下载量
  • 全球范围广泛镜像,包括网络受限或受监控的国家

2018年之前,PyPI是一个存在大量技术债务的独立遗留应用。2016-2018年进行了全面重写,最终推出当前代码库Warehouse。后续增加了多项重要功能:作用域API令牌、基于TOTP/WebAuthn的MFA、组织账户、密钥扫描和可信发布。

审计与发现

PyPI由多个组件构成,包括自身托管在PyPI上的第三方依赖。审计聚焦两个核心组件:

Warehouse

PyPI的核心前后端,包括:

  • pypi.org上多数公开可见视图
  • PEP 503索引、REST/XML-RPC API
  • 管理员界面

审计重点领域:

  • 当前主要包上传机制"legacy"端点
  • 允许管理员在生产环境执行敏感操作的管理界面
  • 用户和项目管理视图
  • 认证授权方案及多凭证权限处理
  • GitHub密钥扫描、PyPA咨询数据库等第三方服务集成
  • 所有登录认证流程(含MFA和账户恢复)

关键发现(已修复):

  • TOB-PYPI-2:弱签名验证可能允许攻击者操纵AWS SNS集成
  • TOB-PYPI-5:上传端点的信息泄露可被用作侦察工具
  • TOB-PYPI-14:弱加密哈希可能导致缓存污染

评估显示Warehouse符合行业最佳实践(包括100%分支覆盖率、自动化安全扫描等)。

Cabotage

PyPI的持续部署基础设施,支持GitOps式部署。

审计重点领域:

  • GitHub webhook事件处理与容器调度逻辑
  • 容器镜像构建编排
  • 密钥处理和日志过滤
  • 用户界面表单和路由逻辑

关键发现(已修复):

  • TOB-PYPI-17:通过命令注入获取后台控制权
  • TOB-PYPI-19:通过特制Procfile进行权限提升
  • TOB-PYPI-20:GitHub提交伪装导致部署非真实镜像

评估显示Cabotage代码库成熟度低于Warehouse,存在维护人员单一、文档有限、缺少完整单元测试套件等问题。

核心结论

单元测试、自动化扫描和代码检查是安全开发生命周期的必要组成,但无法保证系统安全:手动代码审查对于捕获跨流程和系统级缺陷仍然不可替代。

感谢PyPI维护团队在审计过程中的紧密协作,特别致谢安全工程师Mike Fiedler在项目全周期的文档整理和问题分类工作。

分享至:Twitter | LinkedIn | GitHub | Mastodon | Hacker News