Google выплатила вознаграждение в размере 90 тысяч долларов исследователю безопасности Simon Köck после того, как он обнаружил недокументированную уязвимость удалённого выполнения команд в DevSite — общей платформе, которая поддерживает developers.google.com и другие сайты с документацией. Köck сообщил о проблеме 6 августа, Google приняла отчёт на следующий день и одобрила вознаграждение 27 августа, однако исправление было развернуто на серверах 7 октября.
Google классифицировала уязвимость как S0 — высший уровень в её шкале серьёзности — и выплатила Köck базовое вознаграждение в размере 75 тысяч долларов за уязвимость RCE в обычном прикладном уровне, увеличив сумму на 20% за исключительное качество отчёта.
Три ошибки образовали цепочку эксплуатации
DevSite хранил сериализованный объект OAuth2WebServerFlow из заброшенной библиотеки oauth2client внутри cookie сессии Flask. Это приводило к раскрытию секрета клиента OAuth, но проблема становилась ещё серьёзнее, поскольку тот же секрет также использовался в качестве ключа для подписи сессий Flask.
Köck смог локально воспроизвести подпись cookie и создавать поддельные сессии, которые принимал сервер. Поскольку поток OAuth использовал pickle для десериализации данных сессии, он смог заменить объект вредоносной подписанной pickle-нагрузкой, а затем подтвердить удалённое выполнение кода Python.
Исследователь подтвердил выполнение с помощью нагрузки, которая задерживала ответ посредством команды sleep и намеренно останавливалась до запуска реальных команд или получения доступа к файлам, учётным данным либо внутренним сервисам. По его словам, поддельные сессии принимались на семи затронутых доменах, тогда как проверка концепции была выполнена на трёх доменах: developers.google.com, docs.partner.android.com и web.dev.
Масштаб воздействия остался полностью неустановленным
Köck не установил, мог ли сервер изменять содержимое документации Google или подменять команды установки и ссылки для скачивания — сценарий, который мог открыть путь к атаке на цепочку поставок программного обеспечения. Он также не проверял, позволяли ли поддельные сессии выдавать себя за пользователей или получать доступ к их данным.
Исследователь Arvin Shivram, известный под именем @brutecat, отметил, что внутренние приложения App Engine обычно могут получать доступ к Stubby — внутренней системе Google для взаимодействия между сервисами. Köck заявил, что такой доступ, если он был доступен этому процессу, мог значительно расширить последствия, однако он не проверял права DevSite или масштаб его доступа к внутренним сервисам.
Почему эта новость важна?
Этот случай показывает, что риск возник не из-за одной ошибки, а из-за сочетания трёх практик: раскрытия чувствительного секрета внутри cookie, повторного использования этого секрета в качестве ключа подписи и небезопасной десериализации ненадёжных данных. Исправление любого звена этой цепочки смогло бы прервать путь эксплуатации, поэтому разделение секретов и отказ от pickle в данных сессий являются базовыми мерами защиты, а не необязательными улучшениями.
В то же время срок исправления, составивший около двух месяцев, вызывает операционные вопросы, на которые Google не ответила. Компания не уточнила, применяла ли она временные меры снижения риска, заменила ли два разных ключа подписи, которые, по словам Köck, использовались семью доменами, или аннулировала ли существующие сессии. Она также не раскрыла результаты криминалистической проверки возможной эксплуатации уязвимости до публикации исправления и не ответила на запрос The New Stack о комментарии к моменту обновления материала.