CSS в письме умеет кликать за пользователя, и это самый безобидный приём в спискеГарет Хейс когда-то разобрал песочницу AngularJS. Последние месяцы он
ломал почтовые клиенты: Gmail, Outlook, Fastmail, ProtonMail, Yahoo. Всё, что ниже, проходит через санитайзеры как безопасная разметка.
Начинается скромно. Тег
label, у которого в
for стоит чужой
id, отдаёт клик по элементу, до которого у письма доступа быть не должно. В Outlook так открывается лента интерфейса и закрепляется сообщение. Не починено до сих пор.
Рядом лежат обходы прокси картинок, из-за которых отправитель видит, что письмо открыли, и его IP на экране в ProtonMail.
Дальше становится ещё интереснее. Связка
::before,
::after и
opacity разводит то, что видит человек, и то, что читает ИИ-браузер: письмо превращается в промпт-инъекцию.
А вишенкой на торте в статье лежат кража токенов при CSP, который блокирует вообще все внешние ресурсы, и кража паролей.
Я сохранил статью себе, хотя почтовых клиентов не пишу: разрыв между тем, что пропустил санитайзер, и тем, что отрисовал браузер, живёт везде, где вы принимаете чужой HTML. В комментариях, описаниях профилей, предпросмотрах ссылок.
Запрещать
label при этом не нужно, режьте у него
for: опасна не подпись, а привязка к чужому
id. Совет автора даже шире — отдавать чужую разметку в iframe с sandbox. И не пускайте в белый список
:has,
:checked,
:focus и
:not: на них собирают поддельные элементы интерфейса.
#css #html #фронтенд #безопасность