Reconnect — уязвимость в Facebook Login

    image

    Все очень просто — если мы можем перелогинить пользователя в свой фейсбук то мы можем присоединить свой фейсбук к аккаунту жертвы на других вебсайтах. Жертва загружает нашу страничку и мы получаем доступ к аккаунту жертвы на Booking.com, Bit.ly, About.me, Stumbleupon, Angel.co, Mashable.com, Vimeo и куче других вебсайтов.

    Шаг 1. Загрузка этого URL www.facebook.com/n/?mid=9dd1fd7G5af48de9ca58G0G86G119bb48c разлогинит любого пользователя FB

    Шаг 2. Чтобы залогинить жертву под нашим аккаунтом фейсбук требует Origin=*.facebook.com при запросе на login.php. Origin передается самим браузером и содержит домен страницы откуда произведен запрос. Другими словами нам надо найти способ сделать POST запрос с самого фейсбука. Для Firefox этого не нужно — он не отсылает Origin вообще для обычных form-based запросов. Поэтому дальше хак специально для Хрома.

    Создадим Canvas приложение с такими настройками:

    image

    Когда жертва попадает на apps.facebook.com/482922061740192 фейсбук шлет POST запрос по данному URL (должен быть не на facebook.com). Мы в свою очередь используем 307 редирект (сохраняет HTTP verb в отличии от 302) и это приводит к POST запросу на www.facebook.com/login.php?email=attacker@email.com&pass=password вместе с Origin: apps.facebook.com и нашим логином/паролем. Теперь жертва залогинена в наш фейсбук аккаунт.

    Step 3. Осталось запустить процесс коннекта. Обычный
    <img src="http://victim.com/auth/facebook">
    
    сработает.

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

    Данный простой баг использует три CSRF одновременно — на логауте, логине и на присоединении социального аккаунта. Первые два должен исправить фейсбук (но они отказались, это WontFix), последнее это задача самого разработчика.

    Reconnect это инструмент для угона аккаунтов, можете копировать код и ломать кого угодно — мне не жалко. В качестве примера используются Booking.com, Bit.ly, About.me, Stumbleupon, Angel.co, Mashable.com, Vimeo, но любой другой вебсайт с Facebook Connect может быть уязвим. Например, все Rails сайты, использующие omniauth-facebook, уязвимы.
    Поделиться публикацией

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

      +6
      1. Откуда взялся url из шага 1?
      2. Не очень понял что значит фраза
      мы можем присоединить свой фейсбук к аккаунту жертвы

      В моём понимании, если ты перезашёл на сайт, данные предыдущей сессии не должны всплывать.
        0
        Только вот потом можно зайти на сайт под своим же фейсбуком доступ к которому есть у нас и от которого была произведена перевязка аккаунта.
        +22
        Мы встроили тебе аккаунт в аккаунт, что бы ты мог взламывать аккаунты в аккаунте.
          –18
          Эта фраза мне явно кого-то напоминает…
          image
            –3
            Для тех, кто минусует, не понимая о чем речь: «Мы встроили тебе <объект> в <объект>, чтобы ты мог <действие> <объект> в <объект>» — это коронная фраза xzibit-a из «Тачка на прокачку»

            Для тех, кто реально в танке, есть +100500 мемов на эту тему в сети




            Источник: pikabu.ru/tag/Xzibit/hot
              +4
              Осмелюсь обьяснить, что xzibit и так подразумевался в изначальной фразе. В случае Вашего комментария, вы просто огласили то, что уже всем понятно.
              Ваш КО
          0
          Забавная идея. Хостинг-то абузоустойчивый? А то сейчас моралфаги набегут :-)
            +9
            обычный хероку. А в чем моралфаги то Оо. ФБ отказался исправлять, я сделал инструмент, все довольны.
              0
              Так готовая тулза для угона это уже нифига не PoC же. 10 лет назад когда я аналогичную тулзу для xss разместил — заабузили. То правда было на территории РФ.
                +6
                Не совсем готовая, допилить UI надо немного. Но не поможешь блекхатам сам, никто не поможет.
            +4
            Егор, прекрати ломать интернет!
            Нет, ну серьёзно, что не уязвимость, так что-то глобальное. А разработчикам потом головная боль всё это закрывать. Пожалей людей!
              +7
              Дык нефиг было в WontFix посылать. ССЗБ.
              0
              А 2FA спасет?
                –1
                При чем тут 2fa то?
                  +5
                  А https спасет? А мыть руки перед едой спасет? )
                    0
                    links/lynx спасет :-)
                  0
                  Для Firefox этого не нужно — он не отсылает Origin вообще для обычных form-based запросов.


                  А что говорит спецификация? Кто прав, а кто не прав? Нужно ли отправлять Origin для обычного GET запроса?
                    0
                    Насколько я помню, Origin это часть спеки на CORS, а она ради совместимости с существующими решениями требует отправки Origin только для нетипичных запросов (через XHR, с кастомными заголовками, etc.), поэтому для обычных GET через a href/img src и POST через form Origin и прочие CORS-специфичные запросы и заголовки не требуются. Безусловно, не требуется — не значит, что они запрещены. Так что, думаю, оба правы.
                    –3
                    «Теперь когда наш фейсбук подключен к аккаунту жертвы мы можем напрямую зайти в аккаунт жертвы»

                    C какого перепугу то что ты перелогинил чей то браузер под другой логин привязывает этот логин на других сайтах?

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

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