我在公司的SSO中使用了identityserver3的OAuth2.0,我无法理解state参数如何阻止CSRF.
我已将攻击流程复制如下:
1.Mallory访问某个客户的网站,并开始授权该客户使用OAuth访问某个服务提供商的过程
2.客户要求服务提供商允许代表Mallory请求访问权限
3.Mallory被重定向到服务提供商的网站,在那里她通常会输入她的用户名/密码以授权访问
4.相反,Mallory陷阱/阻止此请求并保存其URL(Callback Url)
5.现在,Mallory以某种方式让Alice访问该URL.如果Alice使用自己的帐户登录服务提供商,则其凭据将用于颁发授权码
6.授权代码被交换为访问令牌
7.现在,Mallory在客户端的帐户有权访问服务提供商处的Alice帐户
我可以理解第1步到第4步.但是从第5步开始,我有些困惑.根据我的理解,在步骤5中,Alice在登录时访问回调URL,然后服务器只使用授权码访问OAuth服务提供商以在后端获取openid和访问令牌,然后Alice的浏览器只是使用Mallory的帐户和访问令牌执行登录.与Mallory的浏览器有什么关系?你能详细解释一下吗?感谢您花时间阅读我的话!
ian*_*man 43
我认为第3步和第4步并不完全正确.我编辑了你的例子来展示我认为攻击是如何运作的.
1.Mallory访问一些客户的网站(例如https://brilliantphotos.com)并启动授权该客户端使用OAuth访问某些服务提供商的过程(例如Acebook - 由于brilliantphotos.com允许其用户将图片发布到他们的Acebook页面)
2.brilliantphotos.com将Mallory的浏览器重定向到Acebook的授权服务器,请求在auth完成后重定向回自身.
3.Mallory被重定向到授权服务器,在那里她输入她的Acebook用户名/密码以授权访问.
4.成功登录后,Mallory陷阱/阻止后续重定向请求并保存其URL(Callback Url,其中包含与Mallory相关的身份验证代码),例如
https://brilliantphotos.com/exchangecodefortoken?code=malloryscode
5.现在,Mallory以某种方式让Alice访问该URL(可能是论坛帖子上的链接......)请注意,Alice可能已经使用自己的帐户登录到brilliantphotos.com.
6.Alice点击链接到brilliantphotos.com,授权代码交换访问令牌(访问顽皮的Mallory帐户).如果Alice已登录,那么brilliantphotos.com可以将Alice的帐户与新创建的访问令牌联系起来.
7.如果Alice继续使用brilliantphotos.com网站,客户可能会无意中将图片发布到服务提供商(Acebook)上的Mallory帐户.
如果一个状态参数由brilliantphotos.com维护,那么Mallory的状态代码将绑定到她的浏览器而不是Alice的.因此,当Alice点击恶意URL时,brilliantphotos.com将无法将状态代码与Alice的浏览器会话相关联.
除了iandayman 已经很好的答案之外,您还可以从这篇博文中获得一些灵感,或者至少您可以看一下它的插图。

PS:感谢原始博客作者。
| 归档时间: |
|
| 查看次数: |
6286 次 |
| 最近记录: |