18-летний студент из Уругвая Эсекьель Перейра (Ezequiel Pereira) заработал 36 337 долларов, обнаружив критическую уязвимость в составе Google App Engine, позволявшую осуществить удаленное выполнение произвольного кода.
В своем блоге Перейра рассказывает, что обнаружил проблему еще в феврале 2018 года. Тогда он сумел получить доступ к среде разработки Google App Engine, разумеется, не предназначенной для пользователей. Изучив ситуацию, Перейра обнаружил, что также может использовать и некоторые внутренние API Google, после чего поспешил сообщить разработчикам об ошибке.
Дело в том, что все приложения Google App Engine (GAE) отвечают на HTTP-запросы с хедером X-Cloud-Trace-Context. Так Перейра выяснил, что appengine.google.com так же работает на GAE, и после ряда экспериментов сумел установить, как приложения выполняют внутренние действия, к примеру, пишут логи или работают с токенами OAuth.
В свою очередь, в окружении Java 8 внутренние действия выполняются посредством отправки сообщений Protocol Buffer (PB), на внутреннем HTTP-эндпоинте. Отклик в этом случае будет содержать либо ответ на исходное PB-сообщение от API, либо ошибку.
«Так как эндпоинт имел доступ к каким-то внутренним делам, я бы уверен, что все это как-то связано с тем, как appengine.google.com выполняет внутренние действия, но так и не смог найти ничего интересного на HTTP-эндпоинте», — рассказывает Перейра.
Тогда исследователь «натравил» на GAE статически скомпонованную версию Nmap, после чего стало понятно, что четвертый порт открыт. Построив C++ клиент и запустив его, Перейра обнаружил сервис gRPC, работающий с apphosting.APIHost API. Затем, при помощи специальной Java-библиотеки, он нашел API logservice и stubby. Так как все это позволяло «общаться» со средой разработки GAE, Перейра подал отчет об ошибке.
Первый же багрепорт исследователя получил приоритет P1, который присваивается проблемам, которые могут сказаться на большом количестве пользователей и должны быть исправлены как можно быстрее. Однако это не насторожило специалиста, и он продолжил изучать проблему, что привело к обнаружению API app_config_service, о чем Перейра так же сообщил в Google. После этого представители компании вежливо попросили молодого исследователя прекратить дальнейшее изучение и тестирование багов, так как своими действиями и обращениями к внутренним API он вполне мог причинить вред и что-нибудь сломать.
В итоге Перейра, который ожидал получить за свою находку около 5000 долларов по программе bug bounty, был приятно удивлен, узнав, что одну из найденных им уязвимостей классифицировали как RCE-баг. Суммарно исследователь заработал 36 337 долларов, а инженеры Google уже устранили найденные им недочеты.