net*_*sto 9 authorization github github-api github-app
我正在构建一个围绕我的 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 Event 事件结合使用
我是否遗漏了什么,或者这是应用程序授权模型的缺陷?
找到了答案:
我需要激活“安装期间请求用户授权(OAuth)”。这样,GitHub 就会使用一个安全令牌进行应答,我可以用它来验证安装,而不仅仅是安装 ID。
归档时间: |
|
查看次数: |
1259 次 |
最近记录: |