热门 Python 包 num2words v0.5.15 发布时无仓库标签,与已知威胁行为者有关联
关键要点
- 热门 Python 包 num2words 0.5.15 版本发布到 PyPI 时,官方 GitHub 仓库中没有相应的标签
- 安全研究员 @johnk3r 发现了与"Scavenger"威胁行为者的潜在关联,该行为者曾参与过之前的供应链攻击
- PyPI 已删除受影响的包,阻止进一步安装
- 此事件凸显了 Python 生态系统供应链安全的持续风险
事件经过
2025 年 7 月 28 日,Python 社区收到关于热门 num2words 包的潜在供应链攻击警报。这个用于将数字转换为文字的广泛使用的库的 0.5.15 版本在发布到 PyPI 后约 2 小时被标记为可能存在风险。
红旗信号与初步发现
该 compromise 通过几个令人担忧的指标被首次识别:
- 缺少仓库标签:与之前的版本不同,0.5.15 版本发布到 PyPI 时,官方 GitHub 仓库中没有相应的标签,地址为 https://github.com/savoirfairelinux/num2words/tags
- 时间差异:该包出现在 PyPI 上时,源代码仓库中没有任何相关的提交或发布活动
- 社区警报:安全研究员 @johnk3r 迅速在社交媒体上发出警报,警告社区可能存在 compromise
Scavenger 关联
根据 @johnk3r 的分析,早期指标表明此事件可能与"Scavenger"有关,这是一个之前与软件供应链入侵相关的威胁行为者。虽然完整的归因需要更深入的调查,但作案手法与之前的攻击相符:
- 发布合法包名的恶意版本
- 利用用户对成熟包名的信任
- 以热门包为目标以最大化潜在影响
https://x.com/johnk3r/status/1949862337340461528
自动化工具已升级到恶意版本
尽管响应迅速,自动化依赖管理工具已经开始创建拉取请求,将项目升级到受影响的版本。GitHub 搜索显示大量自动化 PR 尝试将 num2words 更新到 0.5.15 版本,展示了恶意包在生态系统中的传播速度之快。以下是一个示例拉取请求:
https://github.com/tarcisio-sousa/agiliza/pull/1075
影响与响应
num2words 包是一个广泛使用的 Python 库,提供将数字转换为多种语言文字表示的功能。每天有数千次下载量,任何 compromise 都可能对 Python 生态系统产生重大影响。
幸运的是,社区和 PyPI 管理员的快速响应帮助控制了潜在损害:
- 快速发现:可疑版本在发布后数小时内即被识别
- 迅速行动:PyPI 删除了受影响的包,阻止新安装
- 社区预警:安全警报通过社交媒体和开发者渠道快速传播
您应该采取的措施
如果您在项目中使用 num2words:
检查您的环境
运行 pip list | grep num2words 以验证您安装的版本
必要时降级
如果您已安装 v0.5.15,请立即使用 pip install num2words==0.5.14 降级到 v0.5.14
审计您的系统
审查可能已安装受影响版本的日志和系统
更新安全实践
考虑实施额外的供应链安全措施
适用于 StepSecurity 企业客户
以下步骤仅适用于 StepSecurity 企业客户。如果您不是现有企业客户,可以通过安装 StepSecurity GitHub App 开始我们 14 天的免费试用,以完成以下恢复步骤。
使用 StepSecurity Harden-Runner 检测 CI/CD 中受影响的依赖项
StepSecurity Harden-Runner 为您的 GitHub Actions 工作流程添加运行时安全监控,提供 CI/CD 运行期间网络调用、文件系统更改和进程执行的可见性。在 eslint-config-prettier 等 compromise 情况下,Harden-Runner 会检测并警报可疑行为,例如在构建过程中到恶意域的意外网络连接或未经授权的文件修改。该工具在工作流程中创建所有活动的审计跟踪,实现潜在安全事件调查时的快速取证分析。通过在 CI/CD 管道中强化运行时监控,您可以防止受影响的依赖项在构建环境中执行恶意代码。以下屏幕截图显示了 Harden-Runner 如何检测 tj-actions 供应链事件。
通过遵循 https://docs.stepsecurity.io/harden-runner 上的指南,在您的工作流程中实施 Harden-Runner。
更广泛的图景
此事件是针对包仓库的供应链攻击令人担忧的趋势的一部分。与最近 npm 生态系统对 is 包和 eslint-config-prettier 的攻击类似,威胁行为者继续利用开源包分发中基于信任的特性。
Python 社区,与 JavaScript 同行一样,必须保持警惕,继续加强包发布和消费方面的安全实践。
展望未来
虽然 PyPI 的快速响应防止了广泛的损害,但此事件再次提醒我们,供应链安全需要持续警惕。包维护者应该:
- 为包发布实施强身份验证和授权
- 使用可用的签名机制
- 建立明确的发布流程,包括仓库标签
- 考虑采用验证包完整性的工具和实践
对于包消费者来说,信息很明确:信任但要验证。包管理器的便利性不应凌驾于安全考虑之上。
致谢
感谢 Cedric Brisson 提醒我们注意此事件,感谢 @johnk3r 快速识别并在 X 上发出公开警报。他们在提高意识方面的快速行动帮助社区迅速做出响应。我们还感谢 PyPI 管理员在删除受影响的包方面的迅速响应。
通过关注安全研究员和订阅相关安全公告来了解供应链安全威胁。如果您发现可疑的包行为,请立即向相关包仓库管理员报告。