From: Marten Seemann Date: Wed, 25 Oct 2023 04:04:24 +0000 (+0700) Subject: crypto/tls: check client's supported versions when using QUIC X-Git-Tag: go1.22rc1~177 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f5bf9fb278c473104b0b987fc1dd165566cbec71;p=gostls13.git crypto/tls: check client's supported versions when using QUIC According to RFC 9001 Section 4.2, the client MUST NOT offer any TLS version older than 1.3. Fixes #63723. Change-Id: Ia92f98274ca784e2bc151faf236380af51f699c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/537576 Reviewed-by: Filippo Valsorda Auto-Submit: Filippo Valsorda Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil --- diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go index 07b1a3851e..21d798de37 100644 --- a/src/crypto/tls/handshake_server_tls13.go +++ b/src/crypto/tls/handshake_server_tls13.go @@ -240,8 +240,15 @@ GroupSelection: c.clientProtocol = selectedProto if c.quic != nil { + // RFC 9001 Section 4.2: Clients MUST NOT offer TLS versions older than 1.3. + for _, v := range hs.clientHello.supportedVersions { + if v < VersionTLS13 { + c.sendAlert(alertProtocolVersion) + return errors.New("tls: client offered TLS version older than TLS 1.3") + } + } + // RFC 9001 Section 8.2. if hs.clientHello.quicTransportParameters == nil { - // RFC 9001 Section 8.2. c.sendAlert(alertMissingExtension) return errors.New("tls: client did not send a quic_transport_parameters extension") }