Navigation Menu

Skip to content


Fix OCSP Status Request extension unbounded memory growth
Browse files Browse the repository at this point in the history
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.


Issue reported by Shi Lei.

Reviewed-by: Rich Salz <>
  • Loading branch information
mattcaswell committed Sep 22, 2016
1 parent d8e94b0 commit a59ab1c
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions ssl/t1_lib.c
Expand Up @@ -2030,6 +2030,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
if (PACKET_remaining(&responder_id_list) > 0) {
s->tlsext_ocsp_ids = sk_OCSP_RESPID_new_null();
if (s->tlsext_ocsp_ids == NULL) {
return 0;
} else {
s->tlsext_ocsp_ids = NULL;

while (PACKET_remaining(&responder_id_list) > 0) {
PACKET responder_id;
Expand All @@ -2041,13 +2057,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) {
return 0;

id_data = PACKET_data(&responder_id);
id = d2i_OCSP_RESPID(NULL, &id_data,
Expand Down

0 comments on commit a59ab1c

Please sign in to comment.