来Track安全社区投稿~
千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
在最近的一个项目中,我遇到了一个有趣的小问题,该问题允许通过固定会话标识符并强制受害者的浏览器启动单点登录 (SSO) 流程的第一步来实现一键式帐户接管。由于缺乏反 CSRF 令牌验证,因此可能存在此漏洞。
登录页面
登录页面展示了“使用SSO登录”功能:
研究 SSO 流程
在研究 SSO 流程后,我发现了以下步骤顺序:
1.单击按钮启动 SSO 流程: 向 /idp/auth/mid-oidc?req=[UNIQUE_ID]&redirect_uri=[REDIRECT_URI] 发出GET请求
2.SSO 服务提供商流程 在服务提供商域上发出多个请求,类似于登录 Google,其中请求被发送到 google.com。如果用户之前已登录,则会自动执行操作。
3.点击回调 URL 服务提供商端授权后,会向回调 URL 发出请求: GET /idp/callback?code=[STUFF]&state=[STUFF]。 然而,这不是返回会话令牌的最后一步,还需要一个额外的步骤。
4.发出会话令牌 请求获取会话令牌。 获取 /idp/approval?req=[UNIQUE_ID] UNIQUE_ID值与第一步中的值相同。这意味着,如果您知道这个值,您可以点击此方法并获得会话。由于不存在csrf 保护,因此可以执行会话固定。
漏洞利用场景
“攻击者”在其计算机上打开 URL 并提取“使用 SSO 登录”按钮链接:
攻击者从复制的链接中提取“req”参数并启动漏洞利用:
然后,攻击者将包含“req”参数的链接发送给“受害者”。
在浏览器中打开链接后,“受害者”遇到一条错误消息:
该漏洞是如何发挥作用的?
攻击者执行的恶意脚本利用10个线程向/idp/approval?req={req}发出多个请求。
最初,服务器对这些请求的响应是500错误。但是,当受害者启动 SSO 流时,但在处理对“approval”URL 的请求之前,对上述端点的所有后续请求都会返回带有会话令牌的有效链接。
利用该漏洞,“攻击者”获取会话 URL 并可以完成登录流程,有效地以“受害者”身份登录:
通过直接访问返回的 URL,攻击者完成登录流程并以“受害者”身份登录。
修复/防御措施
2.在 SSO 流程的每个步骤中验证会话标识符以防止固定。
3.在 /idp/approval 端点上应用速率限制,以防止对会话令牌的快速和未经授权的请求。
以上内容由白帽子左一翻译并整理。原文:https://infosecwriteups.com/forced-sso-session-fixation-5d3b457b79cb
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):漏洞挖掘 | 强制 SSO 会话固定
评论