经知道创宇安全研究团队确认,此漏洞是由于开发人员没有正确按照OAuth2授权机制的开发文档使用OAuth2,导致攻击者能够实施跨站请求伪造(CSRF)通过第三方网站来劫持用户在目标网站的账户。
劫持流程:
虚拟测试:
攻击者想通过自己的微博劫持并登录受害人的账户
如上图所示,正常的授权流程,用户点击授权后便不再可控,剩下的工作由第三方应用和授权服务器(资源提供方)进行交互来完成。而攻击者可以阻止授权流程的正常进行,将中间的关键URL截取下来,诱骗用户访问,成功后可以将受害人的账户绑定到攻击者的微博账户上。此后,攻击者可以使用微博的账户自由登入受害人的主站账户及浏览器账户,任意查看和修改用户的隐私数据。
受到OAuth2 CSRF漏洞影响的部分网站列表(测试后):
- 安全厂商:360网站 360浏览器 …
- it媒体:CSDN 中关村在线 …
- 团购:糯米团购 …
- 资讯:果壳 …
- 购物分享:蘑菇街 …
- 电商:聚美优品 …
- 视频:优酷 乐视网 CNTV …
- 招聘:大街 …
- 婚介:百合网 …
- 轻博客:点点 …
- SNS :开心网 …
知道创宇安全研究团队对于OAuth2 CSRF漏洞防御,建议如下:
1)对于开发人员:
1,授权过程中传递state随机哈希值,并在服务端进行判断。
2,在绑定过程中,应强制用户重新输入用户名密码确认绑定,不要直接读取当前用户session进行绑定。
3,限制带有Authorization code参数的请求仅能使用一次(避免重放攻击)
4,推荐使用Authorization Code方式进行授权,而不要使用Implicit Flow方式。这样access token会从授权服务器以响应体的形式返回而不会暴露在客户端。
2)对于普通用户:
定期查看重要网站的第三方帐号绑定页面,检查是否有陌生的其他帐号绑定到自身账户,如果发现应立即取消绑定或授权。
本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/1056144,如需转载请自行联系原作者