mirror of
https://github.com/XTLS/REALITY.git
synced 2026-09-27 09:28:06 +03:00
crypto/tls: reject known extensions in disallowed handshake messages
Change-Id: I9f3d9f3575359fb4730e0fb278d2d6a16a6a6964 Reviewed-on: https://go-review.googlesource.com/c/go/+/804180 Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: Roland Shoemaker <roland@golang.org> Auto-Submit: Filippo Valsorda <filippo@golang.org> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
This commit is contained in:
@@ -1107,6 +1107,16 @@ func (m *encryptedExtensionsMsg) unmarshal(data []byte) bool {
|
||||
return false
|
||||
}
|
||||
m.serverNameAck = true
|
||||
case extensionStatusRequest, extensionSupportedPoints,
|
||||
extensionSignatureAlgorithms, extensionSCT,
|
||||
extensionExtendedMasterSecret, extensionSessionTicket,
|
||||
extensionPreSharedKey, extensionSupportedVersions,
|
||||
extensionCookie, extensionPSKModes,
|
||||
extensionCertificateAuthorities, extensionSignatureAlgorithmsCert,
|
||||
extensionKeyShare, extensionRenegotiationInfo,
|
||||
extensionECHOuterExtensions:
|
||||
// Not allowed in EncryptedExtensions.
|
||||
return false
|
||||
default:
|
||||
// Ignore unknown extensions.
|
||||
continue
|
||||
@@ -1231,6 +1241,18 @@ func (m *newSessionTicketMsgTLS13) unmarshal(data []byte) bool {
|
||||
if !extData.ReadUint32(&m.maxEarlyData) {
|
||||
return false
|
||||
}
|
||||
case extensionServerName, extensionStatusRequest,
|
||||
extensionSupportedCurves, extensionSupportedPoints,
|
||||
extensionSignatureAlgorithms, extensionALPN, extensionSCT,
|
||||
extensionExtendedMasterSecret, extensionSessionTicket,
|
||||
extensionPreSharedKey, extensionSupportedVersions,
|
||||
extensionCookie, extensionPSKModes,
|
||||
extensionCertificateAuthorities, extensionSignatureAlgorithmsCert,
|
||||
extensionKeyShare, extensionQUICTransportParameters,
|
||||
extensionRenegotiationInfo, extensionECHOuterExtensions,
|
||||
extensionEncryptedClientHello:
|
||||
// Not allowed in TLS 1.3 NewSessionTicket.
|
||||
return false
|
||||
default:
|
||||
// Ignore unknown extensions.
|
||||
continue
|
||||
@@ -1375,6 +1397,15 @@ func (m *certificateRequestMsgTLS13) unmarshal(data []byte) bool {
|
||||
}
|
||||
m.certificateAuthorities = append(m.certificateAuthorities, ca)
|
||||
}
|
||||
case extensionSupportedCurves, extensionSupportedPoints,
|
||||
extensionALPN, extensionExtendedMasterSecret,
|
||||
extensionSessionTicket, extensionPreSharedKey,
|
||||
extensionEarlyData, extensionSupportedVersions,
|
||||
extensionCookie, extensionPSKModes, extensionKeyShare,
|
||||
extensionQUICTransportParameters, extensionRenegotiationInfo,
|
||||
extensionECHOuterExtensions, extensionEncryptedClientHello:
|
||||
// Not allowed in TLS 1.3 CertificateRequest.
|
||||
return false
|
||||
default:
|
||||
// Ignore unknown extensions.
|
||||
continue
|
||||
@@ -1585,6 +1616,18 @@ func unmarshalCertificate(s *cryptobyte.String, certificate *Certificate) bool {
|
||||
certificate.SignedCertificateTimestamps = append(
|
||||
certificate.SignedCertificateTimestamps, sct)
|
||||
}
|
||||
case extensionServerName, extensionSupportedCurves,
|
||||
extensionSupportedPoints, extensionSignatureAlgorithms,
|
||||
extensionALPN, extensionExtendedMasterSecret,
|
||||
extensionSessionTicket, extensionPreSharedKey,
|
||||
extensionEarlyData, extensionSupportedVersions,
|
||||
extensionCookie, extensionPSKModes,
|
||||
extensionCertificateAuthorities, extensionSignatureAlgorithmsCert,
|
||||
extensionKeyShare, extensionQUICTransportParameters,
|
||||
extensionRenegotiationInfo, extensionECHOuterExtensions,
|
||||
extensionEncryptedClientHello:
|
||||
// Not allowed in Certificate.
|
||||
return false
|
||||
default:
|
||||
// Ignore unknown extensions.
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user