В инструменте управления Kubernetes SUSE Fleet обнаружена уязвимость высокой степени серьезности, позволяющая несанкционированно получать доступ к конфиденциальным данным, включая учетные credentials. Проблема, зарегистрированная как CVE-2024-52284, была раскрыта исследователем безопасности samjustus через консультационный сервис GitHub Security Advisory GHSA-6h9x-9j5v-7w9h.
Детали уязвимости
SUSE Fleet представляет собой GitOps-инструмент для оркестрации развертываний в кластерах Kubernetes. Он обеспечивает непрерывное приведение конфигурации в соответствие с манифестами из Git-репозиториев. Однако до недавнего времени при использовании пользовательских значений Helm через поле BundleDeployment.Spec.Options.Helm.Values эти данные сохранялись непосредственно в ресурсах BundleDeployment в виде открытого текста.
В отличие от Helm v3, который по умолчанию хранит состояние релизов и значения в зашифрованных Secrets Kubernetes, предоставляя защиту при хранении, Fleet ранее встраивал значения Helm в кастомные ресурсы без какого-либо шифрования. Поскольку Kubernetes не шифрует поля кастомных ресурсов на rest-уровне, вся чувствительная информация оставалась незащищенной в хранилище данных кластера.
Основной риск уязвимости заключается в несанкционированном раскрытии секретов. Любой пользователь, имеющий разрешения на получение или перечисление объектов BundleDeployment в пространстве имен кластера, мог извлечь незашифрованные значения Helm, включая учетные данные, токены и другие критичные данные. Поскольку кастомные ресурсы Kubernetes хранятся в etcd в незашифрованном виде (если только кластер не настроен на использование encryption at rest), утечка значений могла привести к компрометации данных любым злоумышленником, имеющим доступ к хранилищу данных кластера.
Данная проблема оценивается в 7.4 балла по шкале CVSS v3.1 (высокий уровень опасности). Вектор атаки - сетевой, сложность атаки - низкая, для проведения не требуется привилегий или взаимодействия с пользователем. Воздействие на конфиденциальность - высокое, на целостность и доступность - отсутствует. Эти метрики подчеркивают простоту, с которой злоумышленник может получить конфиденциальные данные, используя стандартные вызовы API.
Подвержены уязвимости версии Fleet до 0.14.0, а именно: 0.11.0 - 0.11.9, 0.12.0 - 0.12.5, 0.13.0. В исправленных версиях - 0.14.0, 0.13.1, 0.12.6 и 0.11.10 - реализован механизм, при котором Fleet создает отдельный Kubernetes Secret для значений Helm каждого BundleDeployment. Контроллер Fleet теперь автоматически генерирует Secret в том же пространстве имен перед согласованием, а агент Fleet получает значения Helm из этого Secret, а не из спецификации BundleDeployment.
В качестве временной меры рекомендуется избегать прямого указания values-файлов в спецификации. Вместо этого следует использовать ссылки на файлы только по имени, что позволяет Fleet помещать их в Secrets. Например, вместо указания полного пути config-chart/values.yaml достаточно указать values.yaml. Это обеспечивает корректное исключениетивных данных из вывода в открытом виде.
Операторам кластеров настоятельно рекомендуется немедленно обновить Fleet до одной из патченых версий, провести аудит существующих BundleDeployment на предмет случайного раскрытия секретов, при необходимости немедленно сменить скомпрометированные учетные данные, включить шифрование при хранении для ключевых пространств имен и пересмотреть политики RBAC, ограничив операции GET и LIST для ресурсов BundleDeployment только доверенными пользователями.
Устранение данной уязвимости не только повышает безопасность развертываний на основе SUSE Fleet, но и усиливает ключевой принцип безопасности: никогда не хранить секреты в открытом виде внутри манифестов кластера.