54 lines
1.9 KiB
Diff
54 lines
1.9 KiB
Diff
From c77980bc077f3774276ab2deba78d8e6bfe4b3bd Mon Sep 17 00:00:00 2001
|
|
From: Roland Shoemaker <roland@golang.org>
|
|
Date: Wed, 9 Jun 2021 11:31:27 -0700
|
|
Subject: [PATCH] [release-branch.go1.15] crypto/tls: test key type when
|
|
casting
|
|
|
|
When casting the certificate public key in generateClientKeyExchange,
|
|
check the type is appropriate. This prevents a panic when a server
|
|
agrees to a RSA based key exchange, but then sends an ECDSA (or
|
|
other) certificate.
|
|
|
|
Updates #47143
|
|
Fixes #47144
|
|
Fixes CVE-2021-34558
|
|
|
|
Thanks to Imre Rad for reporting this issue.
|
|
|
|
Change-Id: Iabccacca6052769a605cccefa1216a9f7b7f6aea
|
|
Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1116723
|
|
Reviewed-by: Filippo Valsorda <valsorda@google.com>
|
|
Reviewed-by: Katie Hockman <katiehockman@google.com>
|
|
Reviewed-on: https://go-review.googlesource.com/c/go/+/334030
|
|
Trust: Filippo Valsorda <filippo@golang.org>
|
|
Run-TryBot: Filippo Valsorda <filippo@golang.org>
|
|
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/golang/go/commit/c77980bc077f3774276ab2deba78d8e6bfe4b3bd
|
|
|
|
---
|
|
src/crypto/tls/key_agreement.go | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/crypto/tls/key_agreement.go b/src/crypto/tls/key_agreement.go
|
|
index 7e6534bd46..22f1b2e1f2 100644
|
|
--- a/src/crypto/tls/key_agreement.go
|
|
+++ b/src/crypto/tls/key_agreement.go
|
|
@@ -67,7 +67,11 @@ func (ka rsaKeyAgreement) generateClientKeyExchange(config *Config, clientHello
|
|
return nil, nil, err
|
|
}
|
|
|
|
- encrypted, err := rsa.EncryptPKCS1v15(config.rand(), cert.PublicKey.(*rsa.PublicKey), preMasterSecret)
|
|
+ rsaKey, ok := cert.PublicKey.(*rsa.PublicKey)
|
|
+ if !ok {
|
|
+ return nil, nil, errors.New("tls: server certificate contains incorrect key type for selected ciphersuite")
|
|
+ }
|
|
+ encrypted, err := rsa.EncryptPKCS1v15(config.rand(), rsaKey, preMasterSecret)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
--
|
|
2.27.0
|
|
|