CVE-2026-113708
9.9CriticalPublished 20 Oct 2026 · NVD status: Undergoing Analysis · AI triage by gemini-3.8-flash
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
- Impact
- Full C/I/A compromise
- Weakness
- CWE-88
Impact
Attackers can execute arbitrary commands inside argocd-repo-server to steal repo credentials and sensitive process data. To exploit it, an attacker needs write access to an application repository or low-privilege read access (Application get permission) to post manifests directly to the API.
Root cause
Kustomize passes URL query values directly to git fetch without an end-of-options separator (--), allowing leading hyphens to inject flags like --upload-pack over file:// transports.
Affected systems
Argo CD 2.7.0 until 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2
CVSS v3.1 · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Fix & remediation
Upgrade Argo CD to 3.3.15, 3.4.10, 3.5.4, or 3.6.0-rc2. The advisory lists no interim mitigation, as blocking repo-server network egress does not stop local file transport execution and updating Kustomize alone does not fix the missing separator.
$ kubectl -n argocd get deployment argocd-repo-server -o jsonpath='{.spec.template.spec.containers[?(@.name=="argocd-repo-server")].image}'AI-suggested. Run it in staging first and check it against the vendor advisory. Why?
NVD description
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. From 2.7.0 until 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2, Kustomize passes ref or version query values from remote resource, base, or component URLs to git fetch without an end-of-options separator. A leading-hyphen value can be parsed as --upload-pack and execute a command inside argocd-repo-server when the remote uses a local transport such as file://. Git does not run the supplied command for an https:// remote. The local transport does not leave the pod, so blocking repo-server egress does not prevent the execution. The command runs as the repo-server user, can read repository credentials and other process-accessible data, and can return output through manifest-generation errors. An attacker can commit a Kustomization to a Git repository that an Application builds or upload files through POST /api/v1/applications/manifestsWithFiles, also exposed by argocd app diff --local --server-side-generate. The upload path requires only Application get permission on an existing Application, without Application update or sync permission or repository write access. Kustomize 5.0.0 introduced acceptance of file://, whereas 4.5.7 rejects that transport; replacing the affected Kustomize with a newer version alone does not correct the missing option separator. This issue is fixed in versions 3.3.15, 3.4.10, 3.5.4, and 3.6.0-rc2.
References
- https://argo-cd.readthedocs.io/en/stable/user-guide/kustomize/#custom-kustomize-versions
- https://github.com/argoproj/argo-cd/commit/25badeb7a1e154805340bb7237e0ce671f3772dd
- https://github.com/argoproj/argo-cd/pull/12299
- https://github.com/argoproj/argo-cd/releases/tag/v3.3.15
- https://github.com/argoproj/argo-cd/releases/tag/v3.4.10
- https://github.com/argoproj/argo-cd/releases/tag/v3.5.4
- https://github.com/argoproj/argo-cd/releases/tag/v3.6.0-rc2
- https://github.com/argoproj/argo-cd/security/advisories/GHSA-9v9p-x54c-58gc
- https://github.com/argoproj/argo-cd/security/advisories/GHSA-j6cw-g6p4-7hch