Twitter: перехват управления взглядами и мыслями

    image

    А что бы сделали вы, если бы могли публиковать записи в Twitter от имени любого пользователя социальной сети? Представили? Тогда прошу вас под кат за деталями.

    Предисловие


    В ходе исследования безопасности социальной сети Twitter в рамках BugBounty-программы мной была обнаружена уязвимость, которая позволяла злоумышленнику размещать записи в Твиттере от имени любого пользователя сервиса, не имея при этом доступ к аккаунту жертвы. Данная бага представляет особую опасность в связи с тем, что огромное количество как представителей СМИ, так и других известных личностей, имеет аккаунты в Твиттере и использует их для публикации различных новостей. А обнаруженная проблема безопасности позволяет разместить заведомо ложную информацию не в одном, а сразу в нескольких крупных аккаунтах (например, новостных изданий), и публика с большой долей вероятности поверит в неё. Имеются реальные примеры, когда с помощью дезинформации злоумышленники серьёзно влияли на цену акций определённых компаний ради собственной выгоды. Подробнее о таких прецедентах можно прочитать (тут). Данная уязвимость была обнаружена 26 февраля 2017 года и исправлена 28 февраля 2017 года.

    Перейдём к техническим подробностям уязвимости.

    Введение


    В Твиттере есть такой сервис, как ads.twitter.com, в нем расположена медиа-библиотека с возможностью загружать медиа-файлы (видео, картинки, gif-ки), а также смотреть ранее загруженные медиа-файлы, которые были использованы при публикации твита. Библиотека доступна по ссылке вида: ads.twitter.com/accounts/ид_вашего_аккаунта/media. Теперь к делу.

    Осматриваемся


    Перейдя в библиотеку, мы видим функцию загрузки медиа-файлов:

    image

    После того, как мы нажимаем на кнопку «Загрузить медиа-файл» и выбираем его, нам будет видна следующая картина:

    image

    По нажатию на загруженное изображение мы видим следующее:

    image

    1. Возможность твитнуть наш медиа-файл.
    2. Возможность поделиться медиафайлом с любым пользователем.

    Так, хорошо, посмотрим на функцию твита поближе:

    image

    Что мы видим? Предположительно, следующее:

    • account_id — id аккаунта конкретно в библиотеке
    • owner_id — id владельца изображения
    • user_id — id юзера, которому, собственно, и опубликуется твит
    • media_key — id нашего медиафайла (на скриншоте №3, в адресной строке, он отображен)

    Введём некоторые обозначения:

    • аккаунт №1 — первый мой аккаунт
    • аккаунт №2 — второй мой аккаунт

    Поскольку я не помню точные формулировки выдаваемых ошибок, будем называть их
    «ошибка №1» и «ошибка №2».

    Пробуем


    Что было сделано мной для обнаружения уязвимости:

    Сначала я перехватил запрос на публикацию твитта и подменил параметры owner_id и user_id в GET и в json-е, который отправлялся методом POST, с id аккаунта №1 на соответствующие id аккаунта №2, но ожидаемого результата я не получил, лишь ошибку №1.

    После этого я решил заменить owner_id и user_id только в POST, на что получил ошибку №2, насколько я помню, текст был примерно таким: «Пользователь с owner_id *тот id на который я заменял* не является владельцем медиа *тут media_key*».

    «Хорошо», — подумал я, и сделал следующее:

    Я воспользовался аккаунтом №2, зашёл в сервис ads.twitter.com, в библиотеку, и загрузил изображение для того, чтобы заранее знать media_key.

    Пошло-поехало


    Возвращаемся на аккаунт №1:

    Перехватываем запрос на твит и подменяем owner_id, user_id в GET и POST на соответствующие данные аккаунта №2 и media_key на тот, который мы узнали, загрузив изображение на аккаунте №2. Иииии… видим ошибку №1. Грусть, печаль, тоска, хотя подождите. Когда мы ранее заменяли owner_id и user_id в GET и POST, ошибка была одна (ошибка №1), а в случае замены owner_id и user_id только в POST, ошибка была другая (ошибка №2). Попробуем?

    Заменяем в запросе owner_id, user_id и media_key в POST, ииии… видим response, сообщающий, что публикация твита прошла успешно! Перейдя на аккаунт №2, мы видим, что был размещен твит с ранее загруженной картинкой аккаунта №2, хотя сам аккаунт №2 ничего не публиковал.

    Пробуем усерднее


    Итак, на данный момент мы имеем возможность публиковать твиты от имени любого пользователя, но у нас есть жёсткое ограничение, которое серьезно снижает impact(критичность уязвимости), а именно, нам нужно, чтобы у пользователя, от имени которого мы собираемся делать публикацию, был загружен медиа-файл. Более того, необходимо знать media_key этого файла, который подобрать не получится, поскольку он состоит из 18 цифр. Что ж, будем искать возможность узнать media_key. В процессе поисков я не обнаружил 100%-ного способа узнать этот media_key, всегда были какие-то ограничения в виде определённых обстоятельств, при которых, возможно, удалось бы получить тот самый media_key. Всё кончено? Выхода нет? Репортить, как есть? Ну уж нет! Внутреннее чувство мне подсказало, что эту уязвимость можно довести до апогея критичности! Помните возможность делиться загруженным медиа-файлом? Мне пришла в голову мысль, что, возможно, когда мы поделимся нашим медиа-файлом с пользователем, от имени которого мы хотим сделать публикацию, он будет также считаться владельцем медиа-файла, ошибка №2 не возникнет и твит успешно опубликуется. И именно так и произошло:)

    Для успешной эксплуатации уязвимости нам не хватало media_key, но в случае, когда мы являемся владельцем файла, мы можем видеть его media_key (скриншот №3).

    Теперь сценарий выглядит следующим образом:

    1. Мы загружаем наш медиа-файл.
    2. Делимся этим файлом с пользователем, от имени которого хотим опубликовать запись.
    3. Перехватываем запрос публикации твита и просто подменяем в POST owner_id и user_id на id twitter аккаунта жертвы (узнать его просто, есть много онлайн сервисов).
    4. Получаем сообщение об успешной публикации твита.

    Вот теперь можно со спокойной душой репортить об уязвимости.

    Выводы:


    RCE, SQLi, XSS — это всё конечно очень здорово и опасно, но порой логические уязвимости несут не меньшую угрозу для безопасности и зачастую гораздо более просты в эксплуатации нежели вышеперечисленные. На это стоит обращать пристальное внимание и при этом внимание живых специалистов, ведь автоматизированные сканеры не способны на такое. А что касается Twitter, то еще не известно сколько подобных уязвимостей в нем сейчас есть и может появиться по мере его развития и добавления функциональности. Удачного всем bughunting'а!
    Digital Security 182,23
    Безопасность как искусство
    Поделиться публикацией
    Комментарии 28
    • +3
      Дьявол в деталях. Просто, но со вкусом. :)
      • +3
        А вы уже знамениты.

        Но правда сама новость своеобразно подана

        «По мнению экспертов, уязвимость могла бы быть использована для манипуляции котировками акций и провокации волнений в регионах»

        «В блоге компании Digital Security на сайте Habrahabr.ru можно увидеть примеры таких твитов, написанных от имени Билла Гейтса и Тима Кука, а также CNN, New York Times и Bloomberg»
        • +14

          "Через найденную уязвимость багхантер изнасиловал журналиста".

          • +3
            «Багхантер изнасиловал журналиста, через не предназначенную для этого уязвимость».
            • +2
              … с целью провокации волнений от имени Билла Кука
              • +2
                Через не предназначенную для этого «дыру»
                • 0
                  «Багхантер изнасиловал журналиста, через не предназначенную для этого «дыру» в Твиттере».
          • +4
            Данная уязвимость была обнаружена 26 февраля 2017 года и исправлена 28 февраля 2017 года.

            Снимаю шляпу не только перед исследователем, но и перед сотрудниками компании: в кой-то веки серьёзная уязвимость была достаточно оперативно исправлена крупной компанией и не пришлось с месяц стучаться и по десять раз объяснять что это баг а не фича.

            • 0

              Фуф, акции на месте.

              • 0
                Глупый вопрос: баг исправлен в феврале, а пишите только в мае, почему?
                • +11

                  Взяли паузу дабы Твиттер смог проверить свои сервисы на наличие аналогичных уязвимостей

                • 0
                  ошибку признали хоть? или как обычно — поправили молча и сделали вид, что так и было?
                  • +3

                    Разумеется признали, репорт об уязвимости был сделан с помощью платформы hackerone, так что не думаю что у них был шанс пофиксить и сделать вид что ничего не было. Вообще Твиттер в этом плане молодцы, критичные уязвимости фиксят быстро и не отрицают их наличие. А если подкрепить репорт видео с POC-ом так вообще проблем не будет, это если судить по моему опыту работы с ними​.

                  • 0
                    Через непредназначавшуюся для этого дыру
                    • –14
                      Воспользоваться этой уязвимостью на благо России не пришло в голову? Можно было сообщить, например, что в арабских странах добыча нефти остановилась, а в Америке её вообще нет, тогда бы цены поднялись до 200 долларов за бочку и компьютеры подешевели в 4 раза. Или ещё что-нибудь подобное замутить. Что, никак нельзя было?
                      • +3

                        Примерно на один день поднялись бы, да. И неизвестно, сколько людей на этом прогорело бы, и сколько компаний позакрывалось бы. Соответственно сколько людей оказалось бы без работы и нечем кормить семью. И какое тут благо? Я уже молчу про то, что так можно упустить шанс стать известным white hat, и навсегда записаться в "смотрите, этот тот ура-патриот который в 2017м взломал Твиттер и запостил какую то чушь"

                        • –5
                          Словарь 2001 года, между прочим, когда маршрутизаторы уже существовали. И на оксфордские словари я тоже ссылался.
                          Да, почему-то именно российский сегмент Интернета оказался безграмотным. Не только с маршрутизаторами: есть ещё flood (флад) и многое другое. Поэтому нужно всё исправить, и я, великий мистер Рутер, готов это сделать. Просто дайте мне пароль от админки.
                          И неизвестно, сколько людей на этом прогорело бы, и сколько компаний позакрывалось бы

                          Ну, прогорели бы американцы. Значит, нам станет лучше. Разве это плохо?
                          так можно упустить шанс стать известным white hat

                          Ну, станет он белой шляпой. Мне-то что-нибудь перепадёт с этого? А другим гражданам России? Вот пусть поделится своим вознаграждением в счёт моральной компенсации с теми, кто только сегодня узнал о такой возможности помочь России или хотя бы просто знатно прикольнуться. Меня устроит квартира в Москве на Фрунзенской набережной.
                          этот тот ура-патриот который в 2017м взломал Твиттер и запостил какую то чушь

                          А у нас он бы получил славу и уважение среди народа, не говоря уже о куда более солидном материальном поощрении.
                          • 0
                            > Словарь 2001 года
                            А почему не 1901? Разница в дате всего 5%. И вас не смущает, что в нет слов Вайбер, ватсапп, покемоны, мемы, смайлики, и миллиона других штук, появившиеся за более чем 15 лет? А сколько слов видоизменилось! Язык имеет свойство меняться и адаптироваться. Язык — это не наука и буквах, язык — меняется. Всё меняется. Если люди привыкли говорить «роутер», и это слово прижилось, то через какое то время оно так и будет называться и писаться правильно. Есть миллион слов в русском языке, заимствованных из латиницы, и есть множество похожих слов с английским языком, но это не значит, что мы должны общие слова произносить по-английски, а не по-русски.
                            • 0
                              Router в британском английском [ ˈraʊtə ]. Читается как о с длинным у, тоесть роутер. то что в каком-то словаре, существует, слово рутер, относящееся к техническим, не значит что имелся ввиду именно роутер, это мог быть человек занимающийся рутованием например. / Оффтоп
                              • 0

                                А в другом диалекте то же самое слово звучит как [ˈruː.tər], отсюда и все холивары. Осталось понять, какой из двух диалектов — британский, а какой — американский: мнения 4 сайтов из топа гугла разделились поровну...

                              • –1
                                Какое ещё «о с длинным у»? Ни в одном из литературных вариантов router не произносится через [оу], так говорят только наши неучи. Можно послушать и убедиться в этом. А чтобы было понятно, как звучит дифтонг [оу] в английских словах, возьмём слово shoulder (одно из немногих, где сочетание ou произносится /oʊ/). Слышно же, что это совсем не тот звук, который в слове router? Так что надо каждое слово выверять и продвигать правильную практику письма, а не повторять за безграмотными рекламными менеджерами. Я могу отредактировать сайты с ошибочным написанием, только пусть дадут мне права.
                                • 0
                                  Может вы не будете спорить с человеком имеющим одно из высших: Специалист — Технический переводчик?
                                  Я конечно все понимаю, но Ваше упорство в своем невежестве это нечто, и даже если закрыть глаза на роутер/рутер, то по поводу доступа к интернету это полный стек маразм, либо вы не сдающийся тролль и тогда рано или поздно сообщество вас отучит от этого, ну или изгонит, либо если вы реально так считаете, то мне искренне жаль…
                          • +3
                            Омг я щас почитал остальные комментарии этого персонажа, оказалось что это весьма упорный тип, доказывающий, что весь интернет неправильно пишет router на русском — надо «рутер» а не «роутер» и в качестве доказательства приводит какой то странный скриншот, похоже из словаря времён СССР. А ещё он просит дать ему пароли от админок и он всё поправит! /Оффтоп
                            • +1
                              В интернете всегда кто-то неправ ¯\_(ツ)_/¯
                          • 0
                            А сколько заплатили награду?
                            • 0
                              Красава :)

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

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