使用 GitHub Actions 验证 Gradle Wrapper

目录

引言

ℹ️ 2025 年 6 月 26 日更新
wrapper 验证 GitHub action 的链接已修复。

Pull Request Status Check with new 'Validate Gradle Wrapper / Validation' successful status

我们很荣幸地宣布发布新的 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 看起来是这样的。

Image of a GitHub Diff of Gradle Wrapper displaying text 'Binary file not shown.'

验证 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 的项目,包括但不限于:

以及 更多

报告失败 #

如果此 GitHub Action 因 gradle-wrapper.jar 与我们发布的 SHA-256 校验和不匹配而失败,我们强烈建议您通过 security@gradle.com 与我们联系。

如果您对此感到好奇,并想探索您拥有的 gradle-wrapper.jar 与我们有效版本之间的差异,您可以使用此在线工具进行比较:DiffScope

资源 #

要了解有关在本地(即不使用 GitHub Actions)验证 Gradle Wrapper JAR 的更多信息,请参阅我们关于此主题的 文档

讨论