查看原文
其他

接管任意微软账户并获$5万赏金的故事

LAXMAN MUTHIYAH 代码卫士 2022-05-23

 聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队


本文详述了作者如何在微软在线服务中找到可使任何人在无需用户同意的情况下接管任意微软账户。微软安全团队修复该漏洞并通过身份漏洞奖励计划颁发5万美元的赏金。


发现 Instagram 账户接管漏洞后,我开始搜索其它服务中的类似漏洞。结果发现微软使用类似技术重置用户密码,于是我决定测试是否存在速率限制漏洞。

重置微软账户密码时,我们需要在“忘记密码”页面输入自己的邮件地址或电话号码,之后需要选择邮件或电话号码以接收安全码。


收到7位数的安全码后,必须输入以重置密码。如果我们可以暴力破解整个7位数安全码的所有组合(即10的7次方),那么就可以在无需权限的情况下重置任意用户密码。但,显然存在速率限制阻止我们做出如此大规模的尝试。


拦截代码验证端点的 HTTP POST 请求如下:


如上截图,我们所输入的安全码 1234567 并未出现在请求中。它是加密的之后被发送以进行验证。我猜测微软这样做是为了阻止自动化暴力破解工具利用系统。因此,我们无法使用 Burp Intruder 等工具自动化测试多个安全码。


之后不久,我发现了这种加密技术并自动化从加密安全码到发送多个并发请求的整个流程。

初次测试证明了速率限制的存在。在所发送的1000个安全码中,只有122个获得通过,其它都被限制且显示1211出错代码,并且如果我们继续发送请求,则会被阻止发送其它尝试。


接着,我尝试发送同步/并发请求,从而能够发送大量请求而不会被拦截,但我仍然无法在注入7位数安全码的同时获得成功响应。我原以为微软做出了一些控制阻止这类攻击。尽管在发送正确安全码时收到出错信息,但仍然未出现我们在初次测试时遇到的用户遭拦截的情况。所以,我还是寄望于可能会发生点什么。


几天后,我意识到,如果我们同时发出的所有请求未到达服务器,那么IP地址就会被列入黑名单,即使请求之间的几毫秒间隔也可使服务器检测到攻击并拦截。之后我修改了安全码以应对这种场景并进行再次测试。

令人惊讶的是,成功了!这次我可以得到成功的响应了。


我发送了大约1000个7位数安全码,其中包含一个正确的安全码,并能够进行下一步修改密码的操作。

如上流程仅对未启用双因素认证机制的用户有效。如果用户启用了双因素认证,那么我们还必须绕过该机制才能修改密码。

我测试了启用了双因素认证的账户,发现均受此类攻击。刚开始,用户得到提示,需要输入由验证 app 生成的6位数安全码,之后被要求输入邮件或手机收到的7位数安全码。接着即可修改密码。

一言以蔽之,攻击者必须发送6位数和7位数安全码的所有可能组合即大概1100万个请求尝试,且必须并发才能修改任意微软账户(包括启用双因素认证的账户)的密码。

发送规模如此庞大的并发请求并非易事,需要很多计算资源以及数千个 IP 地址才能成功执行该攻击。

我立即记录了所有的绕过视频,并连同详细复现步骤发送给微软。微软快速证实了漏洞存在。该漏洞于2020年11月修复,但几经沟通该漏洞的严重程度才终于被合理地定位为“提权(涉及多因素认证绕过)”漏洞。鉴于该漏洞的复杂性,该漏洞被评级为“重要”而非“严重”。

2021年2月9日,我收到了微软颁发的5万美元赏金 ✌






推荐阅读
我俩也组了个队,找到一个苹果RCE 0day,获 $5 万奖金
KindleDrip:从邮件地址到信用卡盗刷的严重漏洞,值$1.8万奖金
SolarLeaks 出售微软思科等公司源代码等数据,打包价$100万



原文链接

https://thezerohack.com/how-i-might-have-hacked-any-microsoft-account


题图:Pixabay License


本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。



奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

    觉得不错,就点个 “在看” 或 "” 吧~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存