Target=”_blank” — наиболее недооцененная уязвимость современности
33К открытий34К показов
Большинство веб-разработчиков даже не догадываются:
Страница, на которую мы ссылаемся с использованием target="_blank", получает доступ к странице-источнику через объект window.opener.
Например, таким образом только что открытая вкладка может изменить window.opener.location, т.е. вместо предыдущей вкладки незаметно подгрузить совсем другую страницу.
Живой пример: ссылка на котейку с target=”_blank”.
Самое ужасное — то, что эта уязвимость присутствует на многих популярных отечественных и зарубежных сайтах: тогда как в Facebook её исправили несколько дней назад, она всё ещё работает, например, в Яндекс.Почте.
Пример атаки
Опираясь на такое поведение браузеров, можно придумать множество сценариев, вот самый простой:
1. Жертве отправляется письмо, возможно, с поддельного адреса. Содержание письма совершенно неважно: главное — это вынудить жертву перейти по ссылке с вредоносным кодом. Например, это может быть просьба заценить ми-ми-мишных котиков вроде того, что ниже. Target="_blank"
Яндекс добавляет во все письма автоматически.
2. Жертва открывает письмо в Яндекс.Почте, кликает на ссылку, по которой в новой вкладке открывается сайт-прокладка, выполняющая вредоносный код, который вместо Яндекс.Почты загружает фишинговый сайт, очень похожий на оригинальный, но, например, просящий повторно ввести логин и пароль, а также, чтобы снять подозрения, действительно делает переадресацию на котиков.
Пример такого кода:
3. Жертва, доверяющая Яндексу и посмотревшая на котиков, возвращается на предыдущую вкладку с почтой. Так как в ней она ничего не открывала, а также адрес не меняла, то, скорее всего, она поведется на фейк и введет свои логин и пароль, которые на самом деле отправятся злоумышленнику.
Единственное, что может вызвать подозрения — другой адрес у страницы, но его можно сделать очень похожим на оригинальный, а на мобильных устройствах он часто скрыт по умолчанию.
Лечение
К счастью, исправить всё можно довольно легко: ко всем ссылкам с target="_blank"
нужно дополнительно добавлять атрибут rel="noopener noreferrer"
.
Если вы не собираетесь ждать, пока это исправят на сайтах и в браузерах, рекомендуем добавить себе в TamperMonkey/GreaseMonkey следующий User Script:
//
33К открытий34К показов