RCE, Cloud Build, Google Cloud, misconfiguration, CI/CD security

RCE через Cloud Build misconfiguration: когда автоматизация работает против вас

Представьте ситуацию: вы настроили автоматическую сборку и деплой приложения через Google Cloud Build, все работает как часы, код автоматически собирается при каждом коммите. Но что, если я скажу, что именно эта автоматизация может стать входной точкой для атакующего, который получит полный контроль над вашей инфраструктурой? Сегодня разберем одну из самых недооцененных уязвимостей в облачных CI/CD системах — Remote Code Execution через неправильную конфигурацию Cloud Build.

Что такое Cloud Build и почему это важно

Google Cloud Build — это управляемый сервис для continuous integration и continuous delivery, который позволяет автоматизировать процесс сборки, тестирования и развертывания приложений. Звучит удобно, правда? Вы пушите код в репозиторий, Cloud Build подхватывает изменения, запускает сборку по заранее определенным инструкциям и деплоит результат. Все происходит без вашего участия.

Проблема начинается там, где заканчивается понимание того, как именно работает этот механизм. Cloud Build выполняет команды с достаточно высокими привилегиями — ведь ему нужно собирать Docker-образы, деплоить в Kubernetes, обращаться к различным сервисам GCP. И если конфигурация построена неправильно, эти привилегии могут стать оружием в руках злоумышленника.

Ключевая особенность Cloud Build заключается в том, что он использует файл конфигурации (обычно cloudbuild.yaml или cloudbuild.json), который описывает шаги сборки. Этот файл часто хранится прямо в репозитории с кодом, что создает интересную ситуацию: любой, кто может изменить этот файл, потенциально может выполнить произвольные команды в контексте сборки.

Анатомия уязвимости: как происходит эксплуатация

Давайте разберем типичный сценарий атаки. Предположим, у нас есть публичный репозиторий на GitHub, который подключен к Cloud Build через триггер. Каждый pull request автоматически запускает сборку для проверки кода. Звучит как стандартная практика, которую используют тысячи проектов.

Атакующий создает pull request с безобидными на первый взгляд изменениями в коде, но также модифицирует файл cloudbuild.yaml. Вместо обычных команд сборки он добавляет что-то вроде извлечения секретов из окружения или установки бэкдора. Поскольку Cloud Build выполняет инструкции из файла конфигурации, который пришел вместе с pull request'ом, все эти команды будут выполнены.

Основные векторы атаки

  • Извлечение переменных окружения и секретов. Cloud Build часто имеет доступ к API ключам, токенам аутентификации и другим чувствительным данным через переменные окружения или Secret Manager. Атакующий может просто вывести их в лог сборки или отправить на внешний сервер.

  • Lateral movement в облачной инфраструктуре. Используя service account, под которым работает Cloud Build, злоумышленник может получить доступ к другим ресурсам GCP: базам данных, storage buckets, compute instances.

  • Подмена артефактов сборки. Вместо легитимного приложения можно собрать и задеплоить модифицированную версию с бэкдором, которая будет выглядеть абсолютно нормально снаружи.

  • Криптомайнинг и использование ресурсов. Классика жанра — использование вычислительных мощностей для майнинга криптовалют или других ресурсоемких задач за чужой счет.

Реальные примеры эксплуатации

Рассмотрим конкретный пример. У компании есть микросервисная архитектура, каждый сервис — отдельный репозиторий на GitHub. Для удобства разработчиков настроен Cloud Build триггер, который запускается на каждый PR для запуска тестов. Конфигурация выглядит примерно так:

В файле cloudbuild.yaml прописаны стандартные шаги: установка зависимостей, запуск тестов, сборка Docker образа. Но что если атакующий модифицирует этот файл в своем PR? Он может добавить шаг, который выглядит как часть процесса тестирования, но на самом деле выполняет вредоносные действия.

Например, добавление невинного на вид шага "проверки конфигурации" может на самом деле извлекать все доступные секреты из GCP Secret Manager и отправлять их на контролируемый атакующим сервер. Или установка "дополнительных инструментов для тестирования" может быть установкой reverse shell для получения интерактивного доступа к окружению сборки.

Особенно опасны ситуации, когда Cloud Build настроен с излишне широкими правами. Например, если service account имеет роль Editor или Owner на уровне проекта, атакующий получает практически неограниченные возможности для манипуляций с инфраструктурой.

Техники обнаружения уязвимой конфигурации

Как понять, что ваша конфигурация Cloud Build уязвима? Есть несколько ключевых признаков, на которые стоит обратить внимание.

Индикаторы потенциальной уязвимости

  • Автоматический запуск сборки для внешних PR. Если Cloud Build триггер настроен на запуск для pull requests от любых пользователей без ручного одобрения, это первый красный флаг.

  • Использование файла конфигурации из PR. Проверьте, откуда Cloud Build берет инструкции для сборки. Если это файл из самого PR, а не из защищенной ветки, у вас проблема.

  • Широкие права service account. Просмотрите IAM роли, назначенные service account'у Cloud Build. Если там есть роли уровня Editor, Owner или специфичные роли с широкими правами, стоит их пересмотреть.

  • Отсутствие изоляции между проектами. Если один Cloud Build service account используется для сборки нескольких проектов с разным уровнем критичности, это создает риск компрометации более важных систем через менее защищенные.

Методы защиты и правильная конфигурация

Защита от RCE через Cloud Build misconfiguration требует комплексного подхода. Недостаточно просто ограничить права service account'а — нужно пересмотреть весь процесс CI/CD с точки зрения безопасности.

Практические рекомендации по защите

Используйте ручное одобрение для внешних PR. Настройте Cloud Build так, чтобы сборки для pull requests от внешних контрибьюторов требовали явного одобрения от maintainer'а проекта. Это можно сделать через GitHub Actions или GitLab CI/CD правила, которые будут триггерить Cloud Build только после review.

Храните конфигурацию сборки отдельно. Вместо использования cloudbuild.yaml из PR, храните эталонную конфигурацию в защищенной ветке или вообще вне репозитория. Cloud Build поддерживает inline конфигурации прямо в триггере — используйте эту возможность.

Применяйте принцип наименьших привилегий. Создайте отдельные service account'ы для разных этапов сборки с минимально необходимыми правами. Например, account для запуска тестов не должен иметь доступа к production секретам или возможности деплоя.

Используйте substitutions вместо прямого доступа к секретам. Cloud Build поддерживает substitution variables, которые позволяют передавать чувствительные данные без их раскрытия в логах или конфигурации.

Настройте аудит и мониторинг. Включите Cloud Audit Logs для всех операций Cloud Build и настройте алерты на подозрительную активность: необычные команды в логах сборки, доступ к нетипичным ресурсам, изменения в IAM политиках.

Изолируйте окружения сборки. Используйте разные GCP проекты для разных стадий: отдельный проект для CI/CD, отдельный для staging, отдельный для production. Это ограничит потенциальный ущерб от компрометации.

Инструменты для аудита безопасности Cloud Build

Существует несколько полезных инструментов, которые помогут выявить проблемы с конфигурацией Cloud Build и другими аспектами безопасности GCP.

  • Forseti Security — комплексный инструмент для аудита безопасности GCP, который может выявлять излишне широкие IAM права и неправильные конфигурации.

  • ScoutSuite — мультиоблачный security auditing tool, поддерживающий GCP и способный находить misconfiguration в различных сервисах.

  • GCP IAM Privilege Escalation — набор скриптов для поиска путей повышения привилегий через IAM роли, полезен для понимания реального уровня доступа service account'ов.

Альтернативные подходы к организации CI/CD

Иногда лучшее решение — это пересмотреть архитектуру CI/CD pipeline целиком. Вместо того чтобы давать Cloud Build прямой доступ к критичным ресурсам, можно использовать более безопасные паттерны.

Один из подходов — использование отдельного, изолированного окружения для сборки с последующим подписыванием артефактов. Cloud Build собирает приложение в sandbox'е без доступа к production ресурсам, создает подписанный образ, который затем проверяется и деплоится отдельным, более привилегированным процессом.

Другой вариант — использование Binary Authorization в связке с Cloud Build. Этот сервис позволяет установить политики, определяющие, какие образы могут быть задеплоены в ваш кластер Kubernetes, основываясь на криптографических подписях и метаданных о процессе сборки.

Также стоит рассмотреть использование managed CI/CD решений с более гранулярным контролем доступа, таких как GitLab CI с protected environments или GitHub Actions с environment protection rules.

Заключение: безопасность как процесс, а не состояние

RCE через Cloud Build misconfiguration — это не просто техническая уязвимость, это симптом более глубокой проблемы: недостаточного внимания к безопасности в процессе автоматизации. Мы так стремимся ускорить разработку и деплой, что забываем о базовых принципах security by design.

Важно понимать, что безопасная конфигурация Cloud Build — это не разовая задача, а постоянный процесс. Угрозы эволюционируют, появляются новые векторы атак, меняются best practices. Регулярный аудит конфигураций, обновление политик безопасности, обучение команды — все это должно быть частью вашей DevSecOps культуры.

Помните: каждый элемент автоматизации — это потенциальная точка входа для атакующего. Но это не значит, что нужно отказываться от автоматизации. Это значит, что нужно подходить к ней осознанно, с пониманием рисков и готовностью их минимизировать. Cloud Build — мощный инструмент, который может как значительно ускорить вашу разработку, так и стать причиной серьезного инцидента. Выбор за вами.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

CyberCamp - под давлением атак

Неделя практической кибербезопасности
с 20-25 октября.

Присоединяйся.

Реклама. 18+ АО «Инфосистемы Джет», ИНН 7729058675