Уязвимость на сервере Facebook позволяла выполнить произвольный код
С помощью поддельного сеанса, содержащего произвольный контент pickle, возможно выполнить команды на системе.
Специалист в области информационной безопасности Дэниэл Ле Галл (Daniel Le Gall) описал уязвимость на одном из сереверов Facebook, позволявшую удаленно выполнить произвольный код. Проблема была выявлена в ходе сканирования блока IP-адресов (199.201.65.0/24), принадлежащих Facebook, исследователь обнаружил сервис Sentry с именем хоста sentryagreements.thefacebook.com. Sentry представляет собой приложение, встраиваемое в фреймворк Django для оперативного мониторинга ошибок.
При проверке приложения Ле Галл заметил, что на странице по неизвестной причине регулярно появляются трассировки стека, а функция сброса пароля пользователя работает некорректно. Режим отладки Django не был отключен, что приводило к отображению подробной информации о различных мета-данных об окружении при появлении трассировки. Хотя Django «обрезает» критически важные данные (пароли, закрытые ключи и т.д.) во избежание массивной утечки информации, исследователь заметил ряд интересных моментов, в частности, список SENTRY_OPTIONS содержал полный ключ system.secret-key. Согласно документации Sentry, данный ключ представляет собой «закрытый ключ, используемый для подписи сеанса», его компрометация упрощает злоумышленнику возможность перехвата пользовательских сеансов.
По словам эксперта, с помощью поддельного сеанса, содержащего произвольный контент pickle, возможно выполнить команды на системе. Ле Галл разработал скрипт, заменяющий содержимое существующего cookie-файла sentrysid произвольным объектом, в процессе десериализации запускающим функцию os.system (“sleep 30”).
Исследователь проинформировал Facebook о проблеме. Компания уже устранила уязвимость и заплатила Ле Галлу $5 тыс. в рамках программы выплаты вознаграждения за обнаруженные ошибки.