Как стать автором
Поиск
Написать публикацию
Обновить

Пароли не там, где вы их оставили. Как работает DOM Clickjacking

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров393

Если честно, менеджеры паролей давно стали для меня чем‑то вроде зубной щётки. Пользуюсь каждый день, но задумываюсь о них только тогда, когда что‑то идёт не так. Обычно всё просто: клик — и нужная форма заполнена. Красота. Но именно эта красота может сыграть злую шутку. Совсем недавно я наткнулся на исследование про DOM Clickjacking, и понял, что даже привычное «автозаполнить» может подставить.

В отличие от старого доброго clickjacking с iframe, здесь никто ничего поверх не накладывает. Всё хитрее: страница сама превращается в ловушку. Менеджер паролей видит поле логина и честно вставляет туда пароль. А пользователь (ну то есть мы с вами) жмёт на кнопку и уверен, что всё нормально. На самом деле клик улетает в невидимый элемент, и данные — вместе с ним. Честно говоря, когда я это увидел на демо, стало немного не по себе.

Есть три главные причины, почему расширения ведутся на такой обман. Во‑первых, некоторые из них слишком доверчиво вставляют пароль сразу, без всякого подтверждения. Во‑вторых, они проверяют только домен верхнего уровня. А если у сайта есть хитрый поддомен — привет, уязвимость. И в‑третьих, далеко не все разработчики заморачиваются с CSP, поэтому любой внедрённый скрипт может вытворять с DOM что угодно.

Проверить страницу самому несложно. Открываете DevTools, смотрите на элементы. Если видите кучу строк с opacity:0 или position:absolute; left:-9999px — повод насторожиться. В Chrome во вкладке Layers это особенно хорошо видно. Для любителей автоматизации есть и короткий скрипт на JavaScript, который подсветит такие штуки.

 [...document.querySelectorAll('*')].filter(el => {   
const s = window.getComputedStyle(el);   
return (s.opacity === '0' || s.visibility === 'hidden' || s.display === 'none'); 
});

Кстати, не спешите вставлять это прямо в консоль браузера. Некоторые настройки блокируют выполнение, и по первой же инструкции из гугла можно наломать дров. Код небольшой, поэтому проще набрать его руками.

Теперь к самому интересному. В 2025 году на DEF CON исследователь Марек Тот показал практическую атаку DOM‑based extension clickjacking. Он проверил 11 популярных менеджеров паролей: Bitwarden, 1Password, LastPass, iCloud Passwords, Enpass и другие. Итог получился неприятный. В 10 из них пароли подставлялись в скрытые поля, 9 расширений отдавали TOTP‑коды двухфакторки, а 8 были уязвимы даже с passkeys. И всё это — буквально после одного клика на подставном сайте. Я вот сам пользуюсь Bitwarden и после прочтения полез сразу проверять настройки.

Здесь возникает вечный вопрос: что важнее — удобство или безопасность? Да, автозаполнение в один клик кажется идеальным UX. Но именно оно даёт шанс атакующему. Подтверждение через интерфейс расширения занимает пару секунд, зато вы сами решаете, куда подставить пароль.

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

Теги:
Хабы:
+5
Комментарии0

Публикации

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