Argo CD v3.3.9: The Patch Release That Exposed a Critical Secret Leak

| |

5 min read

Argo logo

Argo CD v3.3.9 dropped on April 30th, 2026, and if you thought it was just another patch release to ignore, congratulations — you have excellent instincts. But this one sneaks a critical security vulnerability into the changelog like a wolf in sheep’s clothing.

Argo CD is the open-source GitOps continuous delivery tool from CNCF that lets you declaratively manage Kubernetes applications from Git repositories. Think of it as the traffic controller for your cluster — it watches your Git repo, compares what’s in there to what’s actually running, and makes sure they match. If someone changes something in Git, Argo CD picks it up and applies it. If someone changes something directly in the cluster, Argo CD fights back and puts it back. It is the backbone of GitOps pipelines for thousands of organizations.

So why should you care about v3.3.9? Because it fixes four bugs, corrects one documentation entry, and patches a critical vulnerability that lets anyone with read-only access to your Argo CD instance extract plaintext Kubernetes secrets from etcd. Not a typo. Plaintext secrets.

In the world of cloud-native infrastructure, the most dangerous releases are the ones that look boring. v3.3.9 is a masterclass in that philosophy.

What’s New (Or Rather, What’s Fixed)

Let’s walk through what actually changed in this release. Spoiler: it’s a patch release, so “what’s new” is a generous framing. What we have is “what was broken and got un-broken.”

1. The Security Fix You Actually Need to Care About

GHSA-3v3m-wc6v-x4x3 — a critical vulnerability in Argo CD’s ServerSideDiff endpoint. This is the headline, the reason this release exists, and the thing that will keep you up at night if you don’t patch.

Here’s what happens: Argo CD masks secret data in every endpoint that returns Kubernetes resource state. Every single one. Except the ServerSideDiff endpoint (/application.ApplicationService/ServerSideDiff). That one returns raw, unmasked PredictedLive and NormalizedLive states directly into the API response.

Now, normally Argo CD has a defense layer called removeWebhookMutation() that strips non-Argo CD-managed fields from the Server-Side Apply dry-run response. But here’s the catch: this defense is entirely skipped when the Application has the annotation argocd.argoproj.io/compare-options: IncludeMutationWebhook=true.

When that annotation is set, the raw Kubernetes SSA dry-run response — which contains real Secret values read from etcd — gets flown directly into the API response with zero masking. And since every authenticated Argo CD user has get access via the default role catch-all policy, any authenticated user can extract plaintext secrets.

Who is affected? Anyone running Argo CD versions 3.2.0 through 3.3.8 with Applications that have the IncludeMutationWebhook=true annotation and whose Secret data fields are owned by at least one non-Argo CD SSA field manager (like kube-controller-manager). If argocd-controller is the sole field manager for the secret data, the SSA dry-run garbage-collects those fields and the leak doesn’t happen. But if a second manager exists? The real values survive in the response.

Upgrade to v3.3.9 immediately if you match those conditions. There is no workaround other than upgrading.

Full advisory: GHSA-3v3m-wc6v-x4x3

2. Server Delete Error — Fixed

Issue #27495 — Argo CD would throw an error when attempting a second delete operation. If you’ve ever tried to delete an Application and gotten a confusing error message on the second attempt, this is the fix for you. Cherry-picked from the main branch for the 3.3 line.

PR #27495 via PR #27501

3. Pod Logs Viewer Crash — Fixed

Issue #27553 — The Argo CD UI would crash when viewing pod logs if the container index was stale. This is one of those bugs that sounds minor until you’re in the middle of debugging a production issue and the UI just disappears. Now it won’t. The UI handles stale container indices gracefully instead of panicking.

PR #27553 via PR #27565

4. ApplicationSet DuckType Generator Panic — Fixed

Issue #27265 — The ApplicationSet DuckType Generator would panic when encountering non-string values in Cluster configurations. If you use ApplicationSets with dynamic cluster references that might contain non-string data types, this was a silent killer. Now it handles those values gracefully.

PR #27265 via PR #27525

5. Redis Cache Metadata — Fixed

Issue #27593 — Argo CD’s ocimetadata was not being properly stored to and retrieved from the Redis cache. This could cause performance degradation or incorrect caching behavior for applications that rely on Redis-backed metadata storage. The fix ensures metadata round-trips correctly through the cache layer.

PR #27593

Bug Fixes at a Glance

Documentation Fix

Issue #27612 — The progressive sync documentation was updated to reflect that it was promoted to beta in v3.3.0. This is the kind of fix that only the Argo CD team would notice, but it matters if you’re reading the docs and wondering why things don’t match.

PR #27612

Should You Upgrade?

Yes. Not because of the bug fixes (though those are nice). Because of the critical security vulnerability that turns your Argo CD instance into a secret-extraction machine for anyone with read access. If you’re running v3.2.0 through v3.3.8, patch now.

The upgrade path is straightforward — same as any Argo CD update. Use Helm, Kustomize, or the Argo CD CLI to apply the new image tag. No config changes needed.

And while you’re at it, audit your Applications for the IncludeMutationWebhook=true annotation. If you have it and your secrets are managed by multiple field managers, you’re walking through a minefield until you upgrade.

Learn More