Cross-Site Scripting атаки через редиректори

23:53 31.07.2009

В даній статті я розповім вам про використання редиректорів в різних браузерах для проведення Cross-Site Scripting атак. Які можуть проводитися з метою викрадення кукісів, або доступу до сторінок веб сайта для проведення різноманітних просунутих атак (у випадку коли є зв’язок між кодом виконуємим через редиректор і сайтом), а також з метою проведення фішинг атак та виконання JavaScript коду (у випадку коли такого зв’язку немає).

Окрім того, що редиректори дозволяють редиректити на зловмисні та фішинг сайти (що є Redirector уразливістю), є також інші варіанти атак з їх використанням. Зокрема в своїх статтях Пекло редиректорів та Пекельний вогонь для редиректорів я писав про використання редиректорів для DoS атак. Ще в січні 2008 року я запланував написати статтю про різноманітні атаки з використанням редерикторів (планую зробити антологію атак через редиректори), що я обов’язково зроблю, але зараз розповів про одну з цих атак - про XSS атаки через редиректори.

Існують два типа редиректорів (серверних): location-header, що працюють через заголовок Location, та refresh-header, що працюють через заголовок Refresh.

В різних браузерах (через уразливості в них) можливі XSS атаки в різних редиректорах. Атаки відбуваються через редирекцію на javascript: URI та data: URI.

Атака №1

Як я писав про Cross-Site Scripting уразливості в Mozilla, Internet Explorer, Opera та Chrome, в браузерах Mozilla 1.7.x (та попередні версії), Mozilla Firefox 3.0.8 (та попередні версії), Internet Explorer 6 (та попередні версії, але не IE7 та IE8), Opera 9.52 (та попередні й наступні версії) та Google Chrome 1.0.154.48 (та попередні й наступні версії) можлива XSS атака через refresh-header редиректори. Атака відбувається при редирекції на javascript: URI.

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=javascript:alert(document.cookie)
Що поверне у відповіді заголовок Refresh:
Refresh: 0; URL=javascript:alert(document.cookie)
Код спрацює в контексті даного сайту.

Дана уразливість в браузерах може використовуватися для проведення reflected XSS атак.

Атака №2

Як я писав про Cross-Site Scripting уразливості в Mozilla, Firefox та Chrome, в браузерах Mozilla 1.7.x (та попередні версії), Mozilla Firefox 3.0.12 (та попередні й наступні версії) та Google Chrome 1.0.154.48 (та попередні й наступні версії) можлива XSS атака через refresh-header редиректори. Атака відбувається при редирекції на data: URI (з або без використання base64).

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ%2b
Що поверне у відповіді заголовок refresh і код виконається у браузері:
refresh: 0; URL=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ%2b

Так як в браузерах Firefox 3.0.12 і Google Chrome код спрацює не в контексті даного сайту, то таким чином до кукісів не дістатися, зате це можна зробити в старій Mozilla. Дана уразливість в браузерах (сучасних) може використовуватися для проведення фішинг атак та виконання JavaScript коду.

Атака №3

Як я писав про Cross-Site Scripting уразливості в Firefox та Opera, в браузерах Mozilla Firefox 3.0.12 (та попередні й наступні версії) та Opera 9.52 (та попередні й наступні версії) можлива XSS атака через location-header редиректори. Атака відбувається при редирекції на data: URI (з або без використання base64).

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ%2b
Що поверне у відповіді заголовок Location і код виконається у браузері:
Location: data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpPC9zY3JpcHQ+

Так як в браузерах Firefox і Opera код спрацює не в контексті даного сайту, то таким чином до кукісів не дістатися. Дана уразливість в браузерах може використовуватися для проведення фішинг атак та виконання JavaScript коду.

Обидва типи редиректорів, location-header та refresh-header, дуже поширені в Інтернеті, але найбільш поширеними є location-header редиректори. Тому наявність уразливостей, що працюють через location-header редиректори представляє найбільшу загрозу. Зокрема через дану уразливість в браузерах можливі атаки через сервіси редирекції, як я писав стосовно уразливості на tinyurl.com. Це дозволяє розповсюджувати malware через сервіси редирекції, коли замість адреси для редирекції буде вказаний код експлоіта.

Атака №4

Всі сучасні браузери не дозволяють виконання JavaScript коду при редирекції на javascript: URI в location-header редиректорах. Але як показали мої дослідження - це не завжди так. Як я писав про Cross-Site Scripting уразливості в Mozilla та Firefox, в браузерах Mozilla 1.7.x (та попередні версії) та Mozilla Firefox 3.0.12 (та попередні й наступні версії) можлива XSS атака через location-header редиректори, що використовують відповідь “302 Object moved”. Атака відбувається при редирекції на javascript: URI (а також можна провести атаку і на data: URI).

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=javascript:alert(document.cookie)
Що поверне у відповіді заголовок Location:
HTTP/1.x 302 Object moved
Location: javascript:alert%28document.cookie%29

Браузер виводить сторінку “Object Moved”. При кліку по лінці “here” код спрацює в контексті даного сайту.

Дана уразливість в браузерах може використовуватися для проведення Strictly social XSS атак.

Атака №5

Після початкової публікацї статті, Aung Khant повідомив мені 24.08.2009 про уразливість в Maxthon 3 Alpha (3.0.0.145) з Ultramode. Яка дозволяє виконання JavaScript коду при редирекції на javascript: URI в location-header редиректорах. Це варіація атаки №4 (яку я перевіряв, але не знаходив в інших браузерах, але він знайшов її в Maxthon). Якщо в тому випадку XSS атака можлива через location-header редиректори, що використовують відповідь “302 Object moved”, то в даному випадку атака можлива при будь-яких 301 і 302 відповідях редиректорів. Атака відбувається при редирекції на javascript: URI.

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=javascript:alert(document.cookie)
Що поверне у відповіді заголовок Location:
Location: javascript:alert%28document.cookie%29
Браузер виводить сторінку “Unable to connect to the site”. При кліку по лінці “Refresh the page” код спрацює. До речі, Maxthon 3 Alpha веде себе однаково у випадку атак №3,4,5 (код виконається не в контексті сайта).

Дана уразливість в Maxthon може використовуватися для проведення Strictly social XSS атак.

Зазначу, що у випадку виконання JavaScript коду при редирекції на data: URI, коли код виконується не в контексті даного сайту, небезпека має місце. Тому що дані уразливості можуть використовуватися для проведення фішинг атак та виконання JavaScript коду (для розповсюдження malware).

Головними перевагами для зловмисників даного методу атаки порівняно зі звичайною редирекцією на їхній сайт є те, що, по-перше, їм не треба навіть мати свій сайт (тому їх буде важче відстежити, а також буде неможливо прикрити їхній сайт). А по-друге, жоден анти-фішинг і анти-малваре фільтр (в браузерах і емайлі) не зможе їх відфільтрувати, бо в їх базі не буде такої адреси (бо використовується не http: адреса, а data:), тобто можливий обхід усіх фільтрів. Тому потрібно виправляти усі зазначені уразливості в браузерах.

Атака №6

Як я писав про Cross-Site Scripting уразливість в Mozilla, Firefox та інших браузерах, в браузерах Mozilla 1.7.x (та попередні версії) та Mozilla Firefox 3.0.19 (та попередні й наступні версії) та потенційно в інших браузерах можлива XSS атака через location-header редиректори з відповіддю “302 Found”. Атака відбувається при редирекції на javascript: URI (а також можна провести атаку і на data: URI). Дана атака схожа на атаку №4.

Методика атаки:

При запиті до скрипта на сайті:
http://site/script.php?param=javascript:alert(document.cookie)
Що поверне у відповіді заголовок Location:
HTTP/1.x 302 Found
Location: javascript:alert(document.cookie)

Браузер виводить сторінку “Found”. При кліку по лінці “here” код спрацює в контексті даного сайту.

Дана уразливість в браузерах може використовуватися для проведення Strictly social XSS атак.

Атаки №7,8

В статті Cross-Site Scripting через редиректори 301 і 303 в різних браузерах я описав ще дві атаки через редиректори зі статусом 301 і 303. Це атаки через data: та javascript: URI.

[Оновлення: 05.08.2009]

Як я перевірив, Mozilla Firefox 3.0.13 також уразливий до атак №2,3,4.

У випадку всіх браузерів, що вразливі до атак №1,4, JS код виконується в контексті сайта.

[Оновлення: 22.08.2009]

Як я виявив з домопогою Aung Khant з YEHG Team, наступні браузери також уразливі:

Google Chrome 2.0.172.28, 2.0.172.37 та 3.0.193.2 Beta - уразливі до атак №1,2.

QtWeb 3.0 Build 001 та 3.0 Build 003 - уразливий до атак №1,2,3.

Safari 4.0.3 - уразливий до атак №1,2.

Opera 10.00 Beta 3 Build 1699 - уразливий до атак №1,3.

SeaMonkey 1.1.17 - уразливий до атак №1,2,4 і в №1,2,4 JS код виконується в контексті сайта.

[Оновлення: 25.08.2009]

Нова інформація від Aung Khant з YEHG Team:

Firefox 3.6 a1 pre - уразливий до атак №1,2,3,4 і в №1,2,4 JS код виконується в контексті сайта.

Firefox 3.7 a1 pre - уразливий до атак №2,3,4.

Orca Browser 1.2 build 5 - уразливий до атак №2,3,4.

Maxthon 3 Alpha (3.0.0.145 та 3.0.2.2) з Ultramode (емуляція Apple WebKit) - уразливий до атак №1,2. А також уразливий до атак №3,4,5 як Strictly social XSS.

[Оновлення: 05.08.2010]

Додав інформацію про атаку №6.

[Оновлення: 07.08.2010]

Нова інформація:

Mozilla Firefox 3.0.19 - уразливий до атак №2,3,4,6 і в №4,6 JS код виконується в контексті сайта.

Firefox 3.5.11 - уразливий до атак №2,3,4,6 і в №4,6 JS код виконується в контексті сайта.

Firefox 3.6.8 - уразливий до атак №2,3,4,6 і в №4,6 JS код виконується в контексті сайта.

Firefox 4.0b2 - уразливий до атак №2,3,4,6 і в №4,6 JS код виконується в контексті сайта.

Opera 10.53 - уразливий до атак №1,4,5,6.

[Оновлення: 16.09.2012]

Нова інформація:

Firefox 3.5.19, Firefox 3.6.28 - уразливі до атак №2,3,4,6 і в №4,6 JS код виконується в контексті сайта.

Firefox 10.0.7, Firefox 15.0.1 - уразливі до атак №2,3. В версіях Firefox 10.0.7 і 15.0.1 атаки №4,6 більше неможливі - дані уразливості були приховано виправлені Mozilla в Firefox 9.0.

Opera 10.62 - уразливий до атак №1,4,5,6.

[Оновлення: 25.09.2012]

Додав інформацію про атаки №7 і №8.


2 відповідей на “Cross-Site Scripting атаки через редиректори”

  1. MustLive каже:

    Окрім розміщення XSS уразливостей в Firefox 3.0.x та 3.5.x на Bugzilla Мозіли, також розмістив сьогодні XSS уразливості в Firefox 3.6 a1 pre та Firefox 3.7 a1 pre - Bug 513487.

  2. MustLive каже:

    You can read this article on English: Cross-Site Scripting attacks via redirectors.

Leave a Reply

You must be logged in to post a comment.