使用 GitHub Actions 验证 Gradle Wrapper
引言
ℹ️ 2025 年 6 月 26 日更新 |
---|
wrapper 验证 GitHub action 的链接已修复。 |
我们很荣幸地宣布发布新的 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
的 diff 看起来是这样的。
验证 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。
资源 #
要了解有关在本地(即不使用 GitHub Actions)验证 Gradle Wrapper JAR 的更多信息,请参阅我们关于此主题的 文档。