OAuth2场景下用户能否将自身OAuth登录链接发送给他人以获取对方数据?
场景可行性结论
你描述的攻击是完全可以实现的,这类漏洞在行业内被称为OAuth 授权会话混淆漏洞,是OAuth集成场景下非常常见的通用风险。
攻击成立的核心原因
- OAuth2 核心规范仅要求授权服务器(也就是你提到的网站B)对重定向URI做白名单校验,确实没有强制要求第三方客户端(网站A)对回调请求做上下文校验,不少开发团队集成OAuth时会忽略这个环节的校验,直接给了攻击可乘之机。
- 用户1生成的专属OAuth登录链接本质上已经绑定了用户1在网站A的会话上下文,用户2点击这个链接完成网站B的账号授权后,网站B返回的授权码会被网站A直接关联到生成该链接的用户1的账号上,网站A用授权码换出用户2的access token、拉取到用户2的数据后,自然就会展示给用户1。
标准修复方案
只需要严格遵循OAuth2推荐的state参数使用规则即可完全规避该风险:
- 给每个用户生成OAuth授权链接时,同步生成一个随机、不可预测、长度足够的
state值,将该值和当前用户的会话绑定存储在网站A的服务端 - 接收到网站B的回调请求时,第一步先校验回调请求携带的
state参数是否和当前发起回调请求的用户的会话中存储的state值完全匹配,只要不匹配就直接终止整个授权流程,不做后续的授权码换token操作
这个逻辑下,用户1把自己的授权链接发给用户2后,用户2的网站A会话里根本没有对应用户1生成的state值,回调校验会直接失败,攻击完全无法生效。
内容的提问来源于stack exchange,提问作者Nibbler Neymar
相关产品推荐
相关产品推荐

