NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
🐹
🐹 Go
Not in CISA KEV
HIGH severity

CVE-2024-21661 — argo-cd

HIGHFix: argoproj/argo-cd@2a22e19

CVE-2024-21661 is a high-severity (CVSS 7.5) Out-of-bounds Write vulnerability in github.com/argoproj/argo-cd. 1 public exploit or proof-of-concept reference is indexed, so weaponization risk is real. A fix is available for github.com/argoproj/argo-cd — see the affected versions and patch details below.

Argo CD Denial of Service (DoS) Vulnerability Due to Unsafe Array Modification in Multi-threaded Environment

Also known asBIT-argo-cd-2024-21661GHSA-6v85-wr92-q4p7GO-2024-2654
Published
Updated
Affected
4 pkgs
Patched
3 / 4
Exploits
1 known
Exploitation data as of Nov 5, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

Proof-of-concept exploit code exists

  • CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.

Exploitation and automatability from CISA’s SSVC triage for CVE-2024-21661.

EPSS Exploitation Probability

via FIRST.org ↗
1.2%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs68th percentile — riskier than 68% of all scored CVEsHighest risk
0.68%1.34%2.01%2.68%2.2%1.2%May 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

How urgent is this, really

Where this sits among everything scored

Real-World Exposure

4 pkgs affected
🐹github.com/argoproj/argo-cd🐹github.com/argoproj/argo-cd/v2🐹github.com/argoproj/argo-cd/v2🐹github.com/argoproj/argo-cd/v2

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

Description

Summary

An attacker can exploit a critical flaw in the application to initiate a Denial of Service (DoS) attack, rendering the application inoperable and affecting all users. The issue arises from unsafe manipulation of an array in a multi-threaded environment.

Details

The vulnerability is rooted in the application's code, where an array is being modified while it is being iterated over. This is a classic programming error but becomes critically unsafe when executed in a multi-threaded environment. When two threads interact with the same array simultaneously, the application crashes.

The core issue is located in expireOldFailedAttempts function:

func expireOldFailedAttempts(maxAge time.Duration, failures *map[string]LoginAttempts) int {

expiredCount := 0  
for key, attempt := range *failures {

if time.Since(attempt.LastFailed) > maxAge*time.Second { expiredCount += 1  
delete(*failures, key) // Vulnerable code

} }

return expiredCount }

The function modifies the array while iterating it which means the code will cause an error and crash the application pod, inspecting the logs just before the crash we can confirm:

goroutine 2032 [running]: github.com/argoproj/argo-cd/v2/util/session.expireOldFailedAttempts(0x12c, 0xc000adecd8)

/go/src/github.com/argoproj/argo-cd/util/session/sessionmanager.go:304 +0x7c github.com/argoproj/argo-cd/v2/util/session.(*SessionManager).updateFailureCount(0xc00035 af50, {0xc001b1f578, 0x11}, 0x1)

/go/src/github.com/argoproj/argo-cd/util/session/sessionmanager.go:320 +0x7f github.com/argoproj/argo-cd/v2/util/session.(*SessionManager).VerifyUsernamePassword(0xc 00035af50, {0xc001b1f578, 0x11}, {0xc000455148, 0x8})

PoC

To reproduce the vulnerability, you can use the following steps:

  1. Launch the application.
  2. Trigger the code path that results in the expireOldFailedAttempts() function being called in multiple threads.
  3. In the attached PoC script we are restarting the server in a while loop, causing the application to be unresponsive at all.

Impact

This is a Denial of Service (DoS) vulnerability. Any attacker can crash the application continuously, making it impossible for legitimate users to access the service. The issue is exacerbated because it does not require authentication, widening the pool of potential attackers.

Affected Packages

4 total 3 fixed
EcosystemPackageVulnerable rangeFix
🐹Gogithub.com/argoproj/argo-cdall versionsNo fix
🐹Gogithub.com/argoproj/argo-cd/v2all versions2.8.13go get github.com/argoproj/argo-cd/v2@v2.8.13
🐹Gogithub.com/argoproj/argo-cd/v2≥ 2.9.0&&< 2.9.92.9.9go get github.com/argoproj/argo-cd/v2@v2.9.9
🐹Gogithub.com/argoproj/argo-cd/v2≥ 2.10.0&&< 2.10.42.10.4go get github.com/argoproj/argo-cd/v2@v2.10.4

Affected Products

1 product · 3 configurations
Application
argo cdargoproj
≥ 2.10.0 && < 2.10.4
range
Exploits & PoCs
1

Research use only. For defensive security, authorized penetration testing, and academic research only. Never execute exploit code against systems without explicit written authorization.

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/argoproj/argo-cd, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    A fix is available for CVE-2024-21661; check the affected-versions list above or the advisory for the patched release of github.com/argoproj/argo-cd, then make sure no transitive dependency still pins the vulnerable range.

  3. Workarounds

    Stop feeding it untrusted input: reject or quarantine files and payloads from unverified sources until you can upgrade, restrict accepted formats to the ones you actually need, and run the parsing or decoding step in a least-privileged sandbox or short-lived worker so a crash or corrupted read cannot reach the rest of the process.

Fixing This On Your OS

If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.

Red HatImportant
Workaround published by Red Hat
Red Hat has investigated whether a possible mitigation exists for this issue, and has not been able to identify a practical example. Please update the affected package as soon as possible.
Source: Red Hat security advisory for CVE-2024-21661 (CC BY 4.0)
ProductFixed inAdvisory
Red Hat OpenShift GitOps 1.10openshift-gitops-1/argocd-rhel8:v1.10.4-1RHSA-2024:1700
Red Hat OpenShift GitOps 1.11openshift-gitops-1/argocd-rhel8:v1.11.3-2RHSA-2024:1697
Red Hat OpenShift GitOps 1.12openshift-gitops-argocd-cli-0:1.12.1-5.el8RHSA-2024:1752
Red Hat OpenShift GitOps 1.12openshift-gitops-1/argocd-rhel8:v1.12.1-1RHSA-2024:1753

Frequently Asked Questions

### Summary An attacker can exploit a critical flaw in the application to initiate a Denial of Service (DoS) attack, rendering the application inoperable and affecting all users. The issue arises from unsafe manipulation of an array in a multi-threaded environment. ### Details The vulnerability is rooted in the application's code, where an array is being modified while it is being iterated over. This is a classic programming error but becomes critically unsafe when executed in a multi-threaded environment. When two threads interact with the same array simultaneously, the application crashes.
O3 Security · Impact-Aware SCA

Is CVE-2024-21661 in your dependencies?

Find it across Go, including transitive dependencies.

CVE-2024-21661: argo-cd DoS — Fixed in 2.8.13