Coder CVE-2026-46354
CRITICALAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconEnumerate or obtain target vmId
-
DeliveryObtain legitimate Azure IMDS certificate
-
ExploitForge PKCS#7 envelope with target vmId
-
InstallPOST to unauthenticated azure-instance-identity endpoint
-
C2Receive workspace agent session token
-
ExecuteExfiltrate Git SSH key and OAuth tokens
-
ImpactPivot to developer repositories and external services
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | Target Coder v2 deployment must be running an unpatched version AND have workspaces configured with coder_agent.auth = "azure-instance-identity" - deployments using token authentication for agents do not expose the vulnerable POST /api/v2/workspaceagents/azure-instance-identity code path. The attacker must reach the Coder control plane over the network (AV:N) but needs no credentials or user interaction. The only practical prerequisite the vendor itself flags as a limiter is knowledge of the target workspace's vmId, a UUIDv4 that is not directly enumerable and typically requires reconnaissance or prior access to the Azure environment to discover. The attacker also needs any legitimate Azure IMDS leaf certificate, which is trivially obtainable from any Azure VM or from public Certificate Transparency logs. |
| Impact | CVSS 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) aligns with the technical reality: network-reachable, unauthenticated, low complexity, high confidentiality and integrity impact (agent token grants access to SSH keys, OAuth tokens, secrets), and no availability impact. EPSS and KEV data were not provided in the input, so neither active-exploitation nor predicted-exploitation probability can be cited. The practical limiter is knowledge of a target vmId (a UUIDv4) - the vendor itself notes this typically requires prior access or reconnaissance, which tempers the otherwise pure AC:L rating. No public exploit identified at time of analysis, but the advisory documents the bypass technique in enough detail (forge PKCS#7 envelope with valid Azure cert + arbitrary content) that weaponization is straightforward for a motivated attacker. This is a real priority for any Coder deployment that uses azure-instance-identity authentication; deployments using token-based agent auth are not exposed by this specific flaw. |
| Exploit ScenarioDerived | An attacker spins up a throwaway Azure VM (or pulls any Azure IMDS leaf certificate from Certificate Transparency logs) and identifies a target Coder workspace's vmId through reconnaissance or prior low-privilege access. They craft a PKCS#7 envelope containing the legitimate Azure certificate plus a forged JSON payload {"vmId":"<target-uuid>"} without a valid signature over that content, then POST it to the unauthenticated /api/v2/workspaceagents/azure-instance-identity endpoint and receive the victim agent's session token, which they use to GET /workspaceagents/me/gitsshkey and /workspaceagents/me/external-auth to exfiltrate Git SSH private keys and plaintext GitHub/GitLab/Bitbucket OAuth tokens. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 19, 2026
Unauthenticated agent token theft in Coder v2 (self-hosted developer workspace platform) stems from azureidentity.Validate() verifying the PKCS#7 signer's certificate chain but skipping signature verification of the signed content itself. Remote attackers who know a target VM's vmId (a UUIDv4) can forge a PKCS#7 envelope containing a legitimate Azure certificate alongside attacker-controlled content and POST it to the unauthenticated /api/v2/workspaceagents/azure-instance-identity endpoint to receive the victim workspace agent's session token, which then unlocks Git SSH keys, OAuth tokens for GitHub/GitLab/Bitbucket, and workspace secrets. No public exploit identified at time of analysis, but the vulnerability is vendor-confirmed via GHSA-6x44-w3xg-hqqf and a detailed root-cause analysis with attack-path diagram is published.
RemediationAI
Vendor-released patches: upgrade to v2.33.3, v2.32.2, v2.31.12, v2.30.8, v2.29.13, or v2.24.5 depending on your release line (release notes linked from https://github.com/coder/coder/security/advisories/GHSA-6x44-w3xg-hqqf; underlying fix in PR https://github.com/coder/coder/pull/25286). If immediate upgrade is not possible, the vendor-recommended workaround is to reconfigure Azure templates away from Azure Instance Identity to token authentication by setting coder_agent.auth = "token" in the Terraform resource and injecting CODER_AGENT_TOKEN=${coder_agent.main.token} into the agent initialization script's environment; the side effect is that each agent now requires the control plane to provision and distribute a long-lived token, removing the automatic Azure-attested bootstrap and shifting token-rotation responsibility to operators. After upgrading, rotate any agent tokens, Git SSH keys, and OAuth tokens that may have been exposed prior to patching, since past exploitation would not leave obvious traces on the unauthenticated endpoint.
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Coder is an open-source self-hosted cloud development environment (pkg:go/github.com/coder/coder/v2) where workspace agents authenticate to the control plane. For Azure-hosted workspaces, agents present a PKCS#7-signed attestation from Azure Instance Metadata Service (IMDS) to bootstrap their session token. The flaw is a classic CWE-347 (Improper Verification of Cryptographic Signature): the original implementation called signer.Verify() on the certificate chain only, never validating that the PKCS#7 SignedData content was actually signed by the private key corresponding to the embedded certificate. The patch replaces go.mozilla.org/pkcs7 with github.com/smallstep/pkcs7 and uses VerifyWithChainAtTime, which performs both the cryptographic signature check over the content and the chain-of-trust check in a single call. Because any Azure IMDS certificate is reachable (it can be harvested from any Azure VM or pulled from Certificate Transparency logs), the cryptographic trust anchor effectively collapsed to attacker-controllable input.
Know when Jwt Attack gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Primary rating from Vendor (https://github.com/coder/coder).
CVSS VectorVendor: https://github.com/coder/coder
DescriptionCVE.org
Summary
azureidentity.Validate() verifies that the PKCS#7 signer certificate chains to a trusted Azure CA but never verifies the PKCS#7 signature itself. An attacker can embed a legitimate Azure certificate alongside arbitrary content e.g. {"vmId":"<target>"} and the forged vmId will be accepted returning the victim workspace agent's session token.
No authentication is required. The attacker only needs to know a target VM's vmId which is a UUIDv4. > that's a practical limitation which would typically require prior access to be exploited
Root Cause
In unpatched Coder releases the signature over the PKCS#7 content is not validated - only the signing certificate is checked.
Impact
An attacker on any Azure VM or with access to a publicly available Azure IMDS certificate from CT logs can:
- Steal an agent session token by sending a forged PKCS#7 envelope to
POST /api/v2/workspaceagents/azure-instance-identitywhich is unauthenticated. - With the stolen token access:
- Git SSH private key via
GET /workspaceagents/me/gitsshkey: push to repositories and impersonate the workspace owner. - OAuth access tokens via
GET /workspaceagents/me/external-auth: GitHub, GitLab, and Bitbucket tokens in plaintext. - Workspace secrets via the agent manifest: environment variables, file paths, and API keys.
Attack Path Diagram
<img width="5588" height="4176" alt="PKCS7_diagram (1)" src="https://github.com/user-attachments/assets/74e88a89-a995-450d-87ab-6feed03579a5" />
Affected Versions
All versions of Coder v2 are affected.
Patches
Fixed in #25286
The fix was backported to all supported release lines:
Workarounds
If unable to patch we recommend immediately reconfiguring any Azure templates to use token authentication rather than azure-instance-identity until the patch is released and you are fully upgraded.
- Modify the
coder_agent.authvalue to betoken. - Add
CODER_AGENT_TOKEN=${coder_agent.main.token}to the set of environment variables for the Coder Workspace Agent initialization script.
Recognition
We'd like to thank Ben Tran of calif.io and Anthropic’s Security Team (ANT-2026-22445) for independently disclosing this issue!
Executive ViewAI
Coder v2 self-hosted instances face unauthenticated token theft risk, exposing Git SSH keys, OAuth credentials, and workspace secrets. No public exploit identified at time of analysis, but the vulnerability is vendor-confirmed and affects all unpatched deployments, creating direct threats to developer identity and supply chain security.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Affected Products (CPE)CVE.org
More in Jwt Attack
View allWhy is Microsoft republishing a CVE from 2013? We are republishing CVE-2013-3900 in the Security Update Guide to update
Authentication bypass in SimpleHelp 5.5.15 and prior (plus 6.0 pre-release builds) allows remote unauthenticated attacke
Authentication bypass in WSO2 API Manager and related components (Universal Gateway, Traffic Manager, API Control Plane,
Authentication bypass in Fortinet FortiOS, FortiProxy, and FortiSwitchManager allows unauthenticated remote attackers to
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
Security feature bypass in Microsoft .NET (shipped via Visual Studio 2022 17.12/17.14 and Visual Studio 2026 18.7) lets
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. Rated critical severity (CVS
The package jsrsasign before 10.5.25 are vulnerable to Improper Verification of Cryptographic Signature when JWS or JWT
Authentication and authorization bypass in fast-jwt 6.2.0 through 6.2.4 (npm, NearForm) lets a remote, unauthenticated a
A library injection vulnerability exists in Microsoft Teams (work or school) 24046.2813.2770.1094 for macOS. Rated criti
A library injection vulnerability exists in the WebView.app helper app of Microsoft Teams (work or school) 24046.2813.27
A library injection vulnerability exists in the com.microsoft.teams2.modulehost.app helper app of Microsoft Teams (work
Vendor StatusVendor
SUSE
Severity: Critical| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
GHSA-6x44-w3xg-hqqf
NVD
CVE.org
EPSS
Exploit-DB