Čo sa stalo
Argo CD je populárny open source nástroj, ktorý automaticky nasadzuje aplikácie do Kubernetes podľa toho, čo je uložené v Git repozitári. Tomuto prístupu sa hovorí GitOps. Súčasťou Argo CD je komponent repo-server, ktorý z repozitára pripravuje konfiguráciu aplikácií, okrem iného aj zo súborov vo formáte Jsonnet.
Práve v tomto komponente sa našla chyba označená CVE-2026-113672 (v európskej databáze EUVD-2026-105227). Pri spracovaní súborov .jsonnet Argo CD nekontroluje, či príkazy na vloženie iného súboru zostávajú vnútri repozitára. Súbor tak môže načítať čokoľvek, k čomu má repo-server prístup, napríklad tokeny, súkromné kľúče či prihlasovacie údaje ku Git repozitárom.
Opravené verzie vydal tím Argo CD 6. októbra a zraniteľnosť bola v americkej databáze NVD zverejnená 20. októbra 2026. Tie isté vydania opravujú aj ďalšie kritické chyby, napríklad dve chyby v Kustomize, ktoré umožňujú spúšťať príkazy na repo-server. Ku dňu písania článku chyba nie je v katalógu CISA KEV a ani databáza EUVD neeviduje jej aktívne zneužívanie. Zneužitie zatiaľ nie je známe.
Prečo je to nebezpečné
Ide o chybu typu path traversal (CWE-22), voľne preložené „únik mimo povolený priečinok“. Predstavte si archivára, ktorý má podľa pokynov nosiť len dokumenty z jednej police. Ak mu niekto podá lístok „choď o dve poschodia vyššie a prines obsah trezoru“, archivár to bez otázok urobí. Presne tak sa správa Jsonnet v Argo CD: dovolí načítať súbory aj mimo repozitára.
Útok ide cez sieť a útočník potrebuje len minimálne oprávnenie. Stačí, ak môže zapísať súbor do Git repozitára, ktorý Argo CD používa, alebo ak má v Argo CD iba právo zobraziť existujúcu aplikáciu typu Directory. V druhom prípade nepotrebuje právo aplikáciu meniť ani synchronizovať a ani zapisovať do repozitára. Argo CD síce objekty typu Secret v odpovedi zakryje, no obsah vložený do ConfigMap vráti útočníkovi v čitateľnej podobe.
Čo môže útočník získať alebo spôsobiť:
- premenné prostredia procesu
repo-server, v ktorých môžu byť heslá a kľúče - tokeny servisných účtov Kubernetes pripojené do
repo-server - pripojené súkromné kľúče a prístupy ku Git repozitárom
- vyčerpanie pamäte
repo-server, ktoré naruší jeho činnosť
Skóre CVSS je 9,9 z maximálnych desiatich bodov, teda kritická závažnosť. CVSS je medzinárodná stupnica, ktorá hodnotí, ako ľahko sa chyba zneužije a akú škodu spôsobí. Vysoké skóre vychádza z toho, že útok je jednoduchý, ide cez sieť a jeho dopad presahuje samotný Argo CD.
EPSS je model, ktorý odhaduje pravdepodobnosť, že chybu niekto zneužije v najbližších 30 dňoch. Pre túto chybu je odhad k 28. októbru 2026 pod 1 %, zhruba osem šancí z tisíc. Katalóg CISA KEV je americký zoznam chýb, ktoré útočníci preukázateľne zneužívajú, a táto chyba v ňom zatiaľ nie je. To však nie je dôvod aktualizáciu odkladať, pretože popis chyby je verejný.
Koho sa to týka
Dotknuté sú všetky verzie Argo CD od 0.9.0 až po verzie pred 3.3.15, 3.4.10, 3.5.4 a 3.6.0-rc2. Prakticky teda takmer každá inštalácia, ktorá ešte nebola aktualizovaná na niektoré z opravených vydaní.
Argo CD typicky beží vo firmách, ktoré prevádzkujú vlastné alebo cloudové klastre Kubernetes a nasadzujú aplikácie spôsobom GitOps. Najväčšie riziko je tam, kde Argo CD zdieľa viac tímov či externí dodávatelia, alebo kde majú právo čítať aplikácie všetci prihlásení používatelia. Rizikové sú aj inštalácie, ktorých webové rozhranie alebo API je dostupné z internetu.
Netýka sa to organizácií, ktoré Argo CD nepoužívajú. Ak Argo CD prevádzkuje váš dodávateľ alebo poskytovateľ spravovanej platformy, overte si u neho, či už aktualizoval.
Ako zistiť, či ste zasiahnutí
Verziu zistíte v ľavom paneli webového rozhrania Argo CD alebo z príkazového riadka. Nasledujúce príkazy len čítajú údaje a nič nemenia. Ak Argo CD nebeží v mennom priestore argocd, upravte jeho názov.
argocd version
Príkaz vypíše verziu klienta aj servera, rozhodujúca je verzia servera. Verziu overíte aj podľa obrazov kontajnerov:
kubectl get deployments -n argocd -o wide
Či máte zapnutý Jsonnet a kto má právo zobrazovať aplikácie, zistíte z konfigurácie argocd-cm a argocd-rbac-cm. Ak kľúč jsonnet.enable chýba, Jsonnet je zapnutý.
kubectl get configmap argocd-cm argocd-rbac-cm -n argocd -o yaml
Ak je verzia servera nižšia ako opravené vydanie vo vašej vetve, ste zasiahnutí. Zasiahnuté sú aj všetky vetvy staršie ako 3.3.
Ako to opraviť
Výrobca chybu opravil vo verziách 3.3.15, 3.4.10, 3.5.4 a 3.6.0-rc2. Postupujte takto:
- Zistite aktuálnu verziu servera podľa predchádzajúcej sekcie.
- Aktualizujte v rámci svojej vetvy: z 3.3 na 3.3.15, z 3.4 na 3.4.10, z 3.5 na 3.5.4. Testovacie inštalácie predbežnej verzie aktualizujte na 3.6.0-rc2.
- Pre vetvy staršie ako 3.3 výrobca opravené vydanie neuvádza. Naplánujte prechod na podporovanú vetvu a pri zmene vetvy si prečítajte oficiálny návod na upgrade.
- Pred aktualizáciou si overte zmeny, ktoré môžu niečo rozbiť: Kustomize s Helm grafmi už nerešpektuje
helmGlobals.configHomea OCI manifest väčší ako 4 MiB je odmietnutý. - Po aktualizácii vymeňte citlivé údaje, ku ktorým mal
repo-serverprístup: prístupy ku Git repozitárom, kľúče a tokeny.
Kým aktualizujete, môžete riziko znížiť. Podľa dokumentácie Argo CD môže vypnutie nepoužívaných nástrojov na tvorbu konfigurácie zvýšiť bezpečnosť. Ak Jsonnet nepotrebujete, nastavte v ConfigMap argocd-cm kľúč jsonnet.enable na hodnotu false. Výrobca to neuvádza ako oficiálne riešenie práve tejto chyby, ide o všeobecné odporúčanie na sprísnenie.
Zároveň obmedzte, kto má v Argo CD právo zobrazovať aplikácie a kto môže zapisovať do repozitárov, z ktorých Argo CD nasadzuje. Ako prvé aktualizujte inštancie dostupné z internetu a tie, ktoré zdieľa viac tímov alebo dodávateľov.
Čo ak už ste mohli byť napadnutí
Argo CD v popise chyby ani v poznámkach k vydaniu neuvádza konkrétne indikátory napadnutia. Z popisu chyby však vyplýva, kde hľadať stopy:
- súbory
.jsonnetv repozitároch, ktoré cezimport,importstraleboimportbinnačítajú absolútne cesty, cesty s..alebo symbolické odkazy - volania API
manifestsWithFilesv logochargocd-server. Vznikajú aj pri príkazeargocd app diff --local --server-side-generate. Útok touto cestou nezanechá stopu v repozitári. - neočakávané objekty ConfigMap v manifestoch aplikácií
- opakované reštarty
repo-serverpre nedostatok pamäte (OOMKilled)
Nasledujúce príkazy len čítajú. Prvý prehľadá logy servera, ďalšie dva spustite v naklonovanom repozitári, posledný ukáže reštarty repo-server:
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=-1 --prefix | grep -i manifestswithfiles
grep -rnE --include='*.jsonnet' --include='*.libsonnet' "import(str|bin)?[[:space:]]*['\"](/|[^'\"]*\.\.)" .
find . -path ./.git -prune -o -type l -ls
kubectl describe pods -n argocd -l app.kubernetes.io/name=argocd-repo-server | grep -iE 'restart count|oomkilled'
Logy v klastri sa po čase prepisujú, preto prehľadajte aj centrálny logovací systém, ak ho máte. Ak nájdete podozrivý súbor alebo volanie od neznámeho používateľa, považujte všetky údaje dostupné pre repo-server za uniknuté a vymeňte ich. Pri náleze alebo pochybnosti prizvite odborníka na bezpečnosť Kubernetes, pretože medzi uniknutými údajmi môžu byť aj tokeny servisných účtov.