Яндекс не считает Tabnabbing уязвимостью

    Что такое Tabnabbing?


    Про это написано уже множество статей, например, эта и на OWASP.

    Если вкратце — управление вкладкой браузера через дочернюю вкладку, открытую с target="_blank". Установив ссылку на внешний сайт с target="_blank", сайт будет иметь доступ к window.opener, через который можно сменить location у вкладки, с которой ведет ссылка. Все крупные сервисы, разрешающие вставлять ссылки, защищают пользователя от такого поведения через добавление rel=«noopener» или прокси-страницу.

    Да даже когда такая была в Яндекс.Почте — ее признали и закрыли.

    Но не в Турбо-страницах


    Отправил репорт о том, что все ссылки, вставленные в турбо-страницу, уязвимы к tabnabbing — в контенте и в меню. Владелец сайта может вставить туда любые ссылки. И самое главное — турбо-страницы показываются преимущественно мобильным клиентам, которые в большей мере подвержены обману через эту уязвимость, т.к. часто не видят урл страницы из-за минималистичного интерфейса.

    Пример уязвимой ссылки в меню:

    image

    На что получил такой ответ (спустя два месяца и просьбы ответить в твиттере):

    image

    И чем это плохо?


    Хоть это поведение и описано в спецификации, оно крайне не очевидно для пользователя. Пользователь не ожидает, что вкладка, с которой он перешел, может измениться.

    В лучшем случае турбо-страница сменится огромным порно-баннером, а в худшем — копией турбо-страницы с формой ввода логина-пароля, например. Огромный простор для фишинга!

    Как и в остальном мире, я считаю, что это уязвимость.

    А как думаете Вы?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Опасен ли tabnabbing в турбо-страницах?

    Поддержать автора
    Поделиться публикацией

    Комментарии 25

      +8

      Ответил, что "опасен", хотя на самом деле с опасностью не сталкивался, просто навигация в opener без моего участия бесит.

        +9
        Так это классика: пользователь кликает по ссылке на нашем сайте, открываем вторую вкладку в которой грузим запрошенное, а в исходной, тем временем, открываем рекламу (а с помощью location.replace() ещё и сделаем невозможной попытку нажать кнопку «Назад», мвахаха). Пользователь на автомате закрывает новую вкладку и остаётся один на один с рекламой. Показ засчитан.

        К сожалению, в Firefox обсуждение этой подлянки заглохло три года назад на этапе «пусть кто-нибудь внятно опишет, как с этим борется Chrome, чтобы мы могли порассуждать о том, как нам такое же реализовать».
        +1
        Включить в один вариант ответа два не связанных фактора — это пять.
          0
          Это была шуточка, простите. Для чистоты опроса убрал подпись.
          +15
          Я не знаю, что произошло в последнее время с Яндексом (возможно, это случилось за последний год), но у них очень сильно ухудшилась работа с безопасностью (и с Bug Bounty): скорость ответов упала почти до нуля, скорость обработки новых уязвимостей, вероятно, тоже (оцениваю исходя из скорости отправки ответа о дубликате), приватность больше особо не нужна. При этом брендировать левые сервисы, а при нахождении в них дыр говорить «Не, это партнеры, ничего не заплатим» — это святое. Ну и что, что там логотипы и домены Яндекса. И качество «зачистки» систем от уже засунутых векторов после исправления уязвимости хромает.
            +2
            У носорога очень плохое зрение. Но при его массе, это не его проблема.
            Слежка за пользователями — это их хлеб.
            +1

            Яндекс, по старой памяти, и не против быть на высоте, но коммерческие вопросы перебивают это похвальное движение. Слежка за пользователями, в которой Я столь часто подозревали, даёт, очевидно, выхлопа больше, чем затыкание возможности для слежки своими же руками.
            Тут, конечно, можно спорить про теории заговора, но небезызвестный домен в Я-зоне, набитый самыми разными техниками для отслеживания юзера, даже если тот меняет браузер или как-то ещё пытается показаться "другим посетителем", существует который год, и это, увы, наводит… При этом же нет даже тени сомнения в комментариях о том, что Я-сервисы (те же такси) ведут себя по разному для разных юзеров (что как бы не сильно законно, но отлично объясняется идеей защиты от фрода), и изменения учитывают полный портрет юзера (не понравился роботу на одном сервисе — будешь особенным образом обрабатываться на всех остальных). Реклама, учитывающая произносимые рядом с телефоном слова, тоже многим бросилась в глаза, но — это же совпадение, как такое можно только утверждать, правда?
            Это я к чему: вектор опасен для юзера, но "для большой компании на последнюю букву" может быть и наоборот.

              0
              Неплохо бы еще написать, что такое турбо-страницы.
                0
                Яндекс их так агрессивно продвигает, и я даже не думал, что кто-то о них не слышал. В двух словах — отдача страничек с урезанными возможностями html с серверов Яндекса, чтобы ускорить показ контента на мобильном. Монетизируется через вставку рекламных блоков. tech.yandex.ru/turbo
                +1
                В Гугл писали? У них на поиске этот баг работает.
                  0
                  Не писал, можете написать ;)
                  У них даже в лайтхаусе есть на это проверка: developers.google.com/web/tools/lighthouse/audits/noopener
                    0
                    Кажется, что какое-то время у Гугла была позиция, что это не та угроза, с которой они будут бороться, так как «Единственный способ защиты от фишинга — проверка адреса текущей вкладки при вводе данных. Если пользователь не делает этого, то он неправ.»
                    +4

                    Меня не отпускает сильное чувство что Яндекс превращается во что-то очень нехорошее. Я даже начинаю подозревать что у них там менеджмент с Почты России пришел "бизнесу учить". Хороший браузер стал тормозным и перегруженным всякого рода глючными функционалом. При любой установки софта на винду получи в довесок браузер, менеджер браузеров, алисо в панель и тормоза… не знаю как у остальных на андроидах а в последней версии от самсунгов из-за браузера с олисо постоянно падала облолчка домашнего

                      0

                      облолчка домашнего экрана. Некогда любимая мною компания теперь у меня в чёрном списке...

                      +1
                      Хороший пример такой уязвимости.
                        0

                        Браузеры на базе хромиума (в том числе, и Яндекс, и Опера, а теперь и Ёж) пресекают попытку доступа через границу фрейма — нельзя просто так взять и поковыряться в содержимом window.opener.


                        А вот фаерфокс — подвержен уязвимости.


                        Поскольку в мире дофига легаси сайтов, не уделивших внимание гигиене ссылок, то было бы проще кидаться тапками в сторону фаерфокса, чтобы те пофиксили раз и навсегда.

                          +1
                          То есть как это пресекают? Я надеюсь вы не имели в виду попытку прочитать содержимое DOM для опенера.

                          А вот значение 'window.opener.location.href' в Хроме прекрасно меняется.

                            0

                            Упс! Читать нельзя, а писать можно...

                              0
                              Блин, звучит чертовски любопытно. Можно попросить вас показать небольшой кода, чтобы писать?
                                0
                                <html><body>
                                <script type="text/javascript">
                                    var op = window.opener;
                                    try {
                                        // здесь исходная вкладка будет перенаправлена
                                        op.location.href = 'https://ya.ru';
                                        // а здесь вылетит исключение
                                        document.write(op.location.href);
                                        // равно как и здесь, если бы мы сюда добрались
                                        op.document.write('PWNED!');
                                        // на фаерфоксе - доберёмся и не вылетим!
                                    } catch (e) {
                                        alert('Exception: ' + e);
                                    }
                                </script>
                                </body></html>

                                Опять же, работает только на ФФ. (Может быть, на до-хромиумном еже и ослике… не проверял, нет их под рукой).

                                  0
                                  А какой версии у вас FF?
                                  У меня 67.0 и window.opener.document.write('PWNED!') триггерит ошибку безопасности:

                                  SecurityError: Permission denied to access property "document" on cross-origin object

                                  Просто возможность взять и повлиять на чужой DOM, дописав туда любой вредоносный JS, была бы настолько опасной, что FF лучше было бы похоронить в таком случае.
                                    0

                                    67.0 под макось. Только что проверил обновление.

                                  0

                                  Ещё вариант:
                                  victim.html


                                  <div id=victim>innocent</div>
                                  <div><a href='violator.html' target='_blank'>take me!</a></div>

                                  violator.html


                                  <script>
                                  window.opener.document.getElementById('victim').innerText = 'pwned!';
                                  </script>
                                    0
                                    Кажется я понял, откуда доступ к DOM. У вас оба файла расположены в рамках одного домена («origin»)?
                                    А если бы violator.htm расположен был бы на другом домене?

                                    Ну то есть ссылка ведет на другой сайт, а там в консоли уже ввести window.opener.document.write('PWNED!')
                                      0

                                      Да, попробовал в консоли в другом домене, — там только доступ к location.href, и только на запись.
                                      Значит, у хромиума паранойя более повышенная, раз он даже в одном домене бьёт по пальцам.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое