diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2014-07-31 20:56:22 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2014-08-06 20:27:51 +0100 |
commit | 966fe81f9befbff62522a158006fb03050a868df (patch) | |
tree | 64fb9e1bc66161ac030ff958465eacc77ac4a721 | |
parent | 83764a989dcc87fbea337da5f8f86806fe767b7e (diff) |
Fix SRP buffer overrun vulnerability.
Invalid parameters passed to the SRP code can be overrun an internal
buffer. Add sanity check that g, A, B < N to SRP code.
Thanks to Sean Devlin and Watson Ladd of Cryptography Services, NCC
Group for reporting this issue.
Reviewed-by: Kurt Roeckx <kurt@openssl.org>
-rw-r--r-- | crypto/srp/srp_lib.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/crypto/srp/srp_lib.c b/crypto/srp/srp_lib.c index 7c1dcc5111..83d417a308 100644 --- a/crypto/srp/srp_lib.c +++ b/crypto/srp/srp_lib.c @@ -89,6 +89,9 @@ static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g) int longg ; int longN = BN_num_bytes(N); + if (BN_ucmp(g, N) >= 0) + return NULL; + if ((tmp = OPENSSL_malloc(longN)) == NULL) return NULL; BN_bn2bin(N,tmp) ; @@ -121,6 +124,9 @@ BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N) if ((A == NULL) ||(B == NULL) || (N == NULL)) return NULL; + if (BN_ucmp(A, N) >= 0 || BN_ucmp(B, N) >= 0) + return NULL; + longN= BN_num_bytes(N); if ((cAB = OPENSSL_malloc(2*longN)) == NULL) |