HTML/CSS-инъекция в почте Mail.Ru

    Всё новое — это хорошо забытое старое: помнится, несколько лет назад в ЖЖ был баг, который позволял вставляемым в текст комментария элементам назначать абсолютное позиционирование. Фактически, всё описанное в данном посте базируется на этой идее.

    Описанная уязвимость касается любых форм ввода, допускающих ввод пользовательского HTML-кода.

    Т.к. идея назначения свойства position с помощью inline-стилей не нова, большинство сервисов фильтрует такие стили.
    Развивая эту идею, попробуем назначить элементу уже существующий в вёрстке класс, имеющий необходимое значение нужного нам свойства.

    Найти класс с необходимыми свойствами не представляет никакого труда, воспользовавшись поиском на вкладке CSS в FireBug'е:



    Если бы у класса были какие-нибудь лишние свойства, то их можно было бы перекрыть с помощью inline-стилей.

    Рассмотрим следующий код письма:

    <div class="pAbs" style="top: 0; left: 0; width: 100%; height: 100%; background-color: pink; z-index: 65535;">
    <h1>Привет, %username%!</h1>
    </div>


    При просмотре такого письма в веб-интерфейсе пользователь увидит прекрасное:



    Таким образом, наш div имеет абсолютное позиционирование и заслоняет собой другие элементы интерфейса.

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

    Для предотвращения проблем нужно исключить возможность использования классов в пользовательском HTML-коде: почта Рамблера, к примеру, добавляет к названиям классов префикс, почта Яндекса просто удаляет свойство class.

    UPD.: Сотрудники Mail.Ru сделали отчаянную, но неудачную попытку исправить баг. ;-)
    UPD. 2: После непродолжительной борьбы баг был исправлен.
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 63
    • –26
      Я и впрямь стал задумываться о переезде с mail.ru.
      • +107
        давно пора)
        • +3
          Однако лучше поздно, чем никогда.
      • 0
        Не прошло и полугода и вот она — новая уязвимость.
        shadowjack конечно mail.ru оповестили об этом.
        • +5
          Судя по блоку «Похожие посты» справа, не прошло и месяца. 8)
          • +3
            я образно сказал. не хотел расстраивать программистов с майла
            • +2
              Месячные у мэйлрушечки.
            • +24
              мне кажется что разработчики mail.ru используют совсем другую почту :-)
              www.google.com/a/mail.ru/
              • +5
                а программисты Яндекса видимо этим да?
                www.google.com/a/yandex.ru/
                • –1
                  У меня вопрос возник: у меня есть почта тут www.google.com/a/dezcom.org. Почтовый адрес записывается как *****@dezcom.org. Значит ли это что моя почта *****@yandex.ru расположена тоже на серверах гугл?
                • 0
                  Может они всю почту там хостят, а на mail.ru просто обертка, местами кривая? bk.ru и list.ru тоже есть.
                • +1
                  Ну с другой стороны можно сказать спасибо mail.ru, за то что они допускают такие баги и кто-то их находит и «выводит на чистую воду». Теперь хоть многие вебмастеры и прочие программисты не будут делать подобных косяков в своих проектах! :)
                • –6
                  Поэтому вообще стараюсь не использовать web-интерфейсы. Всё через почтовые клиенты
                  • –16
                    Вообще есть такой софт, называется IBM AppScan, его натравливают на сайт и он выдает всякого рода уязвимости. К сожалению, он отнюдь не open source и стоит по-моему 34 000 USD за лицензию. У нас на работе используется, выдает очень подробный отчет с осмысленным текстом, как именно проводился «взлом», какого рода уязвимость и т.д. К сожалению, наш нельзя натравить на чужой сайт, а то я бы свои попробовал прогнать.
                    • +14
                      Что-то мне подсказывает, что для такой компании, как Mail.ru, купить программку за жалких (для ее уровня дохода) 34к уе — это как бе не проблема. Другое дело, лично я сомневаюсь в пользе от данной «утилиты» для проекта Mail.ru и всех его сервисов.
                      • +3
                        Тестеры обычно пишут свои наборы тестов, скрипты и т.д.
                        Тут такое чувство, что новую почту mail.ru выкатили в продакшн без тестирования.
                        • +1
                          as usual

                          • 0
                            в последнее время я часто замечаю, что всё тестирование происходит в продакшнах, на живых клиентах и настоящими деньгами
                            • 0
                              Наверное в этом есть какой-то смысл, пока оттестируешь — аудитория может уйти на другой сервис, а если сервис актуальный, то пользователи простят ошибки (при условии если своевременно, по мере развития продукта, ошибки исправлять).
                          • НЛО прилетело и опубликовало эту надпись здесь
                            • +2
                              аник хороший, но не совсем понятно к чему он тут?
                          • 0
                            Еще есть MaxPatrol: ptsecurity.com/
                            • +2
                              Не бывший ли XSpider это случаем?
                              • 0
                                Да, он.
                                • 0
                                  Это отдельный продукт. XSpider всё ещё поддерживается (недавно вышла новая версия с новым интерфейсом), но парол лучше (и дороже)
                              • 0
                                «Service Temporarily Unavailable» при попытке скачивания продукта за 34 000 USD — это печалька(
                              • +13
                                Прощу прощения за, возможно, несерьезный тон моего коммента, но блин я фигею с этиъ мейлрушечек!!!11 Еще одна уязвимость, не прошло и месяца. А они еще борятся за звание дома выской культуры быта! А они в это время, блин, пилят аську и пиарят свой агент.
                                • 0
                                  На mail.ru нельзя выделять даже письма нормально. Сиди и щелкай по чекбоксам.
                                  • –1
                                    >>Эта винда со своими скучными обоями, меняешь их меняешь…
                                    • 0
                                      можно настроить сбор почты на тот же gmail и юзать short-key
                                      • 0
                                        У меня основная почта на yandex.ru, которая и собирает со всех других ящиков письма :)
                                      • 0
                                        А нормально — это как?
                                        Не из праздного любопытства интересуюсь :)
                                        • 0
                                          Вы наверно знаете, как в проводнике windows можно выделять файлы с помощью зажатия левой кнопки мыши? Вот хотелось бы так-же.
                                      • –3
                                        Нда. А поставить position: relative для блока с письмом, видимо, было никак.
                                        • –1
                                          Только на position:absolute, а overflow:hidden. Это бы помогло от данного вида проблемы, наверное.
                                          • +1
                                            Да, overflow тоже нужен.
                                            Position: relative надо чтобы у любых блоков внутри position:absolute отсчитывалось от текущего блока, а не от окна;
                                            А overflow:hidden нужен, чтобы отрицательные координаты не могли вылезти наружу.
                                          • +4
                                            А ещё бывает position: fixed, от которого никакое relative и overflow не поможет. 8)
                                          • +3
                                            mail.ru – было есть и будет ещё долго решето с дырками такого размера, что подходит для отсеивания футбольных мячей от баскетбольных. Невзирая на присутсвие на Хабре инженеров по безопасности mail.ru, которые недавно горячо убеждали хабраобщественность, что работа над улучшением и углублением кипит. Самое смешное, что судя по количеству плюсов, за тот комментарий, писать пламенные речи пока получается гораздо лучше, чем работать над безопасностью.
                                            • 0
                                              Баг исправлен. Автору поста — спасибо :)
                                              • 0
                                                Хм-м, а Вы уверены? 8)
                                                • 0
                                                  Первый раз починили вылезание сверху и слева. Теперь зачинили справа и снизу. Можете повторить проблему?
                                                  • 0
                                                    Проблема описана в посте.
                                                    Вам пример кода дать? 8)
                                                    • 0
                                                      Пример кода из поста теперь выглядит так image
                                                      • +1
                                                        Прекрасно, но ведь бывает ещё position: fixed (это, кстати, обсуждается двумя ветками комментариев выше).

                                                        Берём такой код:

                                                        <div class="alertFade" style="top: 0; left: 0; width: 100%; height: 100%; background-color: pink; z-index: 65535; opacity: 1;">
                                                        <div style="padding-top: 100px;"><h1>Привет, мейлрушники! 8)</h1></div>
                                                        </div>

                                                        Видим старое доброе:



                                                        Т.о. проблема использования существующего класса с нежелательными свойствами осталась.
                                                        • 0
                                                          С классами будем разбираться, но в ночь с воскресенья на понедельник этого лучше не делать.
                                                          • 0
                                                            ;-)
                                                            • 0
                                                              Хотя есть одна идея.
                                                              • 0
                                                                Ну, можно запилить alertFade и сделать inline-овое позиционирование там, где оно нужно.
                                                                Или сделать название этого класса рандомным.
                                                    • 0
                                                      Да. И проблема после починки больше не повторяется. Если у вас она все равно повторяется, то, пожалуйста, сообщите.

                                                      P.S.

                                                      Еще раз спасибо, что нашли баг!
                                            • 0
                                              меня больше парит, что письма в папке спам остаются отмеченные, как не прочитанные. И соответственного «горят» в количестве непрочитанных писем. Ну и какое-то загадочное сообщение в агенте, которое «горит» в интерфейсе и нереально доставляет. Письмо невозможно ни удалить ни прочитать.
                                              • 0
                                                Эх, как было бы прекрасно, если б каждый, кто находит проблему, сначала сообщал бы о ней в соответствующую компанию, а потом уже писал пост на Хабре…
                                                • +1
                                                  Было бы прекрасно, если бы баг-репортеры получали что-нибудь за свои репорты. 8)
                                                  • +1
                                                    Вы получаете более качественный продукт :)

                                                    Делая же обзоры любых уязвимостей до их исправления, вы повышаете вероятность попадания других пользователей в нехорошую ситуацию.

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

                                                    Надеюсь, что наши старания будут вознаграждены отзывами довольных пользователей, баг-репортами не очень довольных и конструктивной критикой совсем недовольных :)
                                                    • 0
                                                      Я получаю более качественный продукт используя Gmail. 8)
                                                  • –5
                                                    Бесполезно в MAIL-RU о каких-то проблемах сообщать — как об стенку горох.

                                                    Сколько раз их просил, чтоб они сделали наконец-таки возможность входа в веб-интерфейс по HTTPS, что-то типа mail.ru а, воз и ныне там.
                                                    • +2
                                                      <form method="post" action="https://auth.mail.ru/cgi-bin/auth" name="Auth"… >

                                                      Хм-м?..
                                                      • +1
                                                        А, это ничего, что оно редиректит с кодом 302 сначала на
                                                        e.mail.ru/cgi-bin/start а затем на e.mail.ru/cgi-bin/login
                                                        и не дает работать по HTTPS?
                                                        • 0
                                                          Вы хотите безопасную авторизацию или же чтобы абсолютно всё работало по https?
                                                  • 0
                                                    Мы хотим достойную, не глючную, защищенную почту! Даёшь интернет ,.ля...?

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

                                                    Самое читаемое