{"id":"CVE-2026-63443","revision":null,"records":[{"revision":"a96a253d3c3844b0a125e1fc3487d73e","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-63443","aliases":[],"title":"Coder: Workspace agent API insecure redirect handling allowed cross-agent file read and write","description":"Coder allows organizations to provision remote development environments via Terraform. Prior to 2.29.19, 2.32.9, 2.33.10, and 2.34.4, agentConn.apiClient() follows redirects while its custom transport accepts the host from the redirected request URL when the port is the workspace agent HTTP API port 4. An authenticated user who controls a modified workspace agent and knows another online agent's UUID can derive the victim's tailnet address and redirect control-plane requests to that agent. HTTP 301, 302, and 303 redirects can redirect read requests, while HTTP 307 and 308 preserve replayable write and process-start requests. The redirected workspace agent file APIs can read or write files as the victim workspace user, and affected versions exposing the workspace agent process API can execute commands after a redirected file write, crossing workspace and tenant boundaries. This issue is fixed in versions 2.29.19, 2.32.9, 2.33.10, and 2.34.4.","state":0,"publishedAt":"2026-09-15T16:44:23.048+00:00","modifiedAt":"2026-09-15T17:31:58.74+00:00","affected":[{"ecosystem":"Vendor product","name":"coder","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"coder\",\n                    \"product\": \"coder\",\n                    \"versions\": [\n                        {\n                            \"version\": \">= 2.27.0, < 2.29.19\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 2.30.0, < 2.32.9\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 2.33.0, < 2.33.10\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \">= 2.34.0, < 2.34.4\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L","score":8.3,"severity":"HIGH"}],"references":["https://github.com/coder/coder/security/advisories/GHSA-qrwj-vh9x-gw5v","https://github.com/coder/coder/pull/26600","https://github.com/coder/coder/pull/26611","https://github.com/coder/coder/pull/26612","https://github.com/coder/coder/pull/26613","https://github.com/coder/coder/pull/26622","https://github.com/coder/coder/commit/2312b67bc52c4e314c18c4b4be5dcf5500c94ad7","https://github.com/coder/coder/commit/812549d671d0f5a0b45adcee860d37b70aaddccd","https://github.com/coder/coder/commit/ec3ba84c0002f47dd979c073cde1ab345acbaea5","https://github.com/coder/coder/commit/eeb2624549ddb85538e493af3e678fdb185a809f","https://github.com/coder/coder/commit/f8bdec5add4711650d5bfb6ff93d0cc9d7821c81","https://github.com/coder/coder/releases/tag/v2.29.19","https://github.com/coder/coder/releases/tag/v2.32.9","https://github.com/coder/coder/releases/tag/v2.33.10","https://github.com/coder/coder/releases/tag/v2.34.4"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-63443","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-63443","identifiers":["CVE-2026-63443"]},"retained":false,"historicalAffected":[]},{"revision":"b9624d9c8428471a806b213dcb0698cc","observedAt":"2026-11-11T15:06:16.44+00:00","statement":{"source":"euvd","id":"EUVD-2026-78927","aliases":["CVE-2026-63443"],"title":"Coder allows organizations to provision remote development environments via Terraform. Prior to 2.29.19, 2.32.9, 2.33.10, and 2.34.4, agentConn.apiClient() follows redirects while its custom transport accepts the host from the redirected re…","description":"Coder allows organizations to provision remote development environments via Terraform. Prior to 2.29.19, 2.32.9, 2.33.10, and 2.34.4, agentConn.apiClient() follows redirects while its custom transport accepts the host from the redirected request URL when the port is the workspace agent HTTP API port 4. An authenticated user who controls a modified workspace agent and knows another online agent's UUID can derive the victim's tailnet address and redirect control-plane requests to that agent. HTTP 301, 302, and 303 redirects can redirect read requests, while HTTP 307 and 308 preserve replayable write and process-start requests. The redirected workspace agent file APIs can read or write files as the victim workspace user, and affected versions exposing the workspace agent process API can execute commands after a redirected file write, crossing workspace and tenant boundaries. This issue is fixed in versions 2.29.19, 2.32.9, 2.33.10, and 2.34.4.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L","score":8.3,"severity":null}],"references":["https://github.com/coder/coder/security/advisories/GHSA-qrwj-vh9x-gw5v","https://github.com/coder/coder/pull/26600","https://github.com/coder/coder/pull/26611","https://github.com/coder/coder/pull/26612","https://github.com/coder/coder/pull/26613","https://github.com/coder/coder/pull/26622","https://github.com/coder/coder/commit/2312b67bc52c4e314c18c4b4be5dcf5500c94ad7","https://github.com/coder/coder/commit/812549d671d0f5a0b45adcee860d37b70aaddccd","https://github.com/coder/coder/commit/ec3ba84c0002f47dd979c073cde1ab345acbaea5","https://github.com/coder/coder/commit/eeb2624549ddb85538e493af3e678fdb185a809f","https://github.com/coder/coder/commit/f8bdec5add4711650d5bfb6ff93d0cc9d7821c81","https://github.com/coder/coder/releases/tag/v2.29.19","https://github.com/coder/coder/releases/tag/v2.32.9","https://github.com/coder/coder/releases/tag/v2.33.10","https://github.com/coder/coder/releases/tag/v2.34.4"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-78927","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Sep 15, 2026, 4:44:23 PM","dateUpdated":"Sep 15, 2026, 5:31:58 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-78927","identifiers":["EUVD-2026-78927","CVE-2026-63443"]},"retained":false,"historicalAffected":[]},{"revision":"7d620d515af74e54978e46e3b807d921","observedAt":"2026-10-25T15:18:45.851+00:00","statement":{"source":"nvd","id":"CVE-2026-63443","aliases":[],"title":"Coder allows organizations to provision remote development environments via Terraform. Prior to 2.29.19, 2.32.9, 2.33.10, and 2.34.4, agentConn.apiClient() follows redirects while its custom transport accepts the host from the redirected re…","description":"Coder allows organizations to provision remote development environments via Terraform. Prior to 2.29.19, 2.32.9, 2.33.10, and 2.34.4, agentConn.apiClient() follows redirects while its custom transport accepts the host from the redirected request URL when the port is the workspace agent HTTP API port 4. An authenticated user who controls a modified workspace agent and knows another online agent's UUID can derive the victim's tailnet address and redirect control-plane requests to that agent. HTTP 301, 302, and 303 redirects can redirect read requests, while HTTP 307 and 308 preserve replayable write and process-start requests. The redirected workspace agent file APIs can read or write files as the victim workspace user, and affected versions exposing the workspace agent process API can execute commands after a redirected file write, crossing workspace and tenant boundaries. This issue is fixed in versions 2.29.19, 2.32.9, 2.33.10, and 2.34.4.","state":0,"publishedAt":"2026-09-15T17:17:23.567+00:00","modifiedAt":"2026-09-30T17:51:36.337+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L","score":8.3,"severity":"HIGH"}],"references":["https://github.com/coder/coder/commit/2312b67bc52c4e314c18c4b4be5dcf5500c94ad7","https://github.com/coder/coder/commit/812549d671d0f5a0b45adcee860d37b70aaddccd","https://github.com/coder/coder/commit/ec3ba84c0002f47dd979c073cde1ab345acbaea5","https://github.com/coder/coder/commit/eeb2624549ddb85538e493af3e678fdb185a809f","https://github.com/coder/coder/commit/f8bdec5add4711650d5bfb6ff93d0cc9d7821c81","https://github.com/coder/coder/pull/26600","https://github.com/coder/coder/pull/26611","https://github.com/coder/coder/pull/26612","https://github.com/coder/coder/pull/26613","https://github.com/coder/coder/pull/26622","https://github.com/coder/coder/releases/tag/v2.29.19","https://github.com/coder/coder/releases/tag/v2.32.9","https://github.com/coder/coder/releases/tag/v2.33.10","https://github.com/coder/coder/releases/tag/v2.34.4","https://github.com/coder/coder/security/advisories/GHSA-qrwj-vh9x-gw5v"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-63443","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-863","CWE-918"],"productCriteria":[],"sourceDates":{"published":"2026-09-15T17:17:23.567","lastModified":"2026-09-30T17:51:36.337"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-63443","identifiers":["CVE-2026-63443"]},"retained":false,"historicalAffected":[]},{"revision":"dbc86637cc0948979228447e6bf228e7","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-qrwj-vh9x-gw5v","aliases":["CVE-2026-63443","GO-2026-5923"],"title":"Coder's workspace agent API insecure redirect handling allowed cross-agent file read and write","description":"### Summary\n\n`agentConn.apiClient()` used the default redirect behavior of `http.Client` while its custom transport dialed the host from the request URL as long as the port was the workspace agent HTTP API port (`4`). Agent tailnet IPs are deterministic from agent UUIDs, so a malicious workspace agent could return a redirect to another agent's tailnet IP and cause the control-plane client to send the follow-up workspace agent API request to the victim agent instead of the intended agent.\n\nRedirects that preserve the method and body, such as HTTP 307 and 308, allow replay of write and process-start requests. HTTP 301, 302 and 303 redirects only convert POST requests to GET requests, so they are sufficient to demonstrate redirected reads but not write or command-execution primitives.\n\n### Impact\n\nAn authenticated user with a running workspace and control of a modified workspace agent can redirect workspace agent API requests made to their agent toward another online workspace agent reachable on the tailnet. If the attacker knows the victim agent UUID, they can derive the victim's tailnet IP and target the victim's file APIs to read or write files as the victim workspace user.\n\nIn affected versions that expose the workspace agent process API, the same primitive can be chained to command execution as the victim workspace user by writing a payload through the redirected file API and then redirecting a process-start request to execute it. This crosses workspace and tenant boundaries.\n\n### Patches\n\nThe fix disables automatic redirect following for workspace agent API clients and pins all workspace agent API dials to the intended agent's deterministic tailnet address. Requests whose URL host does not match the intended agent are rejected instead of being dialed.\n\nThe fix was backported to all supported release lines:\n\n| Release line | Patched version |\n|---|---|\n| 2.34 | [v2.34.4](https://github.com/coder/coder/releases/tag/v2.34.4) |\n| 2.33 | [v2.33.10](https://github.com/coder/coder/releases/tag/v2.33.10) |\n| 2.32 | [v2.32.9](https://github.com/coder/coder/releases/tag/v2.32.9) |\n| 2.29 (ESR) | [v2.29.19](https://github.com/coder/coder/releases/tag/v2.29.19) |\n\n### Workarounds\n\nNone. Upgrading is required.\n\n### Resources\n- Fix: #26600","state":0,"publishedAt":"2026-07-06T21:52:31+00:00","modifiedAt":"2026-09-16T03:55:37.4819795+00:00","affected":[{"ecosystem":"Go","name":"github.com/coder/coder/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.34.0"},{"kind":"fixed","version":"2.34.4"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/coder/coder/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.33.0"},{"kind":"fixed","version":"2.33.10"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/coder/coder/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.30.0"},{"kind":"fixed","version":"2.32.9"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/coder/coder/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.27.0"},{"kind":"fixed","version":"2.29.19"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/coder/coder/security/advisories/GHSA-qrwj-vh9x-gw5v","https://github.com/coder/coder/pull/26600","https://github.com/coder/coder"],"sourceUrl":"https://github.com/advisories/GHSA-qrwj-vh9x-gw5v","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-qrwj-vh9x-gw5v","identifiers":["GHSA-qrwj-vh9x-gw5v","CVE-2026-63443","GO-2026-5923"]},"retained":false,"historicalAffected":[]},{"revision":"ec35c9ecd7d4468bb7976c38bfc8f0b1","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-5923","aliases":["CVE-2026-63443","GHSA-qrwj-vh9x-gw5v"],"title":"Coder's workspace agent API insecure redirect handling allowed cross-agent file read and write in github.com/coder/coder","description":"Coder's workspace agent API insecure redirect handling allowed cross-agent file read and write in github.com/coder/coder","state":0,"publishedAt":"2026-07-07T16:41:46+00:00","modifiedAt":"2026-09-16T03:55:37.4819795+00:00","affected":[{"ecosystem":"Go","name":"github.com/coder/coder","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/coder/coder/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"2.27.0"},{"kind":"fixed","version":"2.29.19"},{"kind":"introduced","version":"2.30.0"},{"kind":"fixed","version":"2.32.9"},{"kind":"introduced","version":"2.33.0"},{"kind":"fixed","version":"2.33.10"},{"kind":"introduced","version":"2.34.0"},{"kind":"fixed","version":"2.34.4"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/coder/coder/security/advisories/GHSA-qrwj-vh9x-gw5v","https://github.com/coder/coder/pull/26600"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-5923","license":"OSV · upstream source license applies","key":"osv:GO-2026-5923","identifiers":["GO-2026-5923","CVE-2026-63443","GHSA-qrwj-vh9x-gw5v"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-12T02:56:45.8822264+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-12T02:56:45.8822264+00:00","lastSuccessAt":"2026-11-12T02:56:46.0427292+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:46.0427301+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-64752486c567b55b31fb0d7225f5222bcd0019564ac0ac5f0649e242c7b19299-c8f0a5eb97b437649f83f6fe632ec849fcb249052407d33e475e82c88b318dfb","complete":true,"records":424535,"lastAttemptAt":"2026-11-12T02:56:45.3610802+00:00","lastSuccessAt":"2026-11-12T02:56:45.341976+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.3610802+00:00","snapshotPublishedAt":"2026-11-12T02:25:26+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-3bce114846604d92838a2dc302341627","complete":false,"records":13760,"lastAttemptAt":"2026-11-12T03:06:53.8778262+00:00","lastSuccessAt":"2026-11-12T03:06:52.8+00:00","error":"754 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-12T03:06:52.8+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13040,"expectedIdentifiers":13813,"failedIdentifiers":754},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-12T02:56:45.8822264+00:00","complete":true,"records":1097,"lastAttemptAt":"2026-11-12T02:56:45.8822264+00:00","lastSuccessAt":"2026-11-12T02:56:46.0434469+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:46.0434471+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-729a419ccc5f41d8a3330c7c6e8b6a5e","complete":true,"records":13760,"lastAttemptAt":"2026-11-12T02:57:11.7691852+00:00","lastSuccessAt":"2026-11-12T02:57:11.766+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:57:11.766+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13813,"expectedIdentifiers":13813,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-3562b6c78fd1bd0f0b55daf66a0926ae24f65e462df7f6d928caad458fc696bf","complete":true,"records":9947,"lastAttemptAt":"2026-11-12T02:56:45.7363501+00:00","lastSuccessAt":"2026-11-11T04:27:43.6877707+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.7363501+00:00","snapshotPublishedAt":"2026-11-11T03:32:46+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-456002455e0ab94bb92c95476d4e6d175c104cd594749982afd96c893728ecbc","complete":true,"records":2010,"lastAttemptAt":"2026-11-12T02:56:45.5271491+00:00","lastSuccessAt":"2026-11-11T02:36:58.1276999+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.5271491+00:00","snapshotPublishedAt":"2026-11-11T01:17:51+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-baa8362b4daf9e5f39d5563775a55935e7b442c0735d33274a921579ce4a0d66","complete":true,"records":3093,"lastAttemptAt":"2026-11-12T02:56:45.8443473+00:00","lastSuccessAt":"2026-11-11T13:00:02.5446881+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.8443473+00:00","snapshotPublishedAt":"2026-11-11T12:47:47+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-685fe7fb2b690656c910a1ea42a9d294e8353311ac8ecfa691a9b0ff1b328804","complete":true,"records":231695,"lastAttemptAt":"2026-11-12T02:56:45.6384803+00:00","lastSuccessAt":"2026-11-11T21:58:47.7265713+00:00","error":null,"lastVerifiedAt":"2026-11-12T02:56:45.6384803+00:00","snapshotPublishedAt":"2026-11-11T21:48:35+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}