Любой сайт может получить информацию о том, в каких популярных сервисах вы авторизированы
Разработчик Робин Линус на своей странице на GitHub Pages (визит по следующей ссылке небезопасен и его не рекомендуется выполнять с рабочего места, так как кроме видимой части сервисов страница проверяет, залогинены ли вы на сайтах для взрослых, а это останется в логах файрволла как попытка перехода) продемонстрировал, как сайты могут снимать с вас «медийный отпечаток», то есть вести учет того, в каких популярных сервисах залогинены посетители даже без какой-либо авторизации на посещаемой странице.
Для автора публикации «медийный отпечаток» выглядит следующим образом и является абсолютно верным:
И это весьма неприятно.
В чем суть
Для начала автор заметки объясняет, как происходит процедура перенаправления на окно авторизации.
Если мы перейдем по ссылке https://www.facebook.com/bookmarks/pages в инкогнито-режиме, то нас автоматически перенаправит на экран авторизации по адресу:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
Обратите внимание на вторую часть ссылки вида:
https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages
Это URL, на который нас вернет после того, как мы пройдем процедуру авторизации на Facebook. Но если мы используем этот URL для перенаправления на страницу авторизации, когда мы уже авторизированы на сайте, то мы сразу попадем на bookmarks/pages.
Еще раз:
- Если мы не залогинены и переходим по https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages, то мы попадаем на окно авторизации.
- Если мы залогинены, то мы по этому же линку попадем сразу на https://www.facebook.com/bookmarks/pages.
Вроде, все логично.
Политика крупных ресурсов, таких как Facebook, не позволяет получать данные самого запроса, т.к. соединение происходит по HTTPS. Однако, мы можем получить любое изображение с домена, если указать ссылку на него в login.php?next=. Конечно, фотки из FB так вытянуть не получится, потому что почти все изображения социальная сеть хранит по адресу fbcdn.net, однако, можно «постучаться» на лого Facebook — favicon.ico:
https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico
А на самом сайте замаскировать это через img-тэг как:
<img src="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
Выглядит это вот так:
Если выше вы увидели вот такой значок FB (), поздравляю, мы только что убедились, что вы залогинены в Facebook (проверьте). Если вы ничего не увидели или изображение не прогрузилось, вернув соответствующий значок(), то, соответственно, в Facebook вы не залогинены.
Финальная эксплуатация данной уязвимости выглядит следующим образом:
<img onload="alert('logged in to fb')" onerror="alert('not logged in to fb')" src="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">
С помощью этих нехитрых манипуляций с иконками можно собирать информацию о том, какими сервисами пользуется аудитория сайта без её ведома. Данный механизм работает почти для всех основных веб-сервисов, так как все они хранят свои иконки на основном домене.
Эту уязвимость можно использовать как один из этапов других типов атак, таких как ClickJacking или ProfileJacking.
Реакция сервисов
Проблема получения доступа к информации о том, какими иными сервисами пользуется человек, известна давно, но большинством компаний игнорируется. Вот какие ответы получил на свои багрепорты Робин от ряда крупнейших сервисов и социальных платформ.
Facebook:
Спасибо за ваше обращение. Этот вопрос обсуждался с группой, отвечающей за безопасность в Facebook и данная ошибка не может участвовать в bug bounty-программе. Она не применима к конкретному пользователю Facebook. Возможность узнать, где авторизован пользователь, вошедший на сайт, не представляет какой-либо угрозы безопасности. В любом случае, мы оценили ваш репорт и с нетерпением ждем от вас других сообщений об ошибках.
Twitter:
Спасибо за ваш репорт. Конечно, это выглядит интересно, но я не вижу, как эта проблема может представлять угрозу для безопасности Twitter и его пользователей. Так что, боюсь, что данный вопрос можно считать закрытым и претендовать на участие в bug bounty-программе он не может. Благодарим Вас за тревогу о безопасности Twitter.
Yahoo:
Благодарим Вас за обращение. Это известная проблема, о которой уже упоминал Емерия Гроссман. Мы подумаем, как в будущем решить ее.
Square:
Благодарим за обращение. Мы пришли к выводу, что этот вопрос представляет минимальный риск и поэтому никаких изменений в код для его решения вноситься не будет.
Dropbox:
Спасибо! Мы учтем эту угрозу.
Собственно, позиция большинства сервисов ясна — если уязвимость не приводит к краже персональных данных/данных учетной записи/не дает доступа к какой-либо категории данных, то это и не уязвимость.
FIX
В Опере спасает настройка блокировки куков сторонних сайтов: https://imgd.ru/image/uchm, а при её отключении «всё становится явным».
Via habrahabr.ru/post/312636/
Created/Updated: 25.05.2018