Dependabot 是 GitHub 提供的自动化工具,可以扫描开源项目中是否存在易受攻击的依赖项,然后自动发出拉取请求以安装最新版本。
这个工具可以很好的解决一些开源项目使用的依赖项没有得到及时有效更新的问题,也帮助不少开发者减轻了工作。
网络安全平台 Checkmarx 从 7 月份开始扫描 GitHub 上的一些存储库,本来是用来检测是否存在潜在漏洞的,结果却意外发现有一些非典型提交来自 Dependabot,并且其中还包含恶意代码。
分析发现提交恶意代码的并非 GitHub 官方的 Dependabot,攻击者伪造了 Dependabot 并在提交历史记录中显示为 Dependabot 自动贡献,试图掩盖恶意活动。
Checkmarx 联系一些受害开发者交谈后发现,这些开发者的 GitHub 个人访问令牌被窃取并被攻击者用来贡献恶意代码,而恶意代码则会修改一些 js 文件,将用户提交的任何机密数据都发送到黑客控制的服务器上。
假 bot 插入的恶意链接,赌的就是开发者不会仔细检查内容
所以攻击者的实际路径是这样的:
首先利用某种方式窃取一些 GitHub 开发者的账号、密码和访问令牌 (SSH 密钥或 GPG 密钥,使用这类密钥不需要额外的 2FA 验证)
然后利用开发者的账号伪装成 Dependabot 在各个开源项目里提交恶意代码、等待该项目的开发者合并;
其他开发者调用受感染的开源项目后,最终用户的访问,例如在 Web 表单里提交的数据,都会发送到黑客服务器上。
不过目前 Checkmarx 还未发现攻击者是如何窃取开发者账号密码和 2FA 的,推测可能是他们的 PC 上安装了某些恶意软件。值得注意的是,分析来看整个假 Dependabot 的运作都是自动化的,似乎并不是黑客针对不同的项目进行手动提交,因此可以欺骗到部分开发者,但也容易被安全公司发现。
Checkmarx 建议开发者切换到 GitHub 权限粒度更细的个人访问令牌,这样可以降低令牌泄露后造成的潜在风险。遗憾的是 GitHub 的个人访问令牌活动日志仅限于企业账户可见,非企业账户无法看到自己的令牌审计日志,因此也不太容易被开发者发现自己的令牌可能已经被盗。