Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
🐹
🐹 Go
Not in CISA KEV
MEDIUM severity

CVE-2026-45796 — v2

MEDIUMFix: coder/coder@57b11d4

CVE-2026-45796 is a medium-severity (CVSS 6.5) Server-Side Request Forgery (SSRF) vulnerability in github.com/coder/coder/v2. A fix is available for github.com/coder/coder/v2 — see the affected versions and patch details below.

Coder vulnerable to unauthenticated SSRF via Azure Instance Identity Endpoint

Also known asGHSA-686c-7vgv-v3fxGO-2026-5169
Published
Jul 7, 2026
Updated
Aug 12, 2026
Affected
7 pkgs
Patched
6 / 7
Exploits
None indexed
Exploitation data as of Sep 29, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

No confirmed exploitation observed yet

  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
  • CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.

Exploitation and automatability from CISA’s SSVC triage for CVE-2026-45796.

EPSS Exploitation Probability

via FIRST.org ↗
0.4%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs35th percentile — riskier than 35% of all scored CVEsHighest risk

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

How urgent is this, really

CVE-2026-45796 by exploitation likelihood (EPSS) against impact (CVSS). Outside the shaded patch-first corner.

Where this sits among everything scored

Of 380,526 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Counts from FIRST.org, log-scaled.

Real-World Exposure

7 pkgs affected
🐹github.com/coder/coder/v2🐹github.com/coder/coder/v2🐹github.com/coder/coder/v2🐹github.com/coder/coder/v2🐹github.com/coder/coder/v2🐹github.com/coder/coder/v2🐹github.com/coder/coder

Real-time download stats are indexed for npm and PyPI packages. This vulnerability affects Go packages — download data is not available via public APIs for these ecosystems.

Description

Summary

Unauthenticated semi-blind Server-Side Request Forgery (SSRF) via the Azure instance identity endpoint (POST /api/v2/workspaceagents/azure-instance-identity). An external attacker can force the Coder server to issue HTTP GET requests to arbitrary internal or external hosts by submitting a crafted PKCS#7 signature. The server does not return the target's response body, but error messages in the API response reveal whether the target is reachable and what type of failure occurred.

Details

The POST /api/v2/workspaceagents/azure-instance-identity endpoint accepts a PKCS#7 signature without authentication. During certificate chain verification, azureidentity.Validate() iterates over the signer certificate's IssuingCertificateURL extension and fetches each URL using http.DefaultClient with no host restriction, no private-IP blocking, and no response-size limit.

An attacker crafts a self-signed certificate whose Common Name matches *.metadata.azure.com (passing the allowedSigners regex) and whose IssuingCertificateURL points to an attacker-chosen target. The server fetches that URL and feeds the response body into x509.ParseCertificate. The parsed result is discarded, but the wrapped error string is returned verbatim in the JSON response via Detail: err.Error(). Connection-level errors ("connection refused", "i/o timeout", DNS failures) and certificate-parse errors give the attacker enough signal to infer host reachability and port state without seeing the actual response content.

Root causes:

  1. No allowlist on IssuingCertificateURL hosts. Any URL was accepted.
  2. http.DefaultClient was used. It follows redirects and connects to private, link-local, and loopback addresses.
  3. Unbounded io.ReadAll on the response body (memory exhaustion vector).
  4. Raw err.Error() was returned in the JSON response, leaking internal HTTP client errors to the caller.

Impact

This is a semi-blind SSRF: the server makes the outbound request but the HTTP response body is consumed by x509.ParseCertificate and never returned to the attacker.

  • Internal network reconnaissance. The attacker can map internal hosts and ports by observing error differentiation in the API response: "connection refused" (port closed), "i/o timeout" (host unreachable or firewalled), DNS failure (host does not exist), or certificate-parse error (port open and responding). This enables systematic scanning of the internal network from the Coder server's vantage point.
  • Requests to sensitive endpoints. The server can be directed to hit cloud metadata services (e.g. http://169.254.169.254/), internal admin interfaces, or other services. The attacker cannot read the response content, but the request itself may have side effects depending on the target.
  • Error-based information disclosure. Wrapped Go HTTP client errors in the Detail field expose internal hostnames, IP addresses, port numbers, and network topology details.
  • Memory exhaustion. The unbounded io.ReadAll on the response body allows an attacker to point IssuingCertificateURL at a large resource, forcing the server to buffer it entirely in memory.

Patches

Fixed in #25274 (commit 57b11d405):

The fix was backported to all supported release lines:

Release linePatched version
2.33v2.33.3
2.32v2.32.2
2.31v2.31.12
2.30v2.30.8
2.29v2.29.13
2.24 (ESR)v2.24.5

Workarounds

If the Azure identity-auth mechanism is not being used then restrict access to the corresponding endpoint (/api/v2/workspaceagents/azure-instance-identity) using ingress firewall and/or proxy ACLs.

Recognition

We'd like to thank Ben Tran of calif.io and Anthropic's Security Team (ANT-2026-22447) for independently disclosing this issue!

Affected Packages

7 total 6 fixed
EcosystemPackageVulnerable rangeFix
🐹Gogithub.com/coder/coder/v2≥ 2.33.0-rc.0&&< 2.33.32.33.3go get github.com/coder/coder/v2@v2.33.3
🐹Gogithub.com/coder/coder/v2≥ 2.32.0-rc.0&&< 2.32.22.32.2go get github.com/coder/coder/v2@v2.32.2
🐹Gogithub.com/coder/coder/v2≥ 2.31.0&&< 2.31.122.31.12go get github.com/coder/coder/v2@v2.31.12
🐹Gogithub.com/coder/coder/v2≥ 2.30.0&&< 2.30.82.30.8go get github.com/coder/coder/v2@v2.30.8
🐹Gogithub.com/coder/coder/v2≥ 2.29.0&&< 2.29.132.29.13go get github.com/coder/coder/v2@v2.29.13
🐹Gogithub.com/coder/coder/v2all versions2.24.5go get github.com/coder/coder/v2@v2.24.5

Affected Products

1 product · 6 configurations
Application
codercoder
≥ 2.33.0 && < 2.33.3
range

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for github.com/coder/coder/v2, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update github.com/coder/coder/v2 to 2.33.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-45796 is resolved across your whole dependency graph.

  3. Workarounds

    Restrict outbound requests from the affected component to an allowlist of hosts, block access to link-local and internal address ranges at the network layer, and require authentication on internal services so a forged request cannot reach them unauthenticated.

Frequently Asked Questions

## Summary Unauthenticated semi-blind Server-Side Request Forgery (SSRF) via the Azure instance identity endpoint (`POST /api/v2/workspaceagents/azure-instance-identity`). An external attacker can force the Coder server to issue HTTP GET requests to arbitrary internal or external hosts by submitting a crafted PKCS#7 signature. The server does not return the target's response body, but error messages in the API response reveal whether the target is reachable and what type of failure occurred. ## Details The `POST /api/v2/workspaceagents/azure-instance-identity` endpoint accepts a PKCS#7 sign
O3 Security · Impact-Aware SCA

Is CVE-2026-45796 in your dependencies?

Find it across Go, including transitive dependencies.

CVE-2026-45796: v2 SSRF (Medium 6.5) | O3 Security