漏洞概要
关注数(24)
关注此漏洞
漏洞标题:淘宝埋雷式XSS第四集可在第三方网站窃取用户帐号密码
提交时间:2014-06-12 09:05
修复时间:2014-08-11 09:06
公开时间:2014-08-11 09:06
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2014-06-12: 该漏洞正等待厂商内部评估
2014-06-12: 厂商已经确认,与白帽子共同解决该漏洞中,漏洞信息仅向厂商公开
2014-07-02: 细节向核心白帽子及相关领域专家公开
2014-07-12: 细节向普通白帽子公开
2014-07-22: 细节向实习白帽子公开
2014-08-11: 细节向公众公开
简要描述:
我很喜欢你们这样,每次都把洞开在同一个地方。
详细说明:
#简单描述:
该漏洞依然是利用JSocket.swf的本地存储形成永久性XSS,利用eval实现攻击。
之前gainover报告过三次相同位置的类似的漏洞,最后一次详见: WooYun: 一个可大规模悄无声息窃取淘宝/支付宝账号与密码的漏洞 -(埋雷式攻击附带视频演示) 。
与之前三次有所区别的是,此次不是flash代码漏洞,而是js代码缺陷。
*但归根结底是eval的问题。
#漏洞详细
打开淘宝登陆页面,在Console里执行代码:
结果为:
该内容已经被加密。
之前只是修复flash里getlso的实现,将过滤特殊字符(new RegExp("[\\\\({]"))。猜测即使内容有特殊字符,也会被加密,应该也可以正常读取。之后分析代码证实了这个猜测。
找到资源文件ua.js。该文件采用未知混淆技术,使得可读性降低。摘抄部分代码:
混淆会抹去很多痕迹,比如getlso和setlso在反混淆之前是找不到的。自己用正则写个简单反混淆程序,反混淆后的部分代码为:
可以看在setlso之前是做过简单加密的,而且在getlso后有相应的解密代码。简单修改一下以上代码,在Console里执行:
可以看到Console里log了一个true。
再来看代码:
*用了eval解析解密后的数据。
到此我们知道了缺陷所在,接下来写利用代码,如下:
当你访问了被植入以上恶意代码的网站时,你并没有感到任何异常。
之后某天你打开淘宝,输入用户名密码,你的帐号便被悄然发送给了黑客。
漏洞证明:
#模拟攻击
这里有一个模拟攻击的页面,效果如下:
点击链接查看实际运行效果:http://jsfiddle.net/FaEP8/ (不会泄漏你的用户名密码,请放心点击)(没有测试浏览器兼容,不保证在IE下正确运行,推荐使用Chrome打开)
修复方案:
1. 替换掉eval,如果存入数据是json数据,可以用JSON.parse()(某些浏览器需要引入JSON2.js)。如果数据比较复杂,包含可执行方法,那就是设计问题,建议将逻辑抽象后用json或者xml存储。
2. 建议程序员反思自己为何在同一个地方跌倒4次。
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2014-06-12 10:21
厂商回复:
感谢您对我们的关注和支持,该漏洞我们正在修复!
最新状态:
暂无