CVE-2025-55190 Overview
Argo CD, the popular declarative GitOps continuous delivery tool for Kubernetes, contains a critical information disclosure vulnerability that allows API tokens with project-level permissions to retrieve sensitive repository credentials through the project details API endpoint. This Sensitive Data Exposure flaw enables unauthorized access to usernames and passwords even when tokens only possess standard application management permissions without explicit secrets access.
The vulnerability extends beyond project-level permissions, affecting any token with project get permissions including global permissions such as p, role/user, projects, get, *, allow. This represents a significant breach of the principle of least privilege in Argo CD's authorization model.
Critical Impact
Attackers with limited project-level API tokens can extract repository credentials (usernames and passwords) through the GetDetailedProject API endpoint, potentially compromising source code repositories and enabling supply chain attacks.
Affected Products
- Argo CD versions 2.13.0 through 2.13.8
- Argo CD versions 2.14.0 through 2.14.15
- Argo CD versions 3.0.0 through 3.0.12
- Argo CD versions 3.1.0-rc1 through 3.1.1
Discovery Timeline
- 2025-09-04 - CVE-2025-55190 published to NVD
- 2025-09-19 - Last updated in NVD database
Technical Details for CVE-2025-55190
Vulnerability Analysis
This vulnerability (CWE-200: Exposure of Sensitive Information to an Unauthorized Actor) stems from insufficient access control checks in Argo CD's project details API endpoint. The GetDetailedProject function inadvertently returns repository configuration objects containing sensitive credential fields to API callers who should not have access to this information.
The core issue is that the repository object structure includes authentication credentials (username, password) that are transmitted in API responses without proper sanitization. When a user or service account queries project details, the response includes repository connection information with embedded secrets, regardless of whether the caller has explicit permissions to view secrets.
Root Cause
The root cause lies in the improper handling of repository and cluster configuration objects in the Argo CD API layer. The Repository struct's transformation function in repository_types.go was returning the Username field in responses, and cluster objects lacked a proper sanitization method to strip sensitive configuration data before transmission.
The fix introduces a Sanitized() method for cluster objects and removes the Username field from repository response objects, ensuring that sensitive credentials are not exposed through the API regardless of the caller's permission level.
Attack Vector
This vulnerability is exploitable over the network with low attack complexity. An attacker requires only low-privilege access—specifically, any API token with project get permissions. The attack does not require user interaction and can result in cross-scope impact, potentially allowing attackers to access credentials for repositories and clusters across the Argo CD installation.
An attacker would:
- Obtain or compromise an API token with basic project read permissions
- Query the project details API endpoint
- Extract repository credentials (usernames, passwords) from the API response
- Use these credentials to access source code repositories directly
// Before fix - Username was exposed in API responses
// pkg/apis/application/v1alpha1/repository_types.go
Repo: repo.Repo,
Type: repo.Type,
Name: repo.Name,
- Username: repo.Username,
Insecure: repo.IsInsecure(),
EnableLFS: repo.EnableLFS,
EnableOCI: repo.EnableOCI,
Source: GitHub Commit e8f86101f5378662ae6151ce5c3a76e9141900e8
// After fix - Sanitized() method added to strip sensitive data
// pkg/apis/application/v1alpha1/types.go
func (c *Cluster) Sanitized() *Cluster {
return &Cluster{
ID: c.ID,
Server: c.Server,
Name: c.Name,
Project: c.Project,
Namespaces: c.Namespaces,
Shard: c.Shard,
Labels: c.Labels,
Annotations: c.Annotations,
ClusterResources: c.ClusterResources,
ConnectionState: c.ConnectionState,
ServerVersion: c.ServerVersion,
Info: c.Info,
RefreshRequestedAt: c.RefreshRequestedAt,
Config: ClusterConfig{
AWSAuthConfig: c.Config.AWSAuthConfig,
ProxyUrl: c.Config.ProxyUrl,
DisableCompression: c.Config.DisableCompression,
TLSClientConfig: TLSClientConfig{
Insecure: c.Config.Insecure,
},
},
}
}
Source: GitHub Commit e8f86101f5378662ae6151ce5c3a76e9141900e8
Detection Methods for CVE-2025-55190
Indicators of Compromise
- Unusual API calls to project details endpoints from service accounts with limited permissions
- API audit logs showing repeated queries to /api/v1/projects/{name}/detailed endpoints
- Evidence of repository credential usage from unexpected IP addresses or locations
- Git repository access logs showing authentication from Argo CD user credentials outside of normal CD operations
Detection Strategies
- Enable comprehensive API audit logging in Argo CD and monitor for project details API calls
- Implement anomaly detection for API token usage patterns, particularly tokens querying multiple projects
- Monitor Git repository access logs for credential usage anomalies that may indicate leaked credentials
- Review Argo CD RBAC configurations to identify overly permissive project get permissions
Monitoring Recommendations
- Configure alerts for API calls to project details endpoints from non-administrative tokens
- Implement network monitoring between Argo CD components and external repositories for unusual patterns
- Set up credential rotation monitoring to ensure repository secrets are rotated after patching
- Deploy SentinelOne Singularity Cloud Security to monitor Kubernetes workloads for unauthorized API access
How to Mitigate CVE-2025-55190
Immediate Actions Required
- Upgrade Argo CD immediately to a patched version: 2.13.9, 2.14.16, 3.0.14, or 3.1.2
- Rotate all repository credentials (usernames and passwords) configured in Argo CD
- Audit existing API tokens and revoke any unnecessary project-level permissions
- Review RBAC policies to minimize tokens with global project get permissions
Patch Information
The Argo CD maintainers have released security patches in versions 2.13.9, 2.14.16, 3.0.14, and 3.1.2. The fix removes the Username field from repository API responses and introduces a Sanitized() method for cluster objects to ensure sensitive configuration data is stripped before API transmission. See the GitHub Security Advisory and commit e8f86101 for technical details.
Workarounds
- Restrict network access to the Argo CD API server to trusted sources only
- Implement additional authentication layers (e.g., mTLS, VPN) for Argo CD API access
- Remove project get permissions from tokens that do not require them
- Consider using Argo CD's SSO integration with more granular RBAC if direct patching is delayed
# Verify your Argo CD version
argocd version --client
# Check for tokens with project get permissions
kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=repository -o yaml
# After patching, rotate repository credentials
argocd repo list
argocd repo rm <repo-url>
argocd repo add <repo-url> --username <new-user> --password <new-password>
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


