Как стать автором
Обновить

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

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

Описанная уязвимость касается любых форм ввода, допускающих ввод пользовательского 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: После непродолжительной борьбы баг был исправлен.
Теги:
Хабы:
Всего голосов 108: ↑97 и ↓11+86
Комментарии63

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн