现在的位置: 首页 > 综合 > 正文

UCenter的安全漏洞

2011年03月05日 ⁄ 综合 ⁄ 共 817字 ⁄ 字号 评论关闭
今天随便看了下Ucenter和uchome的统一账户机制。感觉设计上面不是很合理.

如果想让某应用a在登录时同时也登录其它挂接到对应ucenter的应用b(入uhome).
那么应该采用synlogin方式.

synlogin方式会让ucenter生成若干条js嵌入脚本.(每个第三方应用对应一条),如下:

<script src="http://host:port/uchome/api/uc.php?code=xxx" />

以uchome为例, uchome/api/uc.php的执行关键过程如下:
1. 从code解编出字段: username, password, uid.
2. 在uchome自身数据库中判断此uid是否存在,如果存在便设置授权cookie.(认为登录成功).

这里头引出了几个问题:

1. 如果用户初次从a站点登录并sync到uchome, 那么uchome自身数据库中是不存在对应账户的,那通过第三方应用登录到uchome的过程会失败.
  除非你显示从uchome登录一次, uchome的登录过程如下:

  1). 从ucenter登录,获取用户信息.

  2). 判断本地数据库是否存在此用户,如不存在则插入用户信息.
关键在第二步, 所以你必须通过uchome的入口才能让新用户插入uchome自身的数据库.

2. 有安全漏洞.

  由于uchome/api/uc.php中的判断只是简单判断uid是否存在, 如果uid存在便认为可以正常登录.
  那么假如我们的账号某次被盗了,只要攻击者记录下那串<script src = "http://host:port/uchome/api/uc.php?code=xxx"/>
  那么后续该用户无论怎么修改密码都无用, 因为uchome的跨应用登录入口api/uc.php根本不检查password,也不与ucenter作通信.
  或者如果你知道了某个uchome应用的UC_KEY, 那么你就可以构造伪造请求来模拟任意用户登录了.

抱歉!评论已关闭.