代码所有者

概述

GitHub 允许您定义负责仓库中代码的个人或团队,即代码所有者。为此,您应该将 CODEOWNERS 文件添加到以下位置之一:

  • .github/

  • /

  • docs/

之后,您可以设置受保护分支的规则,并要求代码所有者进行强制批准。

参考资料:

代码所有权接管

代码所有者的文档说明CODEOWNERS 文件可以在 /docs/.github/ 目录中定义:

要使用 CODEOWNERS 文件,请在仓库的根目录、docs/ 或 .github/ 目录中创建一个名为 CODEOWNERS 的新文件,在您想要添加代码所有者的分支中。

然而,如果一个仓库包含多个 CODEOWNERS 文件会发生什么?实际上,在允许的路径中存在以下优先级:

  • .github/

  • /

  • docs/

因此,如果 GitHub 在 .github/ 中找到 CODEOWNERS 文件,它将忽略 /docs/ 中的 CODEOWNERS 文件。换句话说,如果 CODEOWNERS 文件已在 /docs/ 中创建,具有写入权限的攻击者能够将 CODEOWNERS 文件添加到 .github/,接管代码所有权,并绕过分支保护规则。现在攻击者是整个仓库代码的所有者,可以批准任何更改。

假设有一个仓库,其中 .github/ 有单独的所有者负责对该目录的更改,而 CODEOWNERS 文件存储在 / 中。在这种情况下,CODEOWNERS 文件可能如下所示:

* @owner-team
.github/ @dev-team

@dev-team 团队的成员,或获得该成员账户访问权限的攻击者,可以使用以下步骤在此仓库中提升其权限:

  1. 使用个人 GitHub 账户或其他被入侵的账户 fork 仓库。

  2. 添加具有以下内容的 .github/CODEOWNERS 文件:

    * @dev-team
  3. 向目标仓库创建 PR。

  4. 批准 PR(由于攻击者有权访问 .github/ 的代码所有者账户,他们可以在 .github/ 内批准任何更改)。

  5. 合并更改。

  6. 现在攻击者是整个仓库的代码所有者,他们能够批准任何更改,包括 .github/ 之外的更改。

最后更新于