mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
Merge commit from fork
* fix(coderd): Harden Azure identity certificate fetch - Restrict cert fetches to a host+port allowlist (Microsoft and DigiCert on 80/443). - Route requests through a dedicated `http.Client` that resolves the host once and dials the validated IP directly. - Reject loopback, private (RFC 1918 / IPv6 ULA), link-local, multicast, unspecified, CGNAT, benchmarking, and IPv4-mapped IPv6 addresses. - Cap the certificate response body at 1 MiB. - Log the underlying error via slog and return a generic detail to the caller. - Add unit tests for the URL allowlist, IP classification, and dialer. * fix(coderd/azureidentity): add IPv6 special-use ranges to SSRF blocklist The extraBlockedNetworks list only contained IPv4 CIDRs. Add IPv6 equivalents that Go's stdlib classification methods do not cover: - 64:ff9b:1::/48 RFC 8215 NAT64 translation - 100::/64 RFC 6666 discard-only - 2001:2::/48 RFC 5180 benchmarking - 2001:db8::/32 RFC 3849 documentation IPv6 ranges already handled by stdlib (unchanged): - ::1/128 (IsLoopback) - fc00::/7 (IsPrivate, ULA) - fe80::/10 (IsLinkLocalUnicast) - ff00::/8 (IsMulticast) - ::/128 (IsUnspecified)
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
||||
|
||||
"github.com/mitchellh/mapstructure"
|
||||
|
||||
"cdr.dev/slog/v3"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/awsidentity"
|
||||
"github.com/coder/coder/v2/coderd/azureidentity"
|
||||
"github.com/coder/coder/v2/coderd/database/dbauthz"
|
||||
@@ -38,9 +40,17 @@ func (api *API) postWorkspaceAuthAzureInstanceIdentity(rw http.ResponseWriter, r
|
||||
VerifyOptions: api.AzureCertificates,
|
||||
})
|
||||
if err != nil {
|
||||
// Log the full error for operators but return only a
|
||||
// generic message to the caller. Errors from the
|
||||
// certificate fetch path may contain fragments of
|
||||
// internal HTTP responses, so exposing them would be
|
||||
// an information disclosure risk.
|
||||
api.Logger.Warn(ctx, "azure identity validation failed",
|
||||
slog.Error(err),
|
||||
)
|
||||
httpapi.Write(ctx, rw, http.StatusUnauthorized, codersdk.Response{
|
||||
Message: "Invalid Azure identity.",
|
||||
Detail: err.Error(),
|
||||
Detail: "Signature verification failed.",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user