漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2012-013414
漏洞标题:xsser.me的跨站漏洞
相关厂商:乌云官方
漏洞作者: p.z
提交时间:2012-10-16 17:31
修复时间:2012-11-04 16:50
公开时间:2012-11-04 16:50
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2012-10-16: 细节已通知厂商并且等待厂商处理中
2012-10-19: 厂商已经确认,细节仅向厂商公开
2012-10-29: 细节向核心白帽子及相关领域专家公开
2012-11-04: 厂商提前公开漏洞,细节向公众公开
简要描述:
xsser.me官方提供的chrome插件存在一漏洞,成功利用后,可以在造成在该插件的chrome区的一个xss,通过继承插件的权限,攻击者可以进行进一步攻击,通过进一步的攻击,可以再chrome下留下一个持久的后门,攻击者可以在用户运行浏览器的时候,在任意标签页执行JS代码,获取任意域下的cookie(包括httponly)等等。
详细说明:
对xsser.crx解压
popup.html
xsser.me提供的api接口虽然对一些特殊字符进行了编码,吧'编码成了',但是在特定的条件下,'还是会被当成'来对待。如下情况:
在本次案例中,cookie被直接带入了onclick="replay(':{url}',':{cookie}')"中,因此可以造成onclick的属性值的js语意截断,执行任意代码。由于发生xss的地方不再是传统的web域,而是在插件处,因此能做的事情也就更多了,关于更多chrome插件安全的科普(http://www.slideshare.net/kkotowicz/advanced-chrome-extension-exploitation)
漏洞证明:
PoC
由于xsser.me的projectId是可以预测的(递增的数字),因此可以写一段JS代码,对所有的project都发送一个我构造好的payload log
可以利用下老外写的xss chef(专门搞chrome插件的xss的框架)
但是我们现在的漏洞还是处于一个不完美的状态,因为每一次利用都需要进行一次点击,用简单的话说,我们要把这个反射型xss变成一个存储型xss。
插件的功能是这样实现的:
加载 -> 获取存储在localStorage中的数据 -> render() -> 隔30s调用load函数 -> load函数去对比xsser.me提供的数据和本地数据,判断是否有新的client
上面的render函数直接把desc_url输出,因此他的安全完全取决于外部传入数据(本次案例是xsser.m提供的数据)的安全,如果我们修改localStorage中的数据,render函数输出的html就可以造成xss。
下面是我们的思路
本次运行时:
用户点击 -> 触发xss -> 劫持load函数,并污染本地的localStorage数据。
由于劫持了load函数,因此不会再去官方拉取最新的数据,避免了将已经污染的本地localStorage数据再还原。
下次运行时,localStorage数据已经是被污染了,render()函数渲染后执行了我们加入的xss payload,xss payload再去劫持load函数,达到rootkit的目的。
修复方案:
1.修复插件中的漏洞。
2.xsser.me的projectID变成随机字符串,不可预测。
版权声明:转载请注明来源 p.z@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2012-10-19 20:12
厂商回复:
非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。
最新状态:
2012-11-04:漏洞已完全修复