Это действительно серьезная проблема - однако этот класс атак не предназначен c для Cloud Run и применим к любым вычислительным платформам, в которых вы бы использовали недоверенный двоичный файл.
Представьте, что вы запустив ffmpeg
в контейнере, и один из ваших пользователей даст вам видеовход для конвертации. Это видео может использовать уязвимости в ffmpeg (поскольку оно написано не на языке, безопасном для памяти, их было много) и может выполнять произвольный код. Этот произвольный код может потенциально проникнуть в вашу среду, включая токен доступа к API-интерфейсам GCP, выполнив запрос:
curl -H "metadata-flavor: Google" http://metadata/computeMetadata/v1/instance/service-accounts/default/token
Секреты, которые вы ввели в свой контейнер, и этот токен, возможно, являются наиболее чувствительными артефактами, подлежащими эксфильтрации в случае атака.
Чтобы предотвратить себя от этого класса атак, я рекомендую:
- Создать отдельную службу в Cloud Run, единственной задачей которой является выложить на ненадежный исполняемый файл (как вы мы уже упоминали).
- Запустите эту службу с учетной записью службы (
--service-account
), у которой нет прав на какие-либо действия в вашем объекте. Таким образом, злоумышленник может получить токен, который мало что может сделать (однако может узнать ваш идентификатор проекта GCP или адрес электронной почты этой учетной записи службы). - (Это невозможно в Cloud Run, пока я знать–) Запустить файловую систему контейнера в режиме «только чтение», чтобы запретить злоумышленнику изменять исполняемые файлы или библиотеки в контейнере, что может повлиять на последующие запросы, обрабатываемые контейнером.
- (в отсутствие контейнера только для чтения файловая система сегодня -) если исполняемый вами недоверенный двоичный файл является / может быть «статически скомпилирован», при каждом запросе рассмотрите возможность создания нового временного каталога, который содержит двоичный файл. Затем ch root и запустите двоичный файл в этом каталоге (чтобы его побочные эффекты не повлияли на остальную часть контейнера) и очистите этот каталог до завершения запроса.
Надеюсь, это поможет.