使用 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 是一个可执行代码的二进制文件,已签入近 280 万个 GitHub 存储库 中。

在 GitHub 上搜索,您可以找到许多带有“更新到 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 仓库。此操作将验证仓库中任何和所有 gradle-wrapper.jar 文件是否与 官方 SHA-256 校验和 相匹配。如果任何文件不匹配,操作将失败。

此外,该操作将检测任何名为 gradle-wrapper.jar 的文件的 同形异义字 变体。目标是防止难以发现的同形异义字攻击,例如将 gradle-wrapper.jar 文件重命名为 gradlе-wrapper.jar(使用西里尔字母 е 而不是 e)。

保护您的项目

GitHub Actions 对开源项目免费使用,并且默认情况下在几乎所有仓库中自动启用。您可以在这里找到有关如何将此操作添加到您的 GitHub 仓库的更多信息:这里

现有用户

此操作已贡献给 GitHub 上一些最流行的基于 Gradle 的项目,包括但不限于

以及 更多

报告失败

如果此 GitHub 操作失败,因为 gradle-wrapper.jar 与我们发布的 SHA-256 校验和之一不匹配,我们强烈建议您通过 [email protected] 与我们联系。

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

资源

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

讨论