Тем временем, в
ArgoCD нашли критическую уязвимость (
9.1 по
CVSS)
CVE-2024-31989: Use of Risky or Missing Cryptographic Algorithms in Redis Cache, эксплуатация которой не требует особых привилегий и может привести к
полному захвату
Kubernetes кластера.
Исследователей нашедших уязвимость, заинтересовал
Redis, который деплоится в кластер при установке
ArgoCD, а точнее возможность подключения к нему (из любого
Pod) без необходимости указывать
username и
password. Там они обнаружили множество ключей, которые содержали данные о развернутых приложениях. Однако ключи были сжаты в формате
gzip. В документации говорится, что
Redis служит в качестве кэширующего слоя, уменьшая количество запросов, отправляемых к
Kube API и
Git-провайдеру.
Используя исходный код
ArgoCD в качестве образца, ресерчеры написали код на
Go для распаковки содержимого
gzipped и раскрытия его значений. Как и ожидалось, в ключах была закэширована информация о приложениях, управляемых
ArgoCD, включая их манифесты и сведения о кластере
Kubernetes.
Однако, для того чтобы заставить
ArgoCD задеплоить манифесты, доставленные через
Redis, нужно было также добавить ключ с контрольной суммой. К счастью исследователей, этот хэш генерировался без какой-либо секретной подписи и им с легкостью удалось его воспроизвести (
base64 encoded FNV64a). Как итог, добавив пару ключей в
Redis им удалось задеплоить
BadPods и получить реверс шелл, сбежав на
Node.
Уязвимость затронула все версии
ArgoCD, необходимые патчи доступны в версиях
2.11.1, 2.10.10, 2.9.15, 2.8.19. В качестве основной меры митигации можно рассмотреть использование
NetworkPolicy для ограничения общения с инстансом
Redis.
P.S. Более подробно об уязвимости можно почитать в этой
статье.