我正在构建一个围绕我的 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 授权模型的缺陷?