第三方账号登陆的过程及由此引发的血案

72agency 2014-03-19 10:40:00

0x00 前言


第三方账号登陆也就是当你没有A网站的注册账号时,你可以使用该与A网站合作的第三方账号登陆A,在大多数情况下你会立即拥有与你第三方账号绑定的A网站会员,然后执行A网站的会员操作。这种场景常见于登陆团购、酒店住宿等网站,当人们没有该网站账号时,不少人会毫不犹豫地选择使用qq等登陆。以下的第三方账号就以qq为例吧

0x01 第三方登陆的过程


第三方账号登陆骨子里就是单点登录SSO的概念,现在添加了很多商业因素。当你使用了第三方账号登陆了,目标站点可以通过第三方账号确定你的身份,你与目标站点的信任关系就建立起来了。SS0的流行让“一个账号游遍互联网”成为了可能。

SSO的优点在于风险集中化,对用户来说不用记那么多的账号密码了,对一些中小网站来说可以专心于业务上而减小账号管理成本。SSO的缺电也很明显,因为风险集中了,所以如果单点一旦被攻破,影响的业务就会涉及所有使用单点登录的系统。为此有些敏感操作如付款等会要求用户输入独立口令或者通过短信验证用户身份等。

腾讯qq的授权登陆过程大致如下:

在这里很重要的一点是认证的过程是在qq的控制下完成了。授权通过后,用户还可以设置允许网络应用程序访问自己qq账号的那些数据以及是否可以发布状态等权限。(用户只能在qq授权规则范围内再次选择授权)

OAuth协议为用户资源的授权提供了一个安全的、开放而又简易的标准。现在已经发展到2.0版,具体内容大家可百度之。

0x02 由此引发的血案


风险1:针对目标网络应用程序而言,从第三方账号获取的数据构成了一种输入,而输入一般是需要进行过滤的,否则会引发XSS。

乌云上有这么一个漏洞WooYun: 拉手网任意订单密码以及用户信息存在泄漏风险(xss盲打后台)

拉手网获取qq昵称后直接输出到拉手网页面了,而且腾讯允许qq昵称带有特殊字符如等,然后使用qq账号登陆拉手网,其在拉手网的昵称就存在一个xss。该漏洞中作者通过评论反馈盲打了后台并成功登陆。

直到今天拉手网的这个qq昵称问题仍然存在,只是已经不能盲打后台了,估计在之后的页面输出时做了过滤。类似的使用qq账户登录58团、糯米团等,大家有兴趣还可以检测更多的网站。

风险2:授权后的站点在第三方账号站点发布的数据也构成了一种输入,这种输入存在两个问题:第一个问题本质上还是上面的过滤问题,见乌云漏洞WooYun: 博客园的分享接口存在xss漏洞(广大程序猿们要注意啊)发布文章到博客园形成xss;第二个问题就是有些无良站点,在用户授权登陆后往用户账号发布令人反感的信息,一些小白用户甚至都不明白怎么回事。

0x03 一点想法


任何时候都不要忘记一个原则:来自用户的输入都是不安全的,堵住了传统的发布渠道时不要忘了所谓的合作账户数据也是一种输入。

尽管有些网站开发者意识到了要过滤第三方账户的数据,但是开发人员良莠不齐,而且策略也很紊乱。例如:有些地方过滤有些地方不过滤(拉手就是这种情况,总觉得以后还会出问题),还有的甚至根本就不过滤。建议开发者在用户一次授权登陆后获取第三方数据并过滤,之后在用户此次登陆过程中就使用这份过滤后版本的数据。

评论

瞌睡龙 2014-03-19 10:42:55

Oauth授权之后应该注意的点!~

心伤的胖子 2014-03-19 12:03:42

这个略。。。

心伤的胖子 2014-03-19 12:20:26

还是忍不住要来说两句,就这篇文章我觉得内容没有紧扣标题,标题为“第三方账号登陆的过程及由此引发的血案”,文章前半部分是概念性的东西,倒还和“第三方帐号登录过程”有些关系,后半部分小笔一抖举了两个案例,其中一个变成了“第三方帐号授权”后需要注意的安全点,另外一个和第三方帐号我觉得没有太多关系,最后的结论变成了“一切的输入都是有害的”。
还有就是我觉得作者可能对“第三方帐号登录过程”这个没有太深入的理解,如果能够看看乌云上更多这方面的案例以及互联网上关于这类的安全文章之后再写我觉得会有不一样的内容出来。
以上仅代表个人观点,欢迎拍砖。

X

xsser 2014-03-19 13:04:41

作者的意思其实是这样,允许第三方登陆,然后应用不可避免的要对第三方登陆传递过来的信息做处理,但是这部分往往是绕过了自己的各种安全限制的,最后导致的一些问题;

C

Creturn 2014-03-19 14:35:57

好文! 自己写的东西确实也把这块忽略掉了。

J

jaffer 2014-03-19 14:39:34

作为第三方登录,代表的是信任了第三方。作者说的这个问题,我觉得应该是第三方的问题。第三方的用户名昵称等有特殊字符,应该第三方就进行处理。比如,QQ,你要让别人信任,就应该限制昵称中的特殊字符串,保证授权之后登陆其他网站的安全。

路人甲 2014-03-19 14:53:00

路人甲,在乌云站内跟你打招呼了,请发一下联系方式好么,有事想请教~~

瞌睡龙 2014-03-19 16:36:53

路人甲是一个匿名账户,小伙伴还没来注册,注册成功后才会显示他的昵称,那时候主站才可以联系上哦~

路人甲 2014-03-19 16:40:47

路人甲,哈哈哈,他不是一个人在战斗。。

7

72agency 2014-03-19 17:02:11

你好,注意到这个问题了,重点是后面第三方账号传入的数据被很多站点默认可信了。前面的内容是想普及下第三方登陆的知识。哈哈,第一次发文,有些考虑不周,谢谢提醒

7

72agency 2014-03-19 17:03:13

是的,发现很多站点忽视了这个问题

7

72agency 2014-03-19 17:05:12

这个责任问题不好评判,毕竟对qq而言它可能有自己用户体验的考虑等。同时作为数据的请求方,你接收了对方的数据你就应该对怎么使用这些数据负责,而不能把责任推给数据提供者。

路人甲 2014-03-21 14:46:34

谢谢哈~ 请问你是乌云的咩

路人X 2014-03-24 20:57:01

能否搭个钓鱼网站伪装接入了OAuth然后让用户登录骗取密码?

路人甲 2015-11-16 00:13:33

  厕所有个水龙头漏电,本来贴了一张纸:“带电,禁止触摸!”
  我拿验电笔一试,果然带电。
  回到办公室、打印了一张:“你能尿到这里么?我能!”
  下午开始听见惨叫,第二天惨叫依旧。
=== 不错,留个记号,方便下次... ===
http://www.jfox.info/my

路人甲 2015-12-29 15:41:29

@apsspfci 制造个机会我也试试!

7

72agency

关注web安全,加油

twitter weibo github wechat

随机分类

Java安全 文章:34 篇
SQL注入 文章:39 篇
iOS安全 文章:36 篇
PHP安全 文章:45 篇
Python安全 文章:13 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

H

HHHeey

好的,谢谢师傅的解答

Article_kelp

a类中的变量secret_class_var = "secret"是在merge

H

HHHeey

secret_var = 1 def test(): pass

目录