Travis CI 漏洞致数千个开源项目机密泄露

近日,研究人员 Felix Lange 爆出 Travis CI 存在严重安全漏洞,所有公共开源存储库的安全环境变量(签名秘钥、访问凭据和所有公共开源项目的API tokens 等)都包含到 pull request 构建中,如果这些环境变量被窃取,那么这一漏洞将导致数千个开源项目的核心被泄露。

Travis CI 是一个开源的持续集成构建项目,别具一格地采用了 yaml 格式,累计为超过 90 万个开源项目和 60 万用户提供服务。因为它能与 GitHub 和 Bitbucket 无缝集成,所以目前大多数的 GitHub 项目都已移入到 Travis CI 的构建队列中。

1.png

如下图所言,当用户在运行构建时,Travis CI 会将 GitHub 存储库克隆到一个全新的虚拟环境中,并执行一系列的任务来构建和测试代码。如果其中一个或多个任务失败,则意味着构建中断,如果任务全部成功,则意味着构建通过,Travis CI 可以将用户的代码部署到 web 服务器或应用程序主机上。

2.png

在此之前,Travis CI 的文档始终提示用户:“加密的环境变量无法从分叉中提取请求,因为存在将此类信息暴露给未知代码的安全风险”。然而这个漏洞(CVE-2021-41077)却出现在了 Travis CI 的激活过程中,并且严重影响了 9月 3 日至 10 日之间创建的某些特定构建。

在 Travis CI 的激活过程中,开发者应该添加一个“.travis.yml”文件到开源项目存储库中,这个文件会告诉 Travis CI 应该做什么,不应该做什么,甚至可能包含机密内容,另一个把核心加密的东西是“Travis' web UI”。理想状况下,Travis 应该阻止公众访问任何秘密环境变量,以太坊加密货币项目负责人 Péter Szilágyi 称,“安全的环境变量是在 Travis’s web UI 上配置的(由Travis 独家拥有),然后这些变量会被添加到构建运行的环境中,但仅适用于受信任的代码,即已合并的代码。外部代码 ( PRs )不该插入 env 变量,因为维护者无法控制外部人员提交的代码,但是 Travis 却将密钥注入了不受信任的构建中”。

在这个漏洞出现 8 天后,Lange 将问题同步给了 Travis 的公司,并建议所有依赖 Travis CI 的项目更换他们的核心 “secret” 。

Travis CI 的 Montana Mendy 则在安全公告中说道,“根据最新报告,从另一个库分叉出来的公共存储库可以提交 pull request(如在 GitHub、BitBucket、Assembla 中),在构建的过程中打印一些文档,即使在未授权情况下依然可以访问原始公共存储库,在这种情况下,项目的核心在 Travis CI 数据库中仍然处于加密状态。”

9 月 10 日,Travis CI 默默地修补了这个漏洞。

9 月 13 日,Travis CI 发布了一篇简短的安全公告,如下图所示。

3.png

在这封公告中,没有对此次漏洞的分析,没有安全报告,也没有警告用户他们的机密内容可能已经被盗。这种“草率敷衍”的态度引起了社区的不满,Szilágyi 与社区的几位成员一起抨击了该公告,网络开发商 Jake Jarvis 称这是一封“令人尴尬的‘安全公告’。”

但是 Travis CI 认为“ 我们已经完成了一系列的安全补丁来解决这件事情,更新机密内容是所有用户都应该执行的操作”。

Travis CI 之所以引起社区公愤,在于它并没有公开透明地将此次的漏洞详情公之于众,并将部分责任理所应当地推卸给了项目的开发者,而那封“敷衍意味“极强的安全公告则更是让本就岌岌可危的关系雪上加霜。但也有人认为,Travis虽然处理事情的方式欠佳,但好在完成了一系列的安全补丁,将损失降到了最低,所以也并不算有重大过错。

添加新评论