CVE-2024-31989

CVE-2024-31989 is a critical-severity use of a broken or risky cryptographic algorithm vulnerability in github.com/argoproj/argo-cd/v2 (go), affecting versions < 2.8.19. It is fixed in 2.8.19, 2.9.15, 2.10.10, 2.11.1.

Summary

By default, the Redis database server is not password-protected. Consequently, an attacker with access to the Redis server can gain read/write access to the data in Redis. The attacker can also modify the "mfst" (manifest) key to cause ArgoCD to execute any deployment, potentially leveraging ArgoCD's high privileges to take over the cluster. Updating the "cacheEntryHash" in the manifest JSON is necessary, but since it doesn't use a private key for signing its integrity, a simple script can generate a new FNV64a hash matching the new manifest values. The repo-server, unable to verify if its cache is compromised, will read the altered "mfst" key and initiate an update process for the injected deployment.

It's also possible to edit the "app|resources-tree" key, causing the ArgoCD server to load any Kubernetes resource into the live manifest section of the app preview. This could lead to an information leak.

The fact that the cache in Redis is neither signed nor validated, combined with Redis's default lack of password protection, presents a significant security concern given ArgoCD's high-level permissions within the cluster. A security update should ensure all Redis database values are signed or encrypted.

Details

We began by deploying ArgoCD on an EKS cluster. Surprisingly, we discovered that an unprivileged pod in a different namespace on the same cluster could connect to the Redis server on port 6379. This was unexpected, as we had observed network policy rules restricting access to the Redis server to only the pods application-controller, repo-server, and argocd-server. We later realized that, despite having installed the latest version of the VPC CNI plugin on the EKS cluster, it requires manual enablement through configuration to enforce network policies. This raises concerns that many clients might unknowingly have open access to their Redis servers. We also know your recommendation on this page Argo CD - Secret Management, to enable the network policy plugin.
Further investigation revealed that any pod within my cluster could connect to the Redis server by resolving its address using the Kubernetes DNS server. Exploring the contents of the Redis server, we found that we could edit the 'mfst' value of the latest revision. By updating the “cacheEntryHash”, we made the repo-server accept it as a legitimate cache, leading ArgoCD to apply this configuration.
These tests were conducted using the default configuration, with regular ArgoCD and ArgoCD via helm deployment. This scenario presents a viable attack path, enabling any pod with access to the cluster to potentially exploit ArgoCD's high permissions and take over the cluster. We believe there is a critical need to enhance the security of the cache and its components. Given that many clients likely use ArgoCD in a plug-and-play manner, they could be exposed to significant risk. I am willing to offer assistance or answer any questions you might have.

PoC

We tested this using the latest version of ArgoCD, configured with default settings. ArgoCD was installed either by applying a YAML file or through Helm. We wrote a few Go programs to decompress the Redis values and regenerate the "cacheEntryHash", but these programs were relatively straightforward.

To modify the cluster deployment, you can alter the "mfst" key of the latest revision. For instance, add the following line:

{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"labels":{"app.kubernetes.io/instance":"myapp1"},"name":"everything-allowed"},"spec":{"replicas":1,"selector":{"matchLabels":{"app":"everything-allowed"}},"template":{"metadata":{"labels":{"app":"everything-allowed"}},"spec":{"containers":[{"args":["while true; do sleep 30; done;"],"command":["/bin/sh","-c","--"],"image":"ubuntu","name":"everything-allowed-pod","securityContext":{"privileged":true},"volumeMounts":[{"mountPath":"/host","name":"noderoot"}]}],"hostIPC":true,"hostNetwork":true,"hostPID":true,"volumes":[{"hostPath":{"path":"/"},"name":"noderoot"}]}}}

This addition creates a highly privileged pod.

To cause the web page to load a different Kubernetes resource in the "Live Manifest", edit the "app|resources-tree" manifest. Modify one of the component's kind, namespace, and name. Upon reloading the web page and clicking on the newly created asset, an error message appears: "Unable to load data: argocd-secret not found as part of application myapp." However, the resource's description is still transmitted to the browser, as seen in this URL format:

https://127.0.0.1:8081/api/v1/applications/myapp/resource?name=argocd-secret&appNamespace=argocd&namespace=argocd&resourceName=argocd-secret&version=v1&kind=Secret&group=

This situation results in information leakage.

Impact

This vulnerability could lead to Privilege Escalation to the level of cluster controller, or to information leakage, affecting anyone who does not have strict access controls on their Redis instance.

The application uses a cryptographic algorithm known to have weaknesses, such as MD5, SHA-1, or DES. Typical impact: compromised confidentiality or integrity of protected data.

CVE-2024-31989 has a CVSS score of 9.0 (Critical). The vector is reachable from an adjacent network, low privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (2.8.19, 2.9.15, 2.10.10, 2.11.1); upgrading removes the vulnerable code path.

Affected versions

github.com/argoproj/argo-cd/v2 (< 2.8.19) github.com/argoproj/argo-cd/v2 (>= 2.9.0-rc1, < 2.9.15) github.com/argoproj/argo-cd/v2 (>= 2.10.0-rc1, < 2.10.10) github.com/argoproj/argo-cd/v2 (>= 2.11.0-rc1, < 2.11.1) github.com/argoproj/argo-cd (<= 1.8.7)

Security releases

github.com/argoproj/argo-cd/v2 → 2.8.19 (go) github.com/argoproj/argo-cd/v2 → 2.9.15 (go) github.com/argoproj/argo-cd/v2 → 2.10.10 (go) github.com/argoproj/argo-cd/v2 → 2.11.1 (go)

Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.

See it in your environment

Remediation advice

Upgrade the following packages to resolve this vulnerability:

github.com/argoproj/argo-cd/v2 to 2.8.19 or later; github.com/argoproj/argo-cd/v2 to 2.9.15 or later; github.com/argoproj/argo-cd/v2 to 2.10.10 or later; github.com/argoproj/argo-cd/v2 to 2.11.1 or later

Kodem Kai can prioritize this vulnerability in your dependency tree and generate a fix recommendation.

Frequently Asked Questions

  1. What is CVE-2024-31989? CVE-2024-31989 is a critical-severity use of a broken or risky cryptographic algorithm vulnerability in github.com/argoproj/argo-cd/v2 (go), affecting versions < 2.8.19. It is fixed in 2.8.19, 2.9.15, 2.10.10, 2.11.1. The application uses a cryptographic algorithm known to have weaknesses, such as MD5, SHA-1, or DES.
  2. How severe is CVE-2024-31989? CVE-2024-31989 has a CVSS score of 9.0 (Critical). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
  3. Which packages are affected by CVE-2024-31989?
    • github.com/argoproj/argo-cd/v2 (go) (versions < 2.8.19)
    • github.com/argoproj/argo-cd (go) (versions <= 1.8.7)
  4. Is there a fix for CVE-2024-31989? Yes. CVE-2024-31989 is fixed in 2.8.19, 2.9.15, 2.10.10, 2.11.1. Upgrade to this version or later.
  5. Is CVE-2024-31989 exploitable, and should I be worried? Whether CVE-2024-31989 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
  6. What actually determines whether CVE-2024-31989 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
  7. How do I fix CVE-2024-31989?
    • Upgrade github.com/argoproj/argo-cd/v2 to 2.8.19 or later
    • Upgrade github.com/argoproj/argo-cd/v2 to 2.9.15 or later
    • Upgrade github.com/argoproj/argo-cd/v2 to 2.10.10 or later
    • Upgrade github.com/argoproj/argo-cd/v2 to 2.11.1 or later

Other vulnerabilities in github.com/argoproj/argo-cd/v2

CVE-2026-45738CVE-2025-59538CVE-2025-59537CVE-2025-59531CVE-2025-55191

Stop the waste.
Protect your environment with Kodem.