使用 GitHub Actions 验证 Gradle Wrapper

目录

简介

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

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

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

资源 #

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

讨论