如何安全地将 Github 应用程序安装 ID 与集成了 GitHub 应用程序的网站帐户相关联?
How to securely associate a Github App Install ID with the account of a website integrating with the GitHub App?
我正在构建一个围绕我的 GitHub 应用程序集成的网站。
该网站有自己的用户(来自 Google oAuth),他们可以通过安装我的 GitHub 应用程序将他们的帐户连接到他们的 GitHub 帐户。
GitHub 应用程序安装过程中有些东西我无法理解:
用户在 GitHub 上安装我的应用后:
他们的浏览器被重定向到 URL(“Post 安装安装程序 URL”),安装 ID 在 URL 中。
GitHub 调用我的 webhook 来声明安装
安装 ID 是一个明智的信息,就好像我网站的恶意用户(攻击者)可以诱骗我的网站将他们的帐户与其他人(受害者)的 GitHub 安装 ID 相关联一样,我的网站将代表攻击者在受害者的 GitHub API 上运行(这很糟糕!)。
现在,我的目标是将此安装 ID 安全地绑定到我网站的用户。 安全是指我的网站不可能授予攻击者权限在受害者 GitHub 安装我的应用程序时。
使用“Post 安装设置 URL”中提供的 GitHub 安装 ID 将此安装绑定到我网站的帐户是不安全的,因为我无法验证此安装 ID“属于”我网站的用户,因为知道受害者有效安装 ID 的攻击者可以伪造 URL。
不完美的缓解措施:
断言安装 ID 未绑定到我网站的任何其他用户帐户
不好,因为如果出于某种原因从未使用“Post 安装设置 URL”将合法用户重定向到我的网站以绑定此 GitHub 将 ID 安装到他的帐户
在任何情况下都不好,这很容易受到“竞争”(或计时?)确认攻击(如果攻击者设法在受害者之前确认有效的安装 ID)
结合使用 GitHub API 网络钩子上收到的事件事件
- webhook 由Github 后端触发,因此无法识别登录的网站用户,这无助于我们将github 安装ID 绑定到正确的网站用户。
我是不是遗漏了什么,或者这是 App 授权模型的缺陷?
找到答案:
我需要激活“安装期间请求用户授权 (OAuth)”。这样,GitHub 使用安全令牌进行回答,我可以使用它来验证安装,而不仅仅是安装 ID。
我正在构建一个围绕我的 GitHub 应用程序集成的网站。
该网站有自己的用户(来自 Google oAuth),他们可以通过安装我的 GitHub 应用程序将他们的帐户连接到他们的 GitHub 帐户。
GitHub 应用程序安装过程中有些东西我无法理解:
用户在 GitHub 上安装我的应用后:
他们的浏览器被重定向到 URL(“Post 安装安装程序 URL”),安装 ID 在 URL 中。
GitHub 调用我的 webhook 来声明安装
安装 ID 是一个明智的信息,就好像我网站的恶意用户(攻击者)可以诱骗我的网站将他们的帐户与其他人(受害者)的 GitHub 安装 ID 相关联一样,我的网站将代表攻击者在受害者的 GitHub API 上运行(这很糟糕!)。
现在,我的目标是将此安装 ID 安全地绑定到我网站的用户。 安全是指我的网站不可能授予攻击者权限在受害者 GitHub 安装我的应用程序时。
使用“Post 安装设置 URL”中提供的 GitHub 安装 ID 将此安装绑定到我网站的帐户是不安全的,因为我无法验证此安装 ID“属于”我网站的用户,因为知道受害者有效安装 ID 的攻击者可以伪造 URL。
不完美的缓解措施:
断言安装 ID 未绑定到我网站的任何其他用户帐户
不好,因为如果出于某种原因从未使用“Post 安装设置 URL”将合法用户重定向到我的网站以绑定此 GitHub 将 ID 安装到他的帐户
在任何情况下都不好,这很容易受到“竞争”(或计时?)确认攻击(如果攻击者设法在受害者之前确认有效的安装 ID)
结合使用 GitHub API 网络钩子上收到的事件事件
- webhook 由Github 后端触发,因此无法识别登录的网站用户,这无助于我们将github 安装ID 绑定到正确的网站用户。
我是不是遗漏了什么,或者这是 App 授权模型的缺陷?
找到答案:
我需要激活“安装期间请求用户授权 (OAuth)”。这样,GitHub 使用安全令牌进行回答,我可以使用它来验证安装,而不仅仅是安装 ID。