XSS уразливості в 8 мільйонах флеш файлах

22:40 18.12.2009

Продовжу тему, яку я підняв в 2008 році в своїй статті XSS уразливості в 215000 флеш файлах. Тоді я виявив сотні тисяч флешек уразливих до Cross-Site Scripting атак. Після попередньої статті, опублікованої 12.11.2008, я продовжив дослідження і виявив, що набагато більше флешек - мільйони флеш файлів - вразливі до XSS атак. Як флешек у різних глобальних і локальних банерних системах, так і флешек на окремих сайтах.

Уразливий ActionScript код.

Як я вже зазначав в попередній статті, уразливість в наступному AS коді. Причому як з вказанням другого параметра в фунції getURL (target), так і без нього:

getURL(_root.clickTAG, "_blank");

Але, як показали мої дослідження, в різніх флешках (на різних сайтах та банерних системах) використовується різні параметри для передачі адреси сайта у флешку. Окрім clickTAG також використовуються url та інші параметри.

getURL(_root.url, "_blank");

Атака відбувається через передачу XSS коду flash файлу в clickTAG, url чи іншому параметрі:

http://site/flash.swf?clickTAG=javascript:alert('XSS')

http://site/flash.swf?url=javascript:alert('XSS')

Також існують флешки, що використовують два параметри, зокрема clickTAG і TargetAS, з наступним AS кодом:

getURL(_root.clickTAG, _root.TargetAS);

Атака відбувається з використанням параметрів clickTAG і TargetAS:

http://site/flash.swf?clickTAG=javascript:alert('XSS')&TargetAS=

При кліку на флешку відбувається передача функції getURL рядку, що переданий флешці через відповідний параметр. Таким чином може виконатися JavaScript код, що був переданий флешці. Тобто це strictly social XSS.

Поширенність проблеми.

Уразливість наявна в ActionScript коді для підрахунку кліків у флеш банерах. І враховуючи, що подібний код використовується вже багато років в різних банерних системах Інтернету (в тому числі поширені інструкції по розробці флеш банерів з використанням вразливого AS коду), то проблема достатньо поширена. Наприклад, на banner.kiev.ua я зареєструвався ще в 2000 році, і, наскільки я пам’ятаю, вже тоді в них на сайті були дані рекомендації з використанням вразливого AS коду.

Тобто проблема пов’язана з неякісними рекомендаціями по розробці флеш банерів з можливістю підрахунку кліків. І вона стосується мільйонів флеш банерів у Мережі.

Подібні уразливості наявні в багатьох банерних системах, як глобальних, так і локальних. Зокрема дані уразливості я виявив в системах phpAdsNew, OpenAds та OpenX (на багатьох сайтах на даних движках), а також в банерній системі www.banner.kiev.ua та в інших банерних системах Уанета і Рунета.

Потенційно взразливих флешек в Інтернеті дуже багато (за даними Google):

filetype:swf inurl:clickTAG

Результатів приблизно 3960000. 12.11.2008 їх було приблизно 215000. Зростання в 18,42 рази за цей час.

filetype:swf inurl:url

Результатів приблизно 4050000. 12.11.2008 їх було приблизно 996000. Зростання в 4,07 рази за цей час.

В сумі виходить, що приблизно 8010000 (понад 8 мільйонів) флешек потенційно вразливі до XSS атак. Не всі з цих флешек вразливі, але чимало з них. І це лише флеш файли проіндексовані Гуглом, а реально їх може бути набагато більше.

Середи них приблизно 12400 + 275 gov-сайтів - сайтів державних установ різних країн.

Зазначу, що деякі з цих флешек використовують методику №1 для захисту від XSS, що наведена нижче. Але це невеликий відсоток флешек - в основному вони використовують вразливий AS код.

До речі, подібну Strictly social XSS уразливість я виявив 15.03.2009 в плагіні WP-Cumulus для WordPress (в файлі tagcloud.swf).

filetype:swf inurl:tagcloud.swf

Результатів приблизно 34000000. Тобто ще 34 мільйони флешек потенційно вразливих до XSS атак :-) . Додайте 34 млн. до 8 млн. і вийде 42 мільйони вразливих флешек!

Особливості роботи в різних браузерах.

При вказаному у флешці target = “_blank” до кукісів не можна дістатися в Internet Explorer (зокрема IE6), Mozilla та Google Chrome. Зате можна дістатися до кукісів в Firefox 3, Opera 9.52 і можливо в інших браузерах.

Також у випадку, якщо вказаний target = “_blank”, JS-код не спрацьовує у браузерах IE6 та Google Chrome.

При невказаному target, або при вказаному target іншому ніж “_blank” (в тому числі через параметр TargetAS, при його використанні у флешці), JS-код спрацьовує в усіх браузерах. І в усіх браузерах можна дістатися до кукісів.

Приклади уразливих флешек.

Серед сайтів з уразливими до XSS флешками є server.cpmstar.com (атака через параметр clickTAG):

Серед gov-сайтів приведу приклад флешки на www.fatherhood.gov (атака через параметр clickTag):

Приклад уразливої флешки на www.banner.kiev.ua (атака через параметр url):

Приклад уразливої флешки на www.wie-man-sieht.net, що дозволяє дістатися до кукісів в усіх браузерах (атака через параметр url):

Приклад уразливої флешки на www.adspeed.com, що дозволяє дістатися до кукісів в усіх браузерах (атака через параметри clickTAG і TargetAS):

Захист флешек від XSS атак.

Щоб не допустити даних XSS атак через флешки потрібно не використовувати вразливий AS код і потрібно використати один з наступних методів.

1. Замість вразливого AS коду можна використати більш надійний код. Наприклад код, що наводиться на сайті Adobe - Designer’s Guide: Building Macromedia Flash Banners with Tracking Capabilities.

on (release) {
if (clickTAG.substr(0,5) == "http:") {
getURL(clickTAG);
}
}

Це код на кнопку. При використанні кода на кадр, то для кнопки button код буде наступним:

_root.button.onRelease = function () {
if (clickTAG.substr(0,5) == "http:") {
getURL(clickTAG);
}
}

Але цей метод не захищає від підміни URL, що дозволить провести атаки редирекції на довільні (в тому числі зловмисні) сайти. Тому краще використати більш надійний AS код.

2. Використати прямий URL у флешці (http://site), без використання параметру clickTAG.

3. Якщо потрібно підраховувати кліки, то можна використати URL на банерну систему (http://banner/click?id=1), що редиректне на потрібний сайт.

Наприклад, в своїй системі MustLive Banner System безпосередьно в інтерфейсі я рекомендую використовувати для флеш банерів вищеназвані методи №2 і №3, тому й даної проблеми з XSS через флеш файли в ній немає. Так що слідкуйте за своїми флешками і не допускайте в них подібних уразливостей.


2 відповідей на “XSS уразливості в 8 мільйонах флеш файлах”

  1. MustLive каже:

    You can read this article on English: XSS vulnerabilities in 8 millions flash files.

  2. MustLive каже:

    Нещодавно я дав інтерв’ю для Data Security Podcast стосовно даного дослідження.

Leave a Reply

You must be logged in to post a comment.