4

我正在构建一个围绕我的 GitHub 应用程序集成的网站。

这个网站有自己的用户(来自 Google oAuth),他们可以通过安装我的 GitHub 应用程序将他们的帐户连接到他们的 GitHub 帐户。

在 GitHub 应用程序安装过程中有一些事情我无法理解:

用户在 GitHub 上安装我的应用程序后:

  • 他们的浏览器被重定向到一个 URL(“安装后设置 URL”),该 URL 中包含安装 ID。

  • GitHub 调用我的 webhook 来声明安装

安装 ID 是一个敏感信息,就好像我网站的恶意用户(攻击者)可以欺骗我的网站将他们的帐户与其他人(受害者)的 GitHub 安装 ID 相关联,我的网站将在 GitHub API 上运行受害者代表攻击者(这很糟糕!)。

现在,我的目标是将此安装 ID 安全地绑定到我网站的用户。所谓安全,我的意思是我的网站不可能授予攻击者对我的应用程序的受害者 GitHub 安装的权限。

使用“安装后设置 URL”中提供的 GitHub 安装 ID 将此安装绑定到我的网站帐户是不安全的,因为我无法验证此安装 ID“属于”我网站的用户,因为知道受害者的有效安装 ID 的攻击者可以伪造 URL。

不完善的缓解措施:

  • 断言安装 ID 未绑定到我网站的任何其他用户帐户

    • 不好,因为如果出于某种原因,合法用户从未使用“安装后设置 URL”将此 GitHub 安装 ID 绑定到他的帐户而被重定向到我的网站,那么它可能会被规避

    • 在任何情况下都不好,这很容易受到确认的“种族”(或时间?)攻击(如果攻击者设法在受害者之前确认有效的安装 ID)

  • 与在 webhook 上收到的 GitHub API 事件事件结合使用

    • webhook 是由 Github 后端触发的,因此无法识别登录的网站用户,这无助于我们将 github 安装 ID 绑定到正确的网站用户。

我是否遗漏了什么,或者这是 App 授权模型的缺陷?

4

1 回答 1

1

找到了答案:

我需要在安装过程中激活“请求用户授权 (OAuth)”。这样,GitHub 会使用一个安全令牌来回答,我可以使用它来验证安装,而不仅仅是安装 ID。

文档:https ://docs.github.com/en/free-pro-team@latest/developers/apps/identifying-and-authorizing-users-for-github-apps#web-application-flow

于 2020-12-04T14:54:59.770 回答