漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
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泄漏出去也不可用,现在的登录逻辑有违于此。
漏洞证明:
修复方案:
1,启用https,必须的。
2,取消js加密算法
版权声明:转载请注明来源 刘海阳@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2013-02-26 11:19
厂商回复:
最新状态:
暂无