31 января 2024 года исследователи объявили о обнаружении четырех серьезных уязвимостей в экосистеме контейнеров. Эти уязвимости, затрагивающие ключевые компоненты, включая runc, BuildKit, Moby (Docker Engine) и Docker Desktop, представляют существенные риски для безопасности и целостности приложений, использующих контейнеризацию.
Уязвимости становятся эксплуатируемыми в ситуациях, когда пользователь взаимодействует с вредоносным контентом, либо осознанно, либо неосознанно. Это может происходить по разным путям, таким как создание образов Docker из ненадежных источников/Dockerfile, попадание жертвы в атаки supply chain, выполнение контейнера из сомнительных образов/реестров в случае CVE-2024-21626 или других аналогичных ситуаций, которые могут привести к успешной эксплуатации и, потенциально, к полному выходу из контейнера и другим нежелательным поведениям.
В этой статье мы расскажем о уязвимостях, их последствиях, а также о том, как Aqua Security может помочь в обнаружении этих уязвимостей.
В Aqua Security мы можем заверить наших клиентов и сообщество о надежности нашей системы безопасности. Тщательный анализ показал, что образы Aqua неуязвимы для описанных уязвимостей, включая критический CVE-2024-21626. Хотя наши образы действительно включают библиотеки runc, они относятся к категории косвенных зависимостей и, следовательно, не представляют собой вектор уязвимости в нашей среде.
Каково влияние этих уязвимостей?
Эти уязвимости могут иметь различные потенциальные последствия, включая полный выход из контейнера, несанкционированный доступ к файловой системе хоста, компрометацию целостности кэша сборки и многое другое.
Какие версии затронуты?
Согласно рекомендациям по безопасности Docker, затронуты следующие версии компонентов и связанные патчи:
Компоненты | Затронутые версии | Исправленные версии |
Runc | <= 1.1.11 | >= 1.1.12 |
BuildKit | <= 0.12.4 | >= 0.12.5 |
Moby (Docker Engine) | <= 25.0.1 and <=24.0.8 | >= 25.0.2 and >=24.0.9 |
Docker Desktop | <=4.27.0 | >=4.27.1 |
Кроме того, некоторые облачные провайдеры, такие как Amazon Web Services (AWS) и Google Cloud, также опубликовали предупреждения, призывая своих клиентов принять необходимые меры в соответствии с обстоятельствами.
Каковы меры для смягчения этих уязвимостей?
- Исправьте уязвимые компоненты установкой последней доступной исправленной версии (как показано в таблице выше).
- Используйте только доверенные образы, такие как Официальные образы Docker, и избегайте создания образов контейнеров из ненадежных источников или ненадежных Dockerfiles.
Дополнительную информацию о дополнительных методах смягчения и рекомендациях можно найти здесь.
Облачные угрозы от новых уязвимостей
Недавно обнаруженные уязвимости представляют сложный ландшафт угроз, особенно влияя на сценарии, в которых злоумышленники получают контроль над образами контейнеров, например, через атаки на supply chain, или имеют право развертывания новых контейнеров. Особенно следует отметить одну из выявленных уязвимостей, CVE-2024-23652, которая специально позволяет удалять файлы с повышенными привилегиями в условиях, когда злоумышленник может участвовать в процессах сборки контейнеров.
Однако эти уязвимости представляют ограниченный риск во многих облачных средах из-за специфических предпосылок, необходимых для их эксплуатации, а именно, возможность выполнения или создания вредоносных образов контейнеров. Хотя такие предпосылки присутствуют в определенных развертываниях, они относительно редки, что смягчает широкое воздействие этих уязвимостей на различные облачные платформы.
С другой стороны, CVE-2024-21626 может представлять угрозу, если злоумышленник убедит жертву установить свой вредоносный образ или создать образ из вредоносного Dockerfile, разработанного для эксплуатации этой уязвимости.
Уязвимость Leaky Vessel может быть эксплуатирована из Dockerfile путем манипулирования инструкцией WORKDIR. Конкретно, злоумышленник может создать Dockerfile с подготовленной инструкцией WORKDIR, которая указывает на файловую систему базовой машины хоста с использованием /proc/self/fd/[ID], где [ID] — это зависящий от системы файловый дескриптор.
Вот как это может быть использовано:
1. Создать вредоносный Dockerfile с манипулированной инструкцией WORKDIR, указывающей на /proc/self/fd/[ID].
2. Собрать контейнер, используя подготовленный Dockerfile.
3. Эксплуатировать уязвимость для доступа к чувствительным файлам или выполнения произвольных команд на базовой системе хоста.
Путем использования этой уязвимости злоумышленник может достичь полного удаленного выполнения кода (RCE) с правами root на хост-системе, что потенциально может привести к компрометации всей системы хоста Docker или Kubernetes.
Технические подробности
На момент раскрытия было раскрыто четыре уязвимости CVE:
- CVE-2024-21626 – Проблема процесса runc.cwd и утечка файловых дескрипторов: включает утечку файловых дескрипторов в runc, позволяющую злоумышленникам получить доступ или изменить файловую систему хоста через подготовленные процессы контейнера. Уязвимость открывает потенциал для выхода из контейнера при запуске или создании вредоносных образов.
- CVE-2024-23651 – Гонка кеша монтирования Buildkit: Гонка во время сборки контейнера: подчеркивает гонку в BuildKit, при которой параллельные шаги сборки с общими монтированиями кеша могут раскрывать файлы системы хоста контейнерам сборки во время построения вредоносного Dockerfile.
- CVE-2024-23653 – Проверка привилегий GRPC SecurityMode в Buildkit: Взлом контейнера на этапе сборки: это уязвимость высокой степени серьезности, связанная с отсутствием проверки привилегий в конечной точке GRPC BuildKit. Эта проблема возникает, когда пользовательский синтаксический формат позволяет альтернативному контейнеру разбора взаимодействовать с GRPC-сервером BuildKit. Уязвимость конкретно заключается в обработке аргумента StartRequest.SecurityMode конечной точки Container.Start, который не проходит должной проверки. Этот недостаток позволяет выполнение контейнеров на этапе сборки с повышенными привилегиями, что может привести к выходу из контейнера и выполнению команд root хоста во время сборки вредоносного Dockerfile.
- CVE-2024-23652 – Произвольное удаление контейнера Buildkit на этапе сборки: раскрывает недостаток в BuildKit, где фронтэнд BuildKit или Dockerfile могут неправильно использовать функцию RUN –mount вредоносным Dockerfile для удаления файлов системы хоста из контейнера.
Клиенты Aqua защищены с помощью наших решений CNAPP
Платформа Cloud Native Application Platform (CNAPP) от Aqua обеспечивает полную защиту ваших облачных workloads от начала до конца. Мы проводим всестороннее сканирование кода, образов контейнеров и облачных workloads на известные уязвимости, такие как runc, скрытые вредоносные программы, встроенные секреты, проблемы конфигурации, вопросы лицензирования открытых исходных кодов и многое другое с помощью премиальной версии облачного сканера безопасности Aqua Trivy. Наши гибкие политики безопасности настроены в конвейере непрерывной интеграции и поставки (CI/CD), снижая возможность атак до развертывания, позволяя запускать только авторизованные образы. В производственной среде наши runtime инструменты, основанные на разведывательных данных, обеспечивают защиту облачных workloads в реальном времени. Защита во время выполнения имеет решающее значение для целостной стратегии безопасности. В производстве мы обеспечиваем защиту ваших облачных workloads в режиме реального времени с помощью наших интеллектуальных средств управления средой выполнения, которые заранее предупреждают пользователя в случае обнаружения какой-либо несанкционированной активности.
Ниже приведены скриншоты, демонстрирующие, как платформа Aqua сканирует Dockerfiles на предмет неправильной конфигурации и обнаруживает уязвимость runc в экземпляре EC2 при сканировании с использованием премиальной версии Aqua Trivy, а также как Aqua Enforcer (2022.4.461) обнаруживает попытки вредоносной деятельности в режиме выполнения.
Уязвимость runc также может проявляться в образах контейнеров, которые зависят от библиотек runc, например пакета runc Golang. Это популярный вариант использования образов контейнеров, на которых выполняются такие образы, как docker, в образах docker или образах, которые используют API-интерфейс runc для различных задач.
Сигнатуры поведенческого обнаружения Aqua выявляют любые попытки использования уязвимости «Leaky Vessels» во время выполнения и предоставляют пользователю подробное оповещение и график инцидентов для принятия мер по устранению.