Miggo Logo

CVE-2024-36106: Argo-cd authenticated users can enumerate clusters by name

4.3

CVSS Score
3.1

Basic Information

EPSS Score
0.63652%
Published
6/6/2024
Updated
6/6/2024
KEV Status
No
Technology
TechnologyGo

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Package NameEcosystemVulnerable VersionsFirst Patched Version
github.com/argoproj/argo-cdgo>= 0.11.0, < 2.9.172.9.17
github.com/argoproj/argo-cdgo>= 2.10.0, < 2.10.122.10.12
github.com/argoproj/argo-cdgo>= 2.11.0, < 2.11.32.11.3

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability stemmed from error message differentiation between cluster existence and permission states. The original implementation in Get() used a two-step process: 1) Check cluster existence via getClusterWith403IfNotExist, which would return a 'not found' error for non-existent clusters, and 2) Perform permission checks. This created distinct error messages observable through the API. The patch consolidates these checks into getClusterAndVerifyAccess that returns uniform permission errors regardless of cluster existence. The test cases explicitly verify that all error paths now return identical permission denial messages to prevent enumeration.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

### Imp**t It’s possi*l* *or *ut**nti**t** us*rs to *num*r*t* *lust*rs *y n*m* *y insp**tin* *rror m*ss***s: ``` $ *url -k '*ttps://lo**l*ost:****/*pi/v*/*lust*rs/in-*lust*r?i*.typ*=n*m*' -* "*ut*oriz*tion: ***r*r $tok*n" {"*rror":"p*rmission **ni*

Reasoning

T** vuln*r**ility st*mm** *rom *rror m*ss*** *i***r*nti*tion **tw**n *lust*r *xist*n** *n* p*rmission st*t*s. T** ori*in*l impl*m*nt*tion in **t() us** * two-st*p pro**ss: *) ****k *lust*r *xist*n** vi* **t*lust*rWit****I*Not*xist, w*i** woul* r*turn