0x00前言
我进入了ChaMd5安全团队并应M姐姐的邀请撰写了这篇技术文章。本文主要介绍我最近的代码审核腾讯的第三方登录SDK包发现的漏洞。阅读本文要求读者加入OAuth2.0。该协议的原理和...

0x00前言
我进入了ChaMd5安全团队并应M姐姐的邀请撰写了这篇技术文章。本文主要介绍我最近的代码审核腾讯的第三方登录SDK包发现的漏洞。阅读本文要求读者加入OAuth2.0。该协议的原理和应用特别熟悉。如果读者不理解这一点,请参考以下链接:
OAuth2.0协议RFC文档:
https://tools.ietf.org/html/rfc6749
QQ开放平台访问说明:
http://wiki.connect.qq.com/oauth2-0%e7%ae%80%e4%bb%8b
这是我在分析OAuth 2.0协议的安全性之前写的一篇文章:
https://www.anquanke.com/post/id/98392
0x01攻击模型分析
我在本文中提到的攻击方法是针对OAuth协议的CSRF攻击。众所周知,许多网站都具有绑定第三方帐户的功能。这种攻击意味着利用网站的这一功能。为了深入分析漏洞,我将首先分析绑定第三方帐户的过程:
第1步:姐姐使用帐户密码登录XX网站。
第2步:姐姐选择绑定QQ帐号。输入凭证信息后,QQ会返回以下格式的链接:
http://xx.com/Index.php?Code=XXX
步骤3:姐妹访问上述链接,服务器接收代码参数并对其进行身份验证以与当前用户绑定。
为了说明这种攻击方法,我从2012年全国网络和信息安全峰会上了解到,创宇的一个大PPT借了一张图片:

这种攻击似乎很复杂。实际上,它非常简单。主要问题出现在上图的第四步中,即攻击者构造链接http://xx.com/Index.php?Code=XXX,其中Code参数绑定。攻击者的QQ帐户被分配到受害者欺骗点击(CSRF)。受害者点击后,他的帐户被绑定到攻击者的QQ帐户,以便攻击者可以通过他的QQ登录受害者的帐户。实现用户劫持!
当然,为了防止这种攻击,腾讯在返回的授权登录链接中添加了一个状态参数,以防止类似的CSRF攻击。当用户请求使用QQ登录时,它会生成绑定到会话的不可预测的字符串状态,并将此参数发送到授权服务器。授权服务器验证用户身份后,将返回以下格式的链接:
http://xx.com/Index.php?Code=XXX&state=XXX
收到此链接后,xx.com将首先检查当前会话中的状态参数是否与接收到的链接中的状态参数匹配。如果匹配,则执行下一步。在这种情况下,即使攻击者向Victim发送自己的授权链接,攻击者的帐户也无法绑定,因为状态验证失败。攻击者无法预测受害者会话中的状态参数,因此无法构建恶意链接。 CSRF攻击)。
0x02漏洞分析
在了解了攻击原理的更多内容之后,让我们来看看QQ登录的官方SDK文件。
这里我们不说废话,直接找到核心类文件Oauth.class.php

在此类文件中,qq_login方法用于在第一步生成状态参数并跳转到QQ授权登录界面。您可以看到在第36行生成了state参数,然后调用了记录器类的write方法来写入会话。进入录音机类继续分析:

write方法定位为32行,将传递的值写入self: $ data。当您看到26行时,自身: $数据被初始化为构造函数中的空数组。

在最后的析构函数中,自我: $数据存储在会话中,这里似乎没有大问题,继续向下分析,我们在Oauth.class.php中找到qq_callback方法:

qq_callback方法用于验证状态参数,并使用传递的代码参数来获取access_token。我们主要关注状态参数的验证阶段。在第57行,我们看到有一个if条件来确定当前会话中的状态参数($ state)和链接。传递的状态参数($ _GET ['state'])是否匹配,如果不匹配,则直接调用showError方法die:

但问题出在这里!我们之前已经分析过在qq_login方法中生成了state参数,但是如果Victim没有调用这个方法,那么构造函数会将self: $ data初始化为一个空数组,然后查看记录器类中的read方法:

如果self: $ data为null,则返回null,因此存在一个非常明显的逻辑缺陷,只要攻击者将恶意链接的状态参数留空,则$ _GET ['state']为null,$ state同样为null,如果($ _ GET ['state']!=$ state)为false,那么你可以完美地逃避CSRF检测,呵呵!
0x03后记
这个漏洞从确认到修复只用了三个小时,而腾讯SRC的响应速度也非常惊人。

在最新版本的SDK文件中,在验证状态时,首先会确定状态参数是否保存在当前会话中,即当前用户是否已调用qq_login方法,以便类似的CSRF攻击可以成功预防:

本文转载自: ChaMd5安全团队 作者:留下兄弟
如果转载,请注明出处: http://mp.weixin.qq.com/s/fiTejXSF5Mlm-a0KqvWCQw
黑客业务列表介绍和一般分类:
类别:攻击入侵破解开发
1:攻击业务订单:暂时取消所有此类业务订单[仅销售常规IDC流量]
2:入侵业务清单:包括网站源代码,办公系统,黑色系统,教育系统等。
3:破解业务类:软件,加密文件,二次打包,脱壳等。
4:二次开发业务清单:软件二次开发,源代码二次开发等
5:其他业务订单:特洛伊木马[通过所有防病毒],远程控制,特殊软件等
备注:未提及的业务订单可根据主要类别查询或直接联系客户服务。为避免浪费双方时间,请在咨询前阅读:业务交易流程及相关说明
注意:仅接受正式业务,个人无权接受。收集此内容。