Miggo Logo

CVE-2025-59538: Argo CD Unauthenticated Remote DoS via malformed Azure DevOps git.push webhook

7.5

CVSS Score
3.1

Basic Information

EPSS Score
-
Published
9/30/2025
Updated
9/30/2025
KEV Status
No
Technology
TechnologyGo

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Package NameEcosystemVulnerable VersionsFirst Patched Version
github.com/argoproj/argo-cd/v2go>= 2.9.0-rc1, <= 2.14.192.14.20
github.com/argoproj/argo-cd/v3go= 3.2.0-rc13.2.0-rc2
github.com/argoproj/argo-cd/v3go>= 3.1.0-rc1, <= 3.1.73.1.8
github.com/argoproj/argo-cd/v3go>= 3.0.0-rc1, <= 3.0.183.0.19

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability lies in the affectedRevisionInfo function within util/webhook/webhook.go. The provided vulnerability description explicitly points out the code snippet where an index-out-of-range panic occurs when processing an Azure DevOps git.push webhook. The panic happens because the code accesses payload.Resource.RefUpdates[0] without verifying that the RefUpdates slice is not empty. The provided commit 1a023f1ca7fe4ec942b4b6696804988d5a632baf confirms this by adding a length check (if len(payload.Resource.RefUpdates) > 0) before the vulnerable code block. The crash log also confirms the vulnerable function is github.com/argoproj/argo-cd/v3/util/webhook.affectedRevisionInfo. Since affectedRevisionInfo is a method of the ArgoCDWebhookHandler struct, the function name that would appear in a Go profiler is ArgoCDWebhookHandler.affectedRevisionInfo.

Vulnerable functions

ArgoCDWebhookHandler.affectedRevisionInfo
util/webhook/webhook.go
The function `affectedRevisionInfo` processes webhook payloads. In the case of an Azure DevOps `git.push` event, the code directly accesses the first element of the `RefUpdates` slice (`payload.Resource.RefUpdates[0]`) without checking if the slice is empty. An attacker can send a specially crafted webhook with an empty `refUpdates` array, causing a panic (index out of range) and crashing the Argo CD server process, leading to a denial of service.

WAF Protection Rules

WAF Rule

### Summ*ry In t** ****ult *on*i*ur*tion, `w***ook.*zur***vops.us*rn*m*` *n* `w***ook.*zur***vops.p*sswor*` not s*t, *r*o **’s /*pi/w***ook *n*point *r*s**s t** *ntir* *r*o**-s*rv*r pro**ss w**n it r***iv*s *n *zur* **vOps Pus* *v*nt w*os* JSON *rr*

Reasoning

T** vuln*r**ility li*s in t** `*****t**R*visionIn*o` *un*tion wit*in `util/w***ook/w***ook.*o`. T** provi*** vuln*r**ility **s*ription *xpli*itly points out t** *o** snipp*t w**r* *n in**x-out-o*-r*n** p*ni* o**urs w**n pro**ssin* *n *zur* **vOps `*i