我们对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