提交信息: - Commit 哈希: 0532fb876cb86bc091a91f78e6f28fff9e39ca65 - 作者: Patrick Hiesel - 提交者: Patrick Hiesel - 提交时间: 2020-11-02 14:30:54 +0100 - 父提交哈希: 33ce3f0ad6d6f17b731887517938562469b693b3 漏洞描述: - 修复了一个误解,导致数据可以通过应该被锁定的 Gerrit API 访问。 - Gerrit 有两个组件来确定 Git ref 对用户是否可见:(Default)RefFilter 和 PermissionBackend#ForRef(ex RefControl)。前者总是能为所有 refs 提供正确的结果,后者只有根据 Gerrit READ 权限的逻辑来决定 Git ref 是否可见。这包括所有 refs/heads 以及任何不是数据库 ref 或 Git tag 的其他 ref。当问到一个数据库引用(如 refs/changes/xx/yyyyxx/meta)时,该组件对 Git tags 和数据库引用不知情,从而允许访问,只要用户对任何 ref 前缀有 READ 权限,如默认的 "read refs/ Anonymous Users"。 - 这是问题,因为它绕过了文档中的行为 [1] ,用户应该只能访问他们可以看到目标 ref 的更改。 - 修复通过使 PermissionBackend#ForRef 具有权威性,添加测试来断言正确的行为。这些测试在修复前会失败,包括这些测试以便于回溯到只有一单个提交。 相关文件: - 修改了多个文件,包括 java/com/google/gerrit/server/permissions/RefControl.java, java/com/google/gerrit/server/permissions/RefVisibilityControl.java 等。 参考资料: - [1] Access Control Documentation 变更ID**: Ic3a756cf573dd9b38e3f198ccc44899ccf65f75 上述截图包含的信息揭示了软件中的一个安全漏洞及其修复措施,特别是在权限控制和数据访问方面的潜在风险。