CVE-2024-36106
Executive Summary
CVE-2024-36106 is an information disclosure vulnerability in Argo CD, a declarative, GitOps continuous delivery tool for Kubernetes. The vulnerability allows authenticated users to enumerate cluster names by inspecting error messages. Additionally, if an attacker knows the names of clusters, they can enumerate the names of projects that have project-scoped clusters. This vulnerability has a CVSS score of 4.3 (Medium) and is fixed in Argo CD versions 2.11.3, 2.10.12, and 2.9.17.
The vulnerability stems from improper handling of error messages when querying cluster information. When an authenticated user attempts to access a cluster that does not exist or for which they lack permissions, the error message may inadvertently reveal the names of existing clusters or projects. This information can be used by an attacker to map the internal infrastructure and plan further attacks.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
Argo CD is a Go-based application distributed as a container image and via the Argo CD CLI. The vulnerability is in the core application logic, not in a specific package dependency. However, organizations using Argo CD should ensure they are using a patched version to prevent information disclosure. The fix is included in the official Argo CD releases, and users should update their deployments accordingly.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
- Base Score: 4.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: Low (C:L)
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
The threat level is Medium due to the low attack complexity and the potential for information gathering. While the vulnerability does not allow direct code execution or data modification, it can be used to map internal infrastructure, which may facilitate further attacks.
Deep Dive & Mechanics
The vulnerability exists in the Argo CD API server, specifically in the endpoints that handle cluster and project queries. When an authenticated user makes a request to list or access clusters, the server validates the user's permissions. If the user does not have access to a particular cluster, the server returns an error message. However, the error message may include the name of the cluster or project, allowing the user to infer its existence.
For example, if a user attempts to access a cluster named "production-cluster" and does not have permissions, the error message might say "cluster 'production-cluster' not found" or "access denied to cluster 'production-cluster'". This reveals that the cluster exists. Similarly, if a user knows a cluster name and tries to list projects associated with it, the error message may reveal project names.
The vulnerability is particularly dangerous in multi-tenant environments where different teams or customers have access to different clusters and projects. An attacker with low-privileged access can use this vulnerability to map the entire infrastructure, identifying high-value targets.
Vulnerable vs. Patched Code
The vulnerable code is in the Argo CD API server's cluster and project handlers. The fix involves sanitizing error messages to remove any information that could be used for enumeration.
Vulnerable Code (Go):
func (s *Server) GetCluster(ctx context.Context, q *cluster.ClusterQuery) (*cluster.Cluster, error) {
cluster, err := s.db.GetCluster(ctx, q.Name)
if err != nil {
return nil, fmt.Errorf("cluster '%s' not found: %v", q.Name, err)
}
// ... rest of the function
}
Patched Code (Go):
func (s *Server) GetCluster(ctx context.Context, q *cluster.ClusterQuery) (*cluster.Cluster, error) {
cluster, err := s.db.GetCluster(ctx, q.Name)
if err != nil {
return nil, fmt.Errorf("cluster not found")
}
// ... rest of the function
}
The patched code removes the cluster name from the error message, preventing enumeration.
Exploitation & Lab Setup
Red Team
To exploit this vulnerability, an attacker needs authenticated access to the Argo CD API server. The attacker can then send requests to enumerate clusters and projects.
Step 1: Authenticate to Argo CD
argocd login <argocd-server> --username <user> --password <pass>
Step 2: Enumerate clusters by name
# Attempt to get a cluster with a guessed name
argocd cluster get <cluster-name>
# If the cluster exists but the user lacks permissions, the error message may reveal the name
Step 3: Enumerate projects for known clusters
# List projects associated with a known cluster
argocd proj list --cluster <cluster-name>
# Error messages may reveal project names
Blue Team
To detect exploitation attempts, monitor Argo CD API server logs for unusual error messages or repeated requests to non-existent clusters.
Detection via Log Analysis:
# Search for error messages containing cluster names
grep "cluster.*not found" /var/log/argocd-server.log | grep -v "cluster not found"
Detection via Network Traffic:
Monitor for repeated API calls to /api/v1/clusters/{name} with different cluster names.
Indicators of Compromise (IOCs)
- Log Entries: Error messages containing cluster or project names in the Argo CD API server logs.
- API Calls: Repeated requests to
/api/v1/clusters/{name}or/api/v1/projectswith different parameters. - Network Traffic: Unusual patterns of API calls from a single user or IP address.
Detection Engineering
YARA Rule
rule CVE_2024_36106_ArgoCD_Enumeration {
meta:
description = "Detects Argo CD error messages that may indicate cluster enumeration"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2024-36106"
strings:
$error1 = "cluster '" ascii
$error2 = "not found" ascii
$error3 = "access denied to cluster" ascii
condition:
any of ($error*) and #error1 > 5
}
Sigma Rule
title: Argo CD Cluster Enumeration Attempt
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects multiple attempts to access non-existent or unauthorized clusters in Argo CD
author: Valters IT
logsource:
product: argo-cd
service: server
detection:
selection:
event_id: 1
message|contains: "cluster"
condition: selection | count() > 10 by src_ip within 5m
falsepositives:
- Legitimate administrative actions
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2024-36106 Argo CD Cluster Enumeration"; flow:to_server,established; content:"/api/v1/clusters/"; http_uri; pcre:"/\/api\/v1\/clusters\/[a-zA-Z0-9_-]+$/"; threshold: type both, track by_src, count 10, seconds 300; sid:1000001; rev:1;)
Remediation & Mitigation
- Upgrade Argo CD: Update to version 2.11.3, 2.10.12, or 2.9.17 or later.
- Restrict API Access: Use network policies and authentication to limit access to the Argo CD API server.
- Monitor Logs: Implement logging and monitoring to detect enumeration attempts.
- Apply Principle of Least Privilege: Ensure users have only the permissions they need.
- Use Web Application Firewall (WAF): Deploy a WAF to block suspicious API requests.
Valters IT
Securing Your Digital Future