当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-018982

漏洞标题:新浪微博登录逻辑漏洞导致密码hash成为明文密码

相关厂商:新浪微博

漏洞作者: 刘海阳

提交时间:2013-02-21 11:18

修复时间:2013-02-26 11:19

公开时间:2013-02-26 11:19

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:6

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-02-21: 细节已通知厂商并且等待厂商处理中
2013-02-26: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

微博的登录没有通过https,采用js本地加密的方法,该方法导致后台的password sha1 hash成为明文密码

详细说明:

研究了下微博登陆:
1,没用https,
2,用如下算法加密:SHA1(SHA1(SHA1(password))+servertime+nonc),
3,servertime和nonc由prelogin.php从服务端颁发。
微博采用这样方式的动机应该是:
1,http性能好又方便,https部署麻烦,支持多终端不方便。所以选择http作为认证协议。
2,基于#1的决策,为了防止网络嗅探用户被盗用密码,所以在js中 SHA1(password),一层不放心,做两层:SHA1(SHA1(password))
3,为了防止用户弱口令,加上salt
4,为了防止暴力破解,采用salt服务器端颁发的方式
基于#1,2,3,4的逻辑链,产生了现在的登录流程和密码加密算法。
这样做的隐患是:
基于现在的逻辑,微博后端user表中的password只能存储SHA1(password)或者SHA1(SHA1(password)),或者存储明文密码
这时会导致hash算法f(x)后的digest等效为明文(就像等式两端用相同的f(x)运算后,等式恒等)
所以,万一被拖库:
黑客拿到数据库中的password digest,不需要费力查彩虹表就能登陆,而且是100%成功
不需要枚举破解,这也使得动机#4失效,
password hash的原始目的是让password hash digest泄漏出去也不可用,现在的登录逻辑有违于此。

漏洞证明:

下图为微博前端js中的password加密部分

6aed536dgw1e20dcq66w0j.jpg

修复方案:

1,启用https,必须的。
2,取消js加密算法

版权声明:转载请注明来源 刘海阳@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2013-02-26 11:19

厂商回复:

最新状态:

暂无