Your RSA-2048 keys break in 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 reference exists, 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
Mar 18, 2024
Updated
Aug 12, 2026
Affected
4 pkgs
Patched
3 / 4
Exploits
1 known
Exploitation data as of Sep 22, 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 CVEs66th percentile — riskier than 66% of all scored CVEsHighest risk

EPSS (Exploit Prediction Scoring System) is a daily probability model maintained by FIRST.org. It estimates the likelihood a CVE will be exploited in production environments within the next 30 days, derived from real-world threat intelligence signals.

How urgent is this, really

CVE-2024-21661 plotted by exploitation likelihood (EPSS) against impact (CVSS). The shaded corner — EPSS 50%+ and CVSS 7.0+ — is where this CVE doesn't sit, though severity or exploitability alone can still warrant action.

Where this sits among everything scored

Of 377,636 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Real counts from FIRST.org, not a sample — log-scaled since the landscape is heavily right-skewed.

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/v22.9.0&&< 2.9.92.9.9go get github.com/argoproj/argo-cd/v2@v2.9.9
🐹Gogithub.com/argoproj/argo-cd/v22.10.0&&< 2.10.42.10.4go get github.com/argoproj/argo-cd/v2@v2.10.4
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

    No patched version of github.com/argoproj/argo-cd has shipped for CVE-2024-21661 yet. Where your build allows, override or pin the dependency away from the vulnerable range, and apply any maintainer-recommended mitigation.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

  4. How O3 protects you

    O3 Security's impact-aware SCA analyses which vulnerable code paths your application actually calls, so a match like CVE-2024-21661 can be triaged on real exposure rather than presence alone.

Tailored to CVE-2024-21661. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.

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
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?

O3 Security finds CVE-2024-21661 across Go dependencies, including transitive ones, and its impact-aware SCA ranks findings by whether your code actually calls the vulnerable path.

CVE-2024-21661: argo-cd DoS (High 7.5) | O3 Security