SingleStore双重认证绕过漏洞分析
漏洞概述
攻击者仅需知道受害者的账户邮箱地址和密码,即可完全绕过双重认证(2FA)机制,成功入侵受害者账户。
复现步骤
第一步:登录尝试
在 https://portal.singlestore.com/ 输入受害者的账户邮箱地址和密码,点击登录。
第二步:拦截请求
- 进行虚假的2FA代码尝试
- 在Burp中拦截请求但不发送,保持拦截状态开启
第三步:暴力破解攻击
- 将捕获的请求发送到Intruder工具
- 勾选mfaToken参数旁边的代码
- 设置Payload类型为Number
- 如果发送到邮箱的2FA代码是156289,则输入155900到1556300之间的值(避免暴力破解耗时过长)
- 点击开始攻击按钮
第四步:观察响应
- 攻击结束时观察状态码从303变为302
- 由于2FA机制实现存在缺陷,第3次错误尝试后,HTTP状态码从200变为302,返回登录流程开始
- 但仍可通过Burp继续尝试请求
- 当进行正确的2FA尝试时(包括后续尝试),状态码切换为302,浏览器中成功登录账户
CVSS评分
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/CR:H/IR:H/AR:H
影响
此漏洞使得攻击者能够完全绕过为保护受害者登录账户而开发的2FA机制。
技术细节
攻击原理
- 输入2FA代码时,前3个请求返回200 HTTP状态码(代码错误)
- 如果在前3次尝试中输入正确代码,将在输入正确代码的请求中收到302 HTTP状态码
- 攻击者在浏览器中输入3次错误代码后,第3次尝试会以303 HTTP状态码返回登录流程开始
- 但在Burp中捕获2FA代码后,每个错误尝试仍会收到303,而第一次正确尝试及所有后续尝试都会收到302
确定正确代码
- 需要查看收到的第一个302请求
- 在PoC.webm中,第142个请求收到第一个302状态码,找到正确的2FA代码
- 攻击者无需知道正确的2FA代码,在收到第一个302 HTTP状态码请求后(即在后台输入正确2FA代码后),刷新2FA代码输入页面即可登录账户
补充测试
攻击限制
- 如果在尝试进入账户时关闭’intercept on’,攻击中的后续请求返回500 HTTP状态码
- 即使尝试正确代码,收到500 HTTP状态码响应时也无法成功进入账户
无限制攻击
- 在攻击期间保持’intercept on’开启,不会出现错误
- 无速率限制或WAF防护,可无限次尝试2FA代码
- 可通过暴力破解绕过2FA机制登录账户
扩展影响
同样的漏洞也存在于基于身份验证应用程序的2FA机制中:
- 正确代码每30秒更改一次
- 攻击者能够无限制尝试代码,增加了攻击成功率
修复状态
该漏洞已被修复:
- 3次错误登录尝试后,服务器不再接受有效请求
- 显示警告"could not load auth request by id"
- 重测确认漏洞已无法复现