mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix!: only trust x-forwarded-host from configured trusted proxies (#26204)
Subdomain app routing derived the app identity from httpapi.RequestHost, which returned the client-supplied X-Forwarded-Host header verbatim. No middleware validated or stripped that header, so a request from an untrusted peer could forge it. Since the application_connect cookie is scoped to the wildcard apps domain, JavaScript in a share=authenticated app could fetch() with a forged X-Forwarded-Host pointing at a victim's owner-only app; coderd routed and authorized the request as the victim and returned the private app response same-origin to the attacker. Replace RequestHost with httpmw.EffectiveHost, which honors X-Forwarded-Host only when the original socket peer is a configured trusted origin, otherwise falling back to the received Host header. This ties host trust to the same RealIPConfig model already used for X-Forwarded-For and -Proto. Wire it into HandleSubdomain for both coderd and wsproxy, and log both the effective host and the raw received_host. Add coverage: EffectiveHost unit tests assert the trust decision uses the socket peer rather than the spoofable forwarded client IP, and a HandleSubdomain test confirms a forged X-Forwarded-Host from an untrusted peer never reaches token resolution. Refs: https://linear.app/codercom/issue/PLAT-259
This commit is contained in:
@@ -56,6 +56,12 @@ Use a reverse proxy to handle TLS termination with automatic certificate managem
|
||||
- [Apache with Let's Encrypt](../../tutorials/reverse-proxy-apache.md)
|
||||
- [Caddy reverse proxy](../../tutorials/reverse-proxy-caddy.md)
|
||||
|
||||
If your reverse proxy rewrites the request `Host` and forwards the original
|
||||
host in `X-Forwarded-Host`, configure
|
||||
[`CODER_PROXY_TRUSTED_ORIGINS`](../../reference/cli/server.md#--proxy-trusted-origins)
|
||||
to trust that proxy's address. Otherwise Coder will ignore `X-Forwarded-Host`
|
||||
for subdomain app routing.
|
||||
|
||||
### DNS Setup
|
||||
|
||||
You'll need to configure DNS to point wildcard subdomains to your Coder server:
|
||||
|
||||
Reference in New Issue
Block a user