如何利用2FA实现无密码控制他人帐户(影响Google, Microsoft, Instagram, Cloudflare)
大家好,这篇文章我将描述一个通过滥用2FA(双因素验证)实现无密码登录的漏洞,涉及Google, Microsoft, Instagram, Cloudflare等国际公司。
这是最初我在谷歌发现的一个逻辑漏洞,然后在其他顶级国际公司(如微软、Instagram、CloudFlare等)的网站上也进行了测试,确定它们也受到该漏洞影响。
1)初始
这一切都是从我脑海中某个想法开始的:2FA往往比其他登录验证流程更加复杂,变动频率更高,因为它很可能在不同的时间由不同的团队实现的(在某些情况下,相隔可能几年)。
而任何涉及多个团队的项目都会存在沟通障碍,团队之间往往不可能完美配合,这就有可能产生漏洞。
那么……如果在登录过程中尝试更改密码,会发生什么情况?具体来说就是在2FA验证过程中更改帐户密码会发生什么事?
从上图可以看出,我在谷歌的2FA验证最后一步停下来,然后另外打开窗口更改了登录密码,再等待了10-15分钟,输入2FA代码,点击下一步。
哦!这种情况下居然登录成功!
发现了这个漏洞后,我立刻把它报告给谷歌。在交换一些意见后,他们认可了这个漏洞,并告诉我其实2FA的session会在20分钟后失效,并表示:
“如果你能找到一种方法让这次攻击在两个小时以后仍然成功,请通知我们。因为这可能是另一个大漏洞。”
2)第二轮
经过几个星期的缓慢测试,我终于发现了一种解决session过期的手段(一开始我认为这其实也没啥用):如果你在2FA的验证码输入页面选择“尝试另一种方法”,并且选择其他2FA方法,那么你的session过期时间就会回到20分钟。经过脚本测试,在等待了2个多小时后,验证页码的session仍然有效。
但这还不是我唯一的发现。当我在探索有哪些设置会影响session的过期时间时,一不小心把2FA功能给关闭了,此时我往2FA验证码输入页面再次输入了验证码,并点击了确定。此时,2FA功能已关,页面应该会返回一个错误响应吧?但是我发现,在我点击了Next后,我成功登录了帐户!
这个发现可比上一个厉害太多!!!这改变了一切,可以应用的攻击场景也大大增加。
这意味着,如果攻击者劫持了一个帐户(例如利用每天都会发生数据泄漏),再结合此漏洞,可对受害者帐户进行长期控制:
攻击者先启用受害者帐户中的2FA。
在另一个浏览器中,攻击者进入2FA验证码输入页面无限期停留。
攻击者禁用2FA。
受害者重新获得对帐户的访问权(通过更改密码,重置session等手段)
最后,即使受害者更改了帐户密码,攻击者仍然可以通过输入一个有效的2FA验证码再次控制该帐户,而且此时攻击者完全不知道帐户密码。
我很快把这个新漏洞发送到谷歌,并最终得到了确认:
几周后,谷歌安全专家给了我一笔丰厚的奖金。
3)其他公司?
领到赏金几天后,我想,“谷歌都有这样的漏洞,那其他公司呢?”'.
于是我分别对其他国际公司(Facebook、Github、LinkedIn)进行了测试,暂时未发现这个漏洞,这些公司2FA验证码输入页面的session一段时间后一定会过期。
但是,我在Instagram复现成功!不幸的是,他们将其称为“理论上存在的攻击”。微软也存在这个问题,但一直没修复(稍后将详细介绍)。
经过一些尝试,我最终到Hackerone和Bugcrowd上寻找目标,发现许多公司都存在这种漏洞(Cloudflare、Algolia、一些私有应用等)。在我报告后它们也都修复了漏洞,并给了我奖金。
4)不修复
最后,我想提两个大型公司,它们认为这个漏洞“不现实”:微软和Instagram。
4.1)微软
微软作为全球最好的公司之一,也发布了它们的漏洞悬赏计划(最高10万奖金),自然而然,我也检查了他们的登录域名login.live.com
,最后发现了一模一样的漏洞!
但可悲的是,我的漏洞报告似乎没有受到重视,最终以“理论上可能”结束了流程。
过了一段时间,我通过LinkedIn与微软安全部门的人进行联系,希望他们重新审查这个漏洞,并给他们发送了关于这个漏洞的博客文章和2个PoC视频。
而他们的回答是:“如果你在帐户注销24小时后仍能攻击成功,我们可能就会认可。”我于是又发送了一个PoC视频,但他们仍然不接受这个漏洞。
当我问到是否可以公开这些信息时,他们同意了。
这一切开始于2017年6月,截止到今天,这个漏洞仍存在微软的登录页面中。
4.2)Instagram
我在Instagram中确认漏洞存在的第一时间,就制作了一份详细的报告发送它们的安全部门。
但是,他们似乎也不太重视:
“这类[攻击]似乎不太可能经常发生,这更像是一种理论攻击。而且攻击者也窃取不到用户密码。”
这种攻击的成功概率是不高,但是,基于Instagram的用户数量,很有可能会有受害者。
几个月后,我再次报告了这个漏洞,他们却告诉我,我不是第一个报告这个漏洞的人。所以,即使有一天他们认可了这个漏洞,我也得不到奖金。
本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://medium.com/@lukeberner/how-i-abused-2fa-to-maintain-persistence-after-a-password-change-google-microsoft-instagram-7e3f455b71a1
最新评论