GitHub与PyPI引入“时间冷却”机制,阻击供应链投毒攻击
GitHub Dependabot 引入默认 72 小时冷却期,PyPI 禁止 14 天后上传新文件,两大平台联手用时间防御机制对抗供应链投毒攻击。本文详解措施原理、攻击场景及开发者应对建议,包含 chalk、debug 等真实案例背景。
⛓️ Medium 供应链攻击
GitHub 和 PyPI 分别在其依赖管理工具 Dependabot 和包发布流程中引入基于时间的防御策略:Dependabot 默认延迟 72 小时处理依赖更新,PyPI 则禁止在发布 14 天后向旧版本上传新文件。此举旨在防止攻击者利用自动更新或劫持的发布令牌向合法包注入恶意代码,降低供应链攻击的传播风险。
来源:BleepingComputer | Sun, 26 Ju | 原文链接
🔍 关键发现
- Dependabot 新增默认 72 小时冷却期(cooldown),延迟自动拉取新版本依赖,避免开发者立即下载刚发布的恶意包。
- PyPI 禁止维护者在包发布 14 天后上传新文件,防止攻击者通过劫持令牌或工作流给旧版本“投毒”。
- 过去一年供应链攻击频发(如 chalk、debug、s1ngularity、Shai-Hulud、GhostAction),促使两大平台采取预防性时间防御措施。
⚔️ 攻击链分析
攻击者入侵维护者账号/CI令牌 → 向已发布的旧版本(PyPI)或发布新恶意版本(npm)注入后门代码 → 开发者通过 Dependabot 自动更新或手动安装获取恶意包 → 恶意代码在本地或 CI 环境中执行,窃取凭证、部署挖矿程序等。
🛡️ 缓解建议
- ✅ 配置 Dependabot 的 cooldown 参数为 72 小时或更长,避免自动更新刚发布的依赖。
- ✅ 使用 lockfiles 固定依赖版本(dependency pinning),并启用只读令牌、禁用 CI 中不必要的安装脚本。
- ✅ 定期审计 PyPI 项目中的文件上传历史,对超 14 天的版本禁止后续修改,并启用多因素认证保护发布令牌。
涉及漏洞:[]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ Dependabot 72 小时冷却期能否完全阻止供应链攻击?
不能。该机制仅延迟自动更新,无法防御长期潜伏的恶意包(如数月后发布的新版本),需结合锁文件、令牌最小化等纵深防御。
❓ PyPI 为何选择 14 天作为文件上传截止期?
PyPI 统计显示合法项目极少在发布 14 天后上传新文件,因此该窗口能阻断劫持旧版本投毒,同时不影响绝大多数正常维护。
❓ 这些措施对已有攻击(如 chalk)有何影响?
属于预防性措施,旨在减少未来类似攻击的成功率。对于已发生的攻击,仍需手动清理恶意包并撤销受损令牌。