mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
Fix OCSP Status Request extension unbounded memory growth
A malicious client can send an excessively large OCSP Status Request extension. If that client continually requests renegotiation, sending a large OCSP Status Request extension each time, then there will be unbounded memory growth on the server. This will eventually lead to a Denial Of Service attack through memory exhaustion. Servers with a default configuration are vulnerable even if they do not support OCSP. Builds using the "no-ocsp" build time option are not affected. I have also checked other extensions to see if they suffer from a similar problem but I could not find any other issues. CVE-2016-6304 Issue reported by Shi Lei. Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
a449b47c7d
commit
e408c09bbf
23
ssl/t1_lib.c
23
ssl/t1_lib.c
@ -2019,6 +2019,22 @@ static int ssl_scan_clienthello_tlsext(SSL *s, PACKET *pkt, int *al)
|
||||
(&extension, &responder_id_list))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* We remove any OCSP_RESPIDs from a previous handshake
|
||||
* to prevent unbounded memory growth - CVE-2016-6304
|
||||
*/
|
||||
sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids,
|
||||
OCSP_RESPID_free);
|
||||
if (PACKET_remaining(&responder_id_list) > 0) {
|
||||
s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null();
|
||||
if (s->tlsext_ocsp_ids == NULL) {
|
||||
*al = SSL_AD_INTERNAL_ERROR;
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
s->tlsext_ocsp_ids = NULL;
|
||||
}
|
||||
|
||||
while (PACKET_remaining(&responder_id_list) > 0) {
|
||||
OCSP_RESPID *id;
|
||||
PACKET responder_id;
|
||||
@ -2030,13 +2046,6 @@ static int ssl_scan_clienthello_tlsext(SSL *s, PACKET *pkt, int *al)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (s->tlsext_ocsp_ids == NULL
|
||||
&& (s->tlsext_ocsp_ids =
|
||||
sk_OCSP_RESPID_new_null()) == NULL) {
|
||||
*al = SSL_AD_INTERNAL_ERROR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
id_data = PACKET_data(&responder_id);
|
||||
id = d2i_OCSP_RESPID(NULL, &id_data,
|
||||
PACKET_remaining(&responder_id));
|
||||
|
Loading…
Reference in New Issue
Block a user