使用 GitHub Actions 验证 Gradle Wrapper
我们很高兴地宣布发布新的 Gradle Wrapper 验证 GitHub Action。
开源中的 Gradle Wrapper
该 gradle-wrapper.jar
是一个可执行代码的二进制文件,已签入近 280 万个 GitHub 存储库 中。
在 GitHub 上搜索,您可以找到许多带有“更新到 Gradle xxx”等有用标题的拉取请求 (PR)。许多这些 PR 由维护项目的组织之外的个人贡献。
维护人员感谢这些贡献,因为它减少了他们的积压工作。但从外部贡献者接受对 Gradle Wrapper 二进制文件的更改存在安全隐患,这些隐患可能并不明显。攻击者可以利用开源社区的信任,在 Gradle Wrapper 中隐藏恶意代码。恶意 gradle-wrapper.jar
可以下载、安装和执行任意代码,同时表现得像一个完全正常的 gradle-wrapper.jar
。
这种攻击很容易被忽略,因为对 gradle-wrapper.jar
的差异看起来像这样。
验证 Gradle Wrapper
我们创建了一个 简单的 GitHub Action,可以应用于任何 GitHub 仓库。此操作将验证仓库中任何和所有 gradle-wrapper.jar
文件是否与 官方 SHA-256 校验和 相匹配。如果任何文件不匹配,操作将失败。
此外,该操作将检测任何名为 gradle-wrapper.jar
的文件的 同形异义字 变体。目标是防止难以发现的同形异义字攻击,例如将 gradle-wrapper.jar
文件重命名为 gradlе-wrapper.jar
(使用西里尔字母 е
而不是 e
)。
保护您的项目
GitHub Actions 对开源项目免费使用,并且默认情况下在几乎所有仓库中自动启用。您可以在这里找到有关如何将此操作添加到您的 GitHub 仓库的更多信息:这里。
现有用户
此操作已贡献给 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 操作失败,因为 gradle-wrapper.jar
与我们发布的 SHA-256 校验和之一不匹配,我们强烈建议您通过 [email protected] 与我们联系。
如果您好奇并想探索您拥有的 gradle-wrapper.jar
与我们有效版本之间的差异,您可以使用此在线工具进行比较:DiffScope。
资源
要了解有关在本地验证 Gradle Wrapper JAR 的更多信息(即不使用 GitHub Actions),请参阅我们关于此主题的 文档。