untrusted comment: signature from openbsd 6.0 base secret key
RWSho3oKSqgLQ9h1PPDo5hFSxeqy0mO4oEQq78+JeE/qS3I3BEztDzZYrZX4LruPq8ymAVL9EfidIM7V1pPRXCUC/gnM3KlRaAI=
OpenBSD 6.0 errata 8, Sep 22, 2016:
Avoid unbounded memory growth in libssl, which can be triggered by a TLS
client repeatedly renegotiating and sending OCSP Status Request TLS extensions.
Apply by doing:
signify -Vep /etc/signify/openbsd-60-base.pub -x 008_libssl.patch.sig \
-m - | (cd /usr/src && patch -p0)
And then rebuild and install libssl:
cd /usr/src/lib/libssl
make obj
make depend
make
make install
Index: lib/libssl/src/ssl/t1_lib.c
===================================================================
RCS file: /cvs/src/lib/libssl/src/ssl/Attic/t1_lib.c,v
retrieving revision 1.87
diff -u -p -r1.87 t1_lib.c
--- lib/libssl/src/ssl/t1_lib.c 30 May 2016 13:42:54 -0000 1.87
+++ lib/libssl/src/ssl/t1_lib.c 22 Sep 2016 17:43:51 -0000
@@ -1438,10 +1438,28 @@ ssl_parse_clienthello_tlsext(SSL *s, uns
/* Read in responder_id_list */
n2s(data, dsize);
size -= 2;
- if (dsize > size ) {
+ if (dsize > size) {
*al = SSL_AD_DECODE_ERROR;
return 0;
}
+
+ /*
+ * We remove any OCSP_RESPIDs from a
+ * previous handshake to prevent
+ * unbounded memory growth.
+ */
+ sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids,
+ OCSP_RESPID_free);
+ s->tlsext_ocsp_ids = NULL;
+ if (dsize > 0) {
+ s->tlsext_ocsp_ids =
+ sk_OCSP_RESPID_new_null();
+ if (s->tlsext_ocsp_ids == NULL) {
+ *al = SSL_AD_INTERNAL_ERROR;
+ return 0;
+ }
+ }
+
while (dsize > 0) {
OCSP_RESPID *id;
int idsize;
@@ -1467,13 +1485,6 @@ ssl_parse_clienthello_tlsext(SSL *s, uns
if (data != sdata) {
OCSP_RESPID_free(id);
*al = SSL_AD_DECODE_ERROR;
- return 0;
- }
- if (!s->tlsext_ocsp_ids &&
- !(s->tlsext_ocsp_ids =
- sk_OCSP_RESPID_new_null())) {
- OCSP_RESPID_free(id);
- *al = SSL_AD_INTERNAL_ERROR;
return 0;
}
if (!sk_OCSP_RESPID_push(