Coder: PKCS#7 signature bypass in Azure instance identity allows unauthenticated agent token theft
Coder allows organizations to provision remote development environments via Terraform. In versions prior tp 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3, `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":""}` 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. Versions 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3 patch the issue. As a workaround, reconfigure any Azure templates to use token authentication rather than `azure-instance-identity`.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-46354
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 4 Nov 2026, 17:01 UTC · Revision 1
Source evidence
Coder: PKCS#7 signature bypass in Azure instance identity allows unauthenticated agent token theft
core-osv · Original sourcePublished 7 Jul 2026, 21:10 UTC
Coder allows organizations to provision remote development environments via Terraform. In versions prior tp 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3, `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":""}` 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. Versions 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3 patch the issue. As a workaround, reconfigure any Azure templates to use token authentication rather than `azure-instance-identity`.
osv:CVE-2026-46354
Complete source record
{
"id": "4592e33e3ce05e45bc53f367ea68d68bb1be8f90a1f8c083707ba1ca6562f37d",
"url": "https://osv.dev/vulnerability/CVE-2026-46354",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Coder: PKCS#7 signature bypass in Azure instance identity allows unauthenticated agent token theft",
"summary": "Coder allows organizations to provision remote development environments via Terraform. In versions prior tp 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3, `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\":\"\"}` 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. Versions 2.24.5, 2.29.13, 2.30.8, 2.31.12, 2.32.2, and 2.33.3 patch the issue. As a workaround, reconfigure any Azure templates to use token authentication rather than `azure-instance-identity`.",
"evidence": "osv:CVE-2026-46354",
"products": [],
"severity": "critical",
"structured": {
"id": "CVE-2026-46354",
"aliases": [
"CVE-2026-46354",
"GHSA-6x44-w3xg-hqqf",
"GO-2026-5196"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/coder/coder",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "cc4907395be7cfd58f3cb19fe1b97f38730bfeec"
},
{
"introduced": "ba71b321bceab3faa128d306e8de3612a673d6c1"
},
{
"fixed": "25ddc1cb787ae88af6040590f676b3d31a63e225"
},
{
"introduced": "43e67d12e278e13399cffc77f132e8e628339477"
},
{
"fixed": "74eba1e8a9f98fddd782b9123241b53510f3c8c9"
},
{
"introduced": "fa050ee0abc24ddf1bf91fb26148a9c3b2bd1481"
},
{
"fixed": "dfe986b2b051a962e8035b0941f5adf312b3926c"
},
{
"introduced": "34584e909bbe6f501fb2cbdc994325b4d3f9e2ef"
},
{
"fixed": "5f343bc337b413aeee8ef2d47004ef97196607c1"
},
{
"introduced": "f009c17217e6bad9a61ba511d23735bc1ce94da0"
},
{
"fixed": "2b778f292c2ddf8ac261683d0d5d8a18da1512f6"
}
],
"database_specific": {
"extracted_events": [
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "0"
},
{
"fixed": "2.24.5"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "2.29.0"
},
{
"fixed": "2.29.13"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "2.30.0"
},
{
"fixed": "2.30.8"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "2.31.0"
},
{
"fixed": "2.31.12"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "2.32.0"
},
{
"fixed": "2.32.2"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:coder:coder:*:*:*:*:*:go:*:*",
"range": [
{
"introduced": "2.33.0"
},
{
"fixed": "2.33.3"
}
],
"source": "CPE_RANGE"
},
{
"range": [
{
"fixed": "cc4907395be7cfd58f3cb19fe1b97f38730bfeec"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.24.5"
},
{
"range": [
{
"fixed": "25ddc1cb787ae88af6040590f676b3d31a63e225"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.29.13"
},
{
"range": [
{
"fixed": "74eba1e8a9f98fddd782b9123241b53510f3c8c9"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.30.8"
},
{
"range": [
{
"fixed": "dfe986b2b051a962e8035b0941f5adf312b3926c"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.31.12"
},
{
"range": [
{
"fixed": "5f343bc337b413aeee8ef2d47004ef97196607c1"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.32.2"
},
{
"range": [
{
"fixed": "2b778f292c2ddf8ac261683d0d5d8a18da1512f6"
}
],
"source": "REFERENCES_TAG",
"original_tag": "v2.33.3"
}
]
}
}
],
"versions": [
"v2.24.4",
"v2.29.12",
"v2.33.2",
"v2.32.1",
"v2.31.11",
"v2.33.1",
"v2.33.0",
"v2.31.10",
"v2.29.11",
"v2.29.10",
"v2.31.9",
"v2.30.7",
"v2.32.0",
"v2.30.6",
"v2.31.8",
"v2.31.7",
"v2.29.9",
"v2.30.5",
"v2.31.6",
"v2.31.5",
"v2.30.4",
"v2.29.8",
"v2.30.3",
"list",
"describe",
"v2.31.4",
"v2.31.3",
"v2.31.2",
"v2.31.1",
"v2.31.0",
"v2.30.2",
"v2.29.7",
"v2.29.6",
"v2.29.5",
"v2.29.4",
"v2.29.3",
"v2.29.2",
"v2.29.1",
"v2.29.0",
"v2.24.3",
"v2.24.2",
"v2.24.1",
"v2.24.0",
"v2.10.0",
"v2.9.0",
"v2.6.0",
"v2.8.0",
"v2.7.1",
"v2.7.0",
"v2.5.1",
"v2.5.0",
"v2.4.0",
"v2.3.3",
"v2.3.2",
"v2.3.1",
"v2.3.0",
"v2.2.1",
"v2.1.5",
"v2.1.4",
"v2.1.3",
"v2.1.2",
"v2.1.1",
"v2.0.2",
"v0.27.1",
"v0.27.0",
"v0.26.2",
"v0.26.1",
"v0.26.0",
"v0.25.0",
"v0.24.1",
"v0.24.0",
"v0.23.7",
"v0.23.6",
"v0.23.5",
"v0.23.4",
"v0.23.3",
"v0.23.2",
"v0.23.1",
"v0.23.0",
"v0.22.2",
"v0.22.1",
"v0.22.0",
"v0.21.3",
"v0.21.2",
"v0.21.1",
"v0.21.0",
"v0.20.1",
"v0.20.0",
"v0.19.2",
"v0.19.1",
"v0.19.0",
"v0.18.1",
"v0.18.0",
"v0.17.4",
"v0.17.3",
"v0.17.2",
"v0.17.1",
"v0.17.0",
"v0.16.0",
"v0.15.3",
"v0.15.2",
"v0.15.1",
"v0.15.0",
"v0.14.3",
"v0.14.2",
"v0.14.1",
"v0.14.0",
"v0.13.6",
"v0.13.5",
"v0.13.4",
"v0.13.3",
"v0.13.2",
"v0.13.1",
"v0.13.0",
"v0.12.9",
"v0.12.8",
"v0.12.7",
"v0.12.6",
"v0.12.5",
"v0.12.4",
"v0.12.3",
"v0.12.2",
"v0.12.1",
"v0.12.0",
"v0.11.0",
"v0.10.2",
"v0.10.1",
"v0.10.0",
"rm",
"v0.9.10",
"v0.9.9",
"v0.9.8",
"v0.9.7",
"v0.9.6",
"v0.9.5",
"v0.9.4",
"v0.9.3",
"v0.9.2",
"v0.9.1",
"v0.9.0",
"v0.8.15",
"v0.8.14",
"v0.8.13",
"v0.8.12",
"v0.8.11",
"v0.8.10",
"v0.8.9",
"v0.8.8",
"v0.8.7",
"v0.8.6",
"v0.8.5",
"v0.8.4",
"v0.8.3",
"v0.8.2",
"v0.8.1",
"v0.8.0",
"v0.7.12",
"v0.7.11",
"v0.7.10",
"v0.7.9",
"v0.7.8",
"v0.7.7",
"v0.7.6",
"v0.7.5",
"v0.7.4",
"v0.7.3",
"v0.7.2",
"v0.7.1",
"v0.7.0",
"v0.6.6",
"v0.6.5",
"v0.6.4",
"v0.6.3",
"v0.6.2",
"v0.6.1",
"v0.6.0",
"v0.5.11",
"v0.5.10",
"v0.5.9",
"v0.5.8",
"v0.5.7",
"v0.5.6",
"v0.5.5",
"v0.5.4",
"v0.5.3",
"v0.5.2",
"v0.5.1",
"v0.5.0",
"v0.4.4",
"v0.4.3",
"v0.4.2",
"v0.4.1",
"v0.4.0",
"v0.3.5",
"v0.3.4",
"v0.3.3",
"v0.3.2",
"v0.3.1",
"v0.3.0"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-46354.json"
}
}
],
"modified": "2026-10-28T02:30:38.149878184Z",
"provider": "osv",
"references": [
"https://github.com/coder/coder/releases/tag/v2.24.5",
"https://github.com/coder/coder/releases/tag/v2.29.13",
"https://github.com/coder/coder/releases/tag/v2.30.8",
"https://github.com/coder/coder/releases/tag/v2.31.12",
"https://github.com/coder/coder/releases/tag/v2.32.2",
"https://github.com/coder/coder/releases/tag/v2.33.3",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46354.json",
"https://github.com/coder/coder/security/advisories/GHSA-6x44-w3xg-hqqf",
"https://nvd.nist.gov/vuln/detail/CVE-2026-46354",
"https://github.com/coder/coder/pull/25286"
],
"provider_metadata": {
"cwe_ids": [
"CWE-347"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/46xxx/CVE-2026-46354.json"
}
},
"related_cves": [
{
"value": "CVE-2026-46354",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 505085,
"published_at": "2026-07-07T21:10:01.899+00:00"
}