Дыра в Argo CD: почему 18 месяцев без патча — это катастрофа?

Компания Synacktiv нашла уязвимость в Argo CD — одном из самых популярных инструментов для развёртывания приложений в Kubernetes. Уязвимость позволяет выполнить произвольный код на сервере без какой-либо аутентификации. Баг был передан разработчикам Argo CD ещё в январе 2025 года. Патча нет до сих пор, CVE-идентификатор не присвоен. Именно это вынудило Synacktiv опубликовать технические детали: молчание в таких случаях защищает только тех, кто атакует.
Дыра в Argo CD: почему 18 месяцев без патча — это катастрофа?
Изображение носит иллюстративный характер

Под удар попал компонент repo-server. По своей функции это вполне рутинный сервис: читает Git-репозитории и собирает Kubernetes-манифесты, то есть файлы, определяющие, что именно кластер должен запустить. Проблема в том, что внутри repo-server живёт gRPC-сервис без какой-либо защиты. Никакого токена, никакого пароля. Любой, кто физически добрался до внутреннего сетевого порта, может отправить туда запрос и запустить произвольную команду.
Технически атака строится на том, как Argo CD работает с kustomize — стандартным инструментом, превращающим файлы репозитория в манифесты. У kustomize есть опция --helm-command, указывающая на бинарник helm, который нужно вызвать. Synacktiv выяснили, что неаутентифицированный запрос к сервису GenerateManifest позволяет переопределить эту опцию — направить её на скрипт из репозитория под контролем атакующего. Когда kustomize запускается, он исполняет уже не helm, а нужный атакующему код. Уязвимость воспроизведена на Argo CD версии v2.13.3.
Полная цепочка атаки выглядит так: атакующий компрометирует любой один pod в кластере, через него добирается до внутреннего gRPC-порта repo-server, отправляет подготовленный запрос к GenerateManifest, подменяет --helm-command на свой скрипт, а тот после выполнения читает пароль от Redis прямо из переменной окружения. Дальше атакующий подключается к Redis-кэшу Argo CD и отравляет хранящиеся там данные о развёртываниях. При следующей автоматической синхронизации кластер деплоит то, что подложил атакующий. Итог — полный захват кластера.
Здесь важно понять один нюанс. Argo CD поставляется с Kubernetes network policy, которые должны изолировать repo-server от всего, кроме собственных компонентов системы. Но Helm-чарт, через который большинство и устанавливает Argo CD, по умолчанию держит эти политики выключенными. Параметр networkPolicy.create стоит в false. Это означает, что скомпрометировав буквально один pod в кластере, атакующий уже имеет прямой доступ к repo-server.
Уязвимость не возникла в вакууме. В 2024 году компания Cycode описала CVE-2024-31989: тогда Redis в Argo CD не имел пароля вообще, и любой pod в кластере мог отравить кэш развёртываний. В качестве исправления разработчики добавили пароль к Redis. Новая атака от Synacktiv этот пароль крадёт — и проблема возвращается в полный рост, потому что сам кэш по-прежнему не подписан криптографически.
Помимо этого, в сентябре 2025 года был закрыт CVE-2025-55190: API-токен с минимальными правами на чтение позволял вытащить Git-credentials проекта. А в мае 2026-го обнаружили CVE-2026-42880: пользователи с правами только на чтение могли читать Kubernetes secrets в открытом виде. Закономерность прослеживается отчётливо: Argo CD аккумулирует доступ к кластеру и секретам репозиториев, а его внутренние интерфейсы раз за разом открывают этот доступ либо без аутентификации, либо через низкопривилегированные токены.
Patcha нет. Единственная реальная защита сейчас — сетевая изоляция. Нужно включить Kubernetes network policies так, чтобы только компоненты самого Argo CD могли добраться до порта repo-server и порта Redis. Файлы политик у Argo CD есть, но пользователям Helm-чарта придётся включать их вручную. Проверить текущее состояние можно командой kubectl get networkpolicy -A. Если политики активны — в выводе будет по одной записи на каждый компонент, включая repo-server и Redis. Если список пустой или политик нет — оба порта открыты для всего кластера.
Synacktiv разработали инструмент argo-cdown, автоматизирующий всю цепочку атаки. Пока они его не публикуют — дают администраторам время выставить сетевые политики. Позже инструмент появится на GitHub, чтобы каждый мог проверить свою инфраструктуру самостоятельно. До выхода патча относиться к внутренней сети кластера как к враждебной среде — единственный способ не оказаться в роли жертвы.


Новое на сайте

20327Кости прерий: как истребление бизонов породило целую индустрию — и сама себя же уничтожила 20326Кто и зачем взламывает серверы Ollama и ComfyUI ради ключей от AWS? 20325Как злоумышленники спрятали командный сервер внутри блокчейна и почему его невозможно... 20324Брюссель заставляет Android делиться секретами с чужими ИИ-помощниками 20323WordPress: как два бага слились в одну критическую дыру, которую назвали wp2shell 20322Как китайские хакеры обманули DigiCert и украли сертификаты для подписи кода? 20321Что скрывается за уязвимостью, которую агентство США внесло в список активно используемых... 20320Автономные системы наступают быстрее, чем инфраструктура для управления ими: кто выиграет... 20319Почему в OpenSSL нашли дыру, съедающую память серверов, но не дали ей даже номер CVE? 20317SonicWall SMA 1000: как два бага превратили VPN-шлюз в бэкдор для атакующих 20316Может ли уязвимость в клиенте Zoom для Windows открыть доступ к чужому аккаунту без... 20315TELEPUZ: новый вредонос на C, который научился прятаться в Telegram, Steam и блокчейне... 20314Дома из дёрна: как исландцы триста лет прятались от холода под слоем земли и травы 20313Как один токен от чужого сервиса мог впустить злоумышленника в чужой аккаунт n8n?
Ссылка