Pull to refresh

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

Reading time 2 min
Views 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: После непродолжительной борьбы баг был исправлен.
Tags:
Hubs:
+86
Comments 63
Comments Comments 63

Articles