使用 GitHub Actions 验证 Gradle Wrapper
简介
我们很荣幸地宣布发布新的 Gradle Wrapper 验证 GitHub Action。
开源中的 Gradle Wrapper #
gradle-wrapper.jar
是一个可执行代码的二进制 blob,它被检入到近 280 万个 GitHub 仓库中。
在 GitHub 上搜索,你可以找到许多带有诸如 ‘Update to Gradle xxx’ 这样有帮助标题的拉取请求 (PR)。这些 PR 中有很多是由组织外部的个人贡献的,而这些个人并不维护该项目。
维护者感谢这些类型的贡献,因为它从他们的待办事项中移除了一项。但是,接受来自外部贡献者的 Gradle Wrapper 二进制文件的更改存在可能不明显的安全隐患。攻击者可能会利用开源社区的信任,通过在 Gradle Wrapper 内部隐藏恶意代码。一个恶意的 gradle-wrapper.jar
可能会下载、安装和执行任意代码,同时在其他方面表现得像一个完全正常的 gradle-wrapper.jar
。
这样的攻击很容易被忽略,因为 gradle-wrapper.jar
的差异看起来像这样。
验证 Gradle Wrapper #
我们创建了一个简单的 GitHub Action,可以应用于任何 GitHub 仓库。这个 action 将验证仓库中所有 gradle-wrapper.jar
文件是否与 官方 SHA-256 校验和匹配。如果任何文件不匹配,该 action 将会失败。
此外,该 action 将检测名为 gradle-wrapper.jar
的文件的任何 同形字变体。目标是防止难以发现的同形字攻击,例如将 gradle-wrapper.jar
文件重命名为 gradlе-wrapper.jar
(其中使用西里尔字母 е
而不是 e
)。
保护你的项目安全 #
GitHub Actions 对于开源项目是免费使用的,并且在几乎所有仓库上默认自动启用。你可以在这里找到更多关于如何将此 action 添加到你的 GitHub 仓库的信息。
现有用户 #
此 action 已经被贡献到 GitHub 上一些最流行的基于 Gradle 的项目中,包括但不限于
- ReactiveX/RxJava
- ReactiveX/RxAndroid
- junit-team/junit5
- JakeWharton/butterknife
- google/flexbox-layout
- ktorio/ktor
- facebook/fresco
- facebook/flipper
- mockito/mockito
- jhipster/generator-jhipster
- apache/groovy
- apache/lucene-solr
以及 更多项目!
报告失败 #
如果此 GitHub action 因为 gradle-wrapper.jar
与我们发布的 SHA-256 校验和之一不匹配而失败,我们强烈建议你通过 security@gradle.com 联系我们。
如果你好奇并想了解你拥有的 gradle-wrapper.jar
与我们的有效版本之间的差异,你可以使用这个在线工具进行比较:DiffScope。
资源 #
要了解更多关于在本地验证 Gradle Wrapper JAR 的信息(即不使用 GitHub Actions),请参阅我们关于此主题的文档。