tmraz pushed to openssl (f21). "Fix multiple security issues. (..more)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Mon Jun 15 15:10:36 UTC 2015
From 546bf977b53bc9fdb9139e780787e0a0801cb492 Mon Sep 17 00:00:00 2001
From: Tomas Mraz <tmraz at fedoraproject.org>
Date: Mon, 15 Jun 2015 17:09:29 +0200
Subject: Fix multiple security issues.
- fix CVE-2015-1789 - out-of-bounds read in X509_cmp_time
- fix CVE-2015-1790 - PKCS7 crash with missing EncryptedContent
- fix CVE-2015-1791 - race condition handling NewSessionTicket
- fix CVE-2015-1792 - CMS verify infinite loop with unknown hash function
- add missing parts of CVE-2015-0209 fix for corectness although unexploitable
diff --git a/openssl-1.0.1e-cve-2015-1789.patch b/openssl-1.0.1e-cve-2015-1789.patch
new file mode 100644
index 0000000..8633a76
--- /dev/null
+++ b/openssl-1.0.1e-cve-2015-1789.patch
@@ -0,0 +1,103 @@
+diff -up openssl-1.0.1e/crypto/x509/x509_vfy.c.oob-read openssl-1.0.1e/crypto/x509/x509_vfy.c
+--- openssl-1.0.1e/crypto/x509/x509_vfy.c.oob-read 2015-05-25 12:03:41.000000000 +0200
++++ openssl-1.0.1e/crypto/x509/x509_vfy.c 2015-06-09 15:01:51.688640453 +0200
+@@ -1702,49 +1702,92 @@ int X509_cmp_time(const ASN1_TIME *ctm,
+ ASN1_TIME atm;
+ long offset;
+ char buff1[24],buff2[24],*p;
+- int i,j;
++ int i, j, remaining;
+
+ p=buff1;
+- i=ctm->length;
++ remaining=ctm->length;
+ str=(char *)ctm->data;
++ /*
++ * Note that the following (historical) code allows much more slack in the
++ * time format than RFC5280. In RFC5280, the representation is fixed:
++ * UTCTime: YYMMDDHHMMSSZ
++ * GeneralizedTime: YYYYMMDDHHMMSSZ
++ */
+ if (ctm->type == V_ASN1_UTCTIME)
+ {
+- if ((i < 11) || (i > 17)) return 0;
++ /* YYMMDDHHMM[SS]Z or YYMMDDHHMM[SS](+-)hhmm */
++ int min_length = sizeof("YYMMDDHHMMZ") - 1;
++ int max_length = sizeof("YYMMDDHHMMSS+hhmm") - 1;
++ if (remaining < min_length || remaining > max_length)
++ return 0;
+ memcpy(p,str,10);
+ p+=10;
+ str+=10;
++ remaining -= 10;
+ }
+ else
+ {
+- if (i < 13) return 0;
++ /* YYYYMMDDHHMM[SS[.fff]]Z or YYYYMMDDHHMM[SS[.f[f[f]]]](+-)hhmm */
++ int min_length = sizeof("YYYYMMDDHHMMZ") - 1;
++ int max_length = sizeof("YYYYMMDDHHMMSS.fff+hhmm") - 1;
++ if (remaining < min_length || remaining > max_length)
++ return 0;
+ memcpy(p,str,12);
+ p+=12;
+ str+=12;
++ remaining -= 12;
+ }
+
+ if ((*str == 'Z') || (*str == '-') || (*str == '+'))
+ { *(p++)='0'; *(p++)='0'; }
+ else
+ {
++ /* SS (seconds) */
++ if (remaining < 2)
++ return 0;
+ *(p++)= *(str++);
+ *(p++)= *(str++);
+- /* Skip any fractional seconds... */
+- if (*str == '.')
++ remaining -= 2;
++ /*
++ * Skip any (up to three) fractional seconds...
++ * TODO(emilia): in RFC5280, fractional seconds are forbidden.
++ * Can we just kill them altogether?
++ */
++ if (remaining && *str == '.')
+ {
+ str++;
+- while ((*str >= '0') && (*str <= '9')) str++;
++ remaining--;
++ for (i = 0; i < 3 && remaining; i++, str++, remaining--)
++ {
++ if (*str < '0' || *str > '9')
++ break;
++ }
+ }
+
+ }
+ *(p++)='Z';
+ *(p++)='\0';
+
++ /* We now need either a terminating 'Z' or an offset. */
++ if (!remaining)
++ return 0;
+ if (*str == 'Z')
++ {
++ if (remaining != 1)
++ return 0;
+ offset=0;
++ }
+ else
+ {
++ /* (+-)HHMM */
+ if ((*str != '+') && (*str != '-'))
+ return 0;
++ /* Historical behaviour: the (+-)hhmm offset is forbidden in RFC5280. */
++ if (remaining != 5)
++ return 0;
++ if (str[1] < '0' || str[1] > '9' || str[2] < '0' || str[2] > '9' ||
++ str[3] < '0' || str[3] > '9' || str[4] < '0' || str[4] > '9')
++ return 0;
+ offset=((str[1]-'0')*10+(str[2]-'0'))*60;
+ offset+=(str[3]-'0')*10+(str[4]-'0');
+ if (*str == '-')
diff --git a/openssl-1.0.1e-cve-2015-1790.patch b/openssl-1.0.1e-cve-2015-1790.patch
new file mode 100644
index 0000000..3b30240
--- /dev/null
+++ b/openssl-1.0.1e-cve-2015-1790.patch
@@ -0,0 +1,55 @@
+diff -up openssl-1.0.1e/crypto/pkcs7/pk7_doit.c.missing-content openssl-1.0.1e/crypto/pkcs7/pk7_doit.c
+--- openssl-1.0.1e/crypto/pkcs7/pk7_doit.c.missing-content 2015-05-25 12:03:41.000000000 +0200
++++ openssl-1.0.1e/crypto/pkcs7/pk7_doit.c 2015-06-09 15:21:21.377951520 +0200
+@@ -472,6 +472,12 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE
+ switch (i)
+ {
+ case NID_pkcs7_signed:
++ /*
++ * p7->d.sign->contents is a PKCS7 structure consisting of a contentType
++ * field and optional content.
++ * data_body is NULL if that structure has no (=detached) content
++ * or if the contentType is wrong (i.e., not "data").
++ */
+ data_body=PKCS7_get_octet_string(p7->d.sign->contents);
+ if (!PKCS7_is_detached(p7) && data_body == NULL)
+ {
+@@ -484,6 +490,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE
+ case NID_pkcs7_signedAndEnveloped:
+ rsk=p7->d.signed_and_enveloped->recipientinfo;
+ md_sk=p7->d.signed_and_enveloped->md_algs;
++ /* data_body is NULL if the optional EncryptedContent is missing. */
+ data_body=p7->d.signed_and_enveloped->enc_data->enc_data;
+ enc_alg=p7->d.signed_and_enveloped->enc_data->algorithm;
+ evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm);
+@@ -496,6 +503,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE
+ case NID_pkcs7_enveloped:
+ rsk=p7->d.enveloped->recipientinfo;
+ enc_alg=p7->d.enveloped->enc_data->algorithm;
++ /* data_body is NULL if the optional EncryptedContent is missing. */
+ data_body=p7->d.enveloped->enc_data->enc_data;
+ evp_cipher=EVP_get_cipherbyobj(enc_alg->algorithm);
+ if (evp_cipher == NULL)
+@@ -509,6 +517,13 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE
+ goto err;
+ }
+
++ /* Detached content must be supplied via in_bio instead. */
++ if (data_body == NULL && in_bio == NULL)
++ {
++ PKCS7err(PKCS7_F_PKCS7_DATADECODE, PKCS7_R_NO_CONTENT);
++ goto err;
++ }
++
+ /* We will be checking the signature */
+ if (md_sk != NULL)
+ {
+@@ -665,7 +680,7 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKE
+ }
+
+ #if 1
+- if (PKCS7_is_detached(p7) || (in_bio != NULL))
++ if (in_bio != NULL)
+ {
+ bio=in_bio;
+ }
diff --git a/openssl-1.0.1e-cve-2015-1792.patch b/openssl-1.0.1e-cve-2015-1792.patch
new file mode 100644
index 0000000..5f2b0cd
--- /dev/null
+++ b/openssl-1.0.1e-cve-2015-1792.patch
@@ -0,0 +1,12 @@
+diff -up openssl-1.0.1e/crypto/cms/cms_smime.c.unknown-hash openssl-1.0.1e/crypto/cms/cms_smime.c
+--- openssl-1.0.1e/crypto/cms/cms_smime.c.unknown-hash 2013-02-11 16:26:04.000000000 +0100
++++ openssl-1.0.1e/crypto/cms/cms_smime.c 2015-06-09 16:07:16.001516190 +0200
+@@ -141,7 +141,7 @@ static void do_free_upto(BIO *f, BIO *up
+ BIO_free(f);
+ f = tbio;
+ }
+- while (f != upto);
++ while (f && f != upto);
+ }
+ else
+ BIO_free_all(f);
diff --git a/openssl-1.0.1k-cve-2015-0209.patch b/openssl-1.0.1k-cve-2015-0209.patch
index 994f963..2d291b2 100644
--- a/openssl-1.0.1k-cve-2015-0209.patch
+++ b/openssl-1.0.1k-cve-2015-0209.patch
@@ -1,3 +1,34 @@
+diff -up openssl-1.0.1e/crypto/asn1/x_x509.c.use-after-free openssl-1.0.1e/crypto/asn1/x_x509.c
+--- openssl-1.0.1e/crypto/asn1/x_x509.c.use-after-free 2013-02-11 16:26:04.000000000 +0100
++++ openssl-1.0.1e/crypto/asn1/x_x509.c 2015-06-11 11:14:52.581856349 +0200
+@@ -170,8 +170,14 @@ X509 *d2i_X509_AUX(X509 **a, const unsig
+ {
+ const unsigned char *q;
+ X509 *ret;
++ int freeret = 0;
++
+ /* Save start position */
+ q = *pp;
++
++ if(!a || *a == NULL) {
++ freeret = 1;
++ }
+ ret = d2i_X509(a, pp, length);
+ /* If certificate unreadable then forget it */
+ if(!ret) return NULL;
+@@ -181,7 +187,11 @@ X509 *d2i_X509_AUX(X509 **a, const unsig
+ if(!d2i_X509_CERT_AUX(&ret->aux, pp, length)) goto err;
+ return ret;
+ err:
+- X509_free(ret);
++ if(freeret) {
++ X509_free(ret);
++ if (a)
++ *a = NULL;
++ }
+ return NULL;
+ }
+
diff -up openssl-1.0.1k/crypto/ec/ec_asn1.c.use-after-free openssl-1.0.1k/crypto/ec/ec_asn1.c
--- openssl-1.0.1k/crypto/ec/ec_asn1.c.use-after-free 2014-10-15 15:49:54.000000000 +0200
+++ openssl-1.0.1k/crypto/ec/ec_asn1.c 2015-03-19 17:28:03.349627040 +0100
@@ -25,3 +56,27 @@ diff -up openssl-1.0.1k/crypto/ec/ec_asn1.c.use-after-free openssl-1.0.1k/crypto
EC_KEY_free(ret);
ret = NULL;
}
+@@ -1377,8 +1377,6 @@ EC_KEY *d2i_ECParameters(EC_KEY **a, con
+ ECerr(EC_F_D2I_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+- if (a)
+- *a = ret;
+ }
+ else
+ ret = *a;
+@@ -1386,9 +1384,14 @@ EC_KEY *d2i_ECParameters(EC_KEY **a, con
+ if (!d2i_ECPKParameters(&ret->group, in, len))
+ {
+ ECerr(EC_F_D2I_ECPARAMETERS, ERR_R_EC_LIB);
++ if (a == NULL || *a != ret)
++ EC_KEY_free(ret);
+ return NULL;
+ }
+
++ if (a)
++ *a = ret;
++
+ return ret;
+ }
+
diff --git a/openssl-1.0.1k-cve-2015-1791.patch b/openssl-1.0.1k-cve-2015-1791.patch
new file mode 100644
index 0000000..3125f84
--- /dev/null
+++ b/openssl-1.0.1k-cve-2015-1791.patch
@@ -0,0 +1,231 @@
+diff -up openssl-1.0.1k/ssl/ssl_err.c.ticket-race openssl-1.0.1k/ssl/ssl_err.c
+--- openssl-1.0.1k/ssl/ssl_err.c.ticket-race 2015-06-15 17:06:22.699702477 +0200
++++ openssl-1.0.1k/ssl/ssl_err.c 2015-06-15 17:06:22.704702592 +0200
+@@ -245,6 +245,7 @@ static ERR_STRING_DATA SSL_str_functs[]=
+ {ERR_FUNC(SSL_F_SSL_READ), "SSL_read"},
+ {ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"},
+ {ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"},
++{ERR_FUNC(SSL_F_SSL_SESSION_DUP), "ssl_session_dup"},
+ {ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"},
+ {ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"},
+ {ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT), "SSL_SESSION_set1_id_context"},
+diff -up openssl-1.0.1k/ssl/ssl.h.ticket-race openssl-1.0.1k/ssl/ssl.h
+--- openssl-1.0.1k/ssl/ssl.h.ticket-race 2015-06-15 17:06:22.700702500 +0200
++++ openssl-1.0.1k/ssl/ssl.h 2015-06-15 17:06:22.704702592 +0200
+@@ -2203,6 +2203,7 @@ void ERR_load_SSL_strings(void);
+ #define SSL_F_SSL_READ 223
+ #define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187
+ #define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188
++#define SSL_F_SSL_SESSION_DUP 348
+ #define SSL_F_SSL_SESSION_NEW 189
+ #define SSL_F_SSL_SESSION_PRINT_FP 190
+ #define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312
+diff -up openssl-1.0.1k/ssl/ssl_locl.h.ticket-race openssl-1.0.1k/ssl/ssl_locl.h
+--- openssl-1.0.1k/ssl/ssl_locl.h.ticket-race 2015-06-15 17:06:22.543698865 +0200
++++ openssl-1.0.1k/ssl/ssl_locl.h 2015-06-15 17:06:22.705702616 +0200
+@@ -831,6 +831,7 @@ void ssl_sess_cert_free(SESS_CERT *sc);
+ int ssl_set_peer_cert_type(SESS_CERT *c, int type);
+ int ssl_get_new_session(SSL *s, int session);
+ int ssl_get_prev_session(SSL *s, unsigned char *session,int len, const unsigned char *limit);
++SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket);
+ int ssl_cipher_id_cmp(const SSL_CIPHER *a,const SSL_CIPHER *b);
+ DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(SSL_CIPHER, SSL_CIPHER,
+ ssl_cipher_id);
+diff -up openssl-1.0.1k/ssl/ssl_sess.c.ticket-race openssl-1.0.1k/ssl/ssl_sess.c
+--- openssl-1.0.1k/ssl/ssl_sess.c.ticket-race 2015-01-08 15:00:56.000000000 +0100
++++ openssl-1.0.1k/ssl/ssl_sess.c 2015-06-15 17:06:22.705702616 +0200
+@@ -224,6 +224,146 @@ SSL_SESSION *SSL_SESSION_new(void)
+ return(ss);
+ }
+
++/*
++ * Create a new SSL_SESSION and duplicate the contents of |src| into it. If
++ * ticket == 0 then no ticket information is duplicated, otherwise it is.
++ */
++SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket)
++{
++ SSL_SESSION *dest;
++
++ dest = OPENSSL_malloc(sizeof(*src));
++ if (dest == NULL)
++ {
++ goto err;
++ }
++ memcpy(dest, src, sizeof(*dest));
++
++ /*
++ * Set the various pointers to NULL so that we can call SSL_SESSION_free in
++ * the case of an error whilst halfway through constructing dest
++ */
++#ifndef OPENSSL_NO_PSK
++ dest->psk_identity_hint = NULL;
++ dest->psk_identity = NULL;
++#endif
++ dest->ciphers = NULL;
++#ifndef OPENSSL_NO_TLSEXT
++ dest->tlsext_hostname = NULL;
++# ifndef OPENSSL_NO_EC
++ dest->tlsext_ecpointformatlist = NULL;
++ dest->tlsext_ellipticcurvelist = NULL;
++# endif
++#endif
++ dest->tlsext_tick = NULL;
++#ifndef OPENSSL_NO_SRP
++ dest->srp_username = NULL;
++#endif
++ memset(&dest->ex_data, 0, sizeof(dest->ex_data));
++
++ /* We deliberately don't copy the prev and next pointers */
++ dest->prev = NULL;
++ dest->next = NULL;
++
++ dest->references = 1;
++
++ if (src->sess_cert != NULL)
++ CRYPTO_add(&src->sess_cert->references, 1, CRYPTO_LOCK_SSL_SESS_CERT);
++
++ if (src->peer != NULL)
++ CRYPTO_add(&src->peer->references, 1, CRYPTO_LOCK_X509);
++
++#ifndef OPENSSL_NO_PSK
++ if (src->psk_identity_hint)
++ {
++ dest->psk_identity_hint = BUF_strdup(src->psk_identity_hint);
++ if (dest->psk_identity_hint == NULL)
++ {
++ goto err;
++ }
++ }
++ if (src->psk_identity)
++ {
++ dest->psk_identity = BUF_strdup(src->psk_identity);
++ if (dest->psk_identity == NULL)
++ {
++ goto err;
++ }
++ }
++#endif
++
++ if(src->ciphers != NULL)
++ {
++ dest->ciphers = sk_SSL_CIPHER_dup(src->ciphers);
++ if (dest->ciphers == NULL)
++ goto err;
++ }
++
++ if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL_SESSION,
++ &dest->ex_data, &src->ex_data))
++ {
++ goto err;
++ }
++
++#ifndef OPENSSL_NO_TLSEXT
++ if (src->tlsext_hostname)
++ {
++ dest->tlsext_hostname = BUF_strdup(src->tlsext_hostname);
++ if (dest->tlsext_hostname == NULL)
++ {
++ goto err;
++ }
++ }
++# ifndef OPENSSL_NO_EC
++ if (src->tlsext_ecpointformatlist)
++ {
++ dest->tlsext_ecpointformatlist =
++ BUF_memdup(src->tlsext_ecpointformatlist,
++ src->tlsext_ecpointformatlist_length);
++ if (dest->tlsext_ecpointformatlist == NULL)
++ goto err;
++ }
++ if (src->tlsext_ellipticcurvelist)
++ {
++ dest->tlsext_ellipticcurvelist =
++ BUF_memdup(src->tlsext_ellipticcurvelist,
++ src->tlsext_ellipticcurvelist_length);
++ if (dest->tlsext_ellipticcurvelist == NULL)
++ goto err;
++ }
++# endif
++#endif
++
++ if (ticket != 0)
++ {
++ dest->tlsext_tick = BUF_memdup(src->tlsext_tick, src->tlsext_ticklen);
++ if(dest->tlsext_tick == NULL)
++ goto err;
++ }
++ else
++ {
++ dest->tlsext_tick_lifetime_hint = 0;
++ dest->tlsext_ticklen = 0;
++ }
++
++#ifndef OPENSSL_NO_SRP
++ if (src->srp_username)
++ {
++ dest->srp_username = BUF_strdup(src->srp_username);
++ if (dest->srp_username == NULL)
++ {
++ goto err;
++ }
++ }
++#endif
++
++ return dest;
++err:
++ SSLerr(SSL_F_SSL_SESSION_DUP, ERR_R_MALLOC_FAILURE);
++ SSL_SESSION_free(dest);
++ return NULL;
++}
++
+ const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, unsigned int *len)
+ {
+ if(len)
+diff -up openssl-1.0.1k/ssl/s3_clnt.c.ticket-race openssl-1.0.1k/ssl/s3_clnt.c
+--- openssl-1.0.1k/ssl/s3_clnt.c.ticket-race 2015-06-15 17:06:22.700702500 +0200
++++ openssl-1.0.1k/ssl/s3_clnt.c 2015-06-15 17:06:37.434043557 +0200
+@@ -2191,6 +2191,44 @@ int ssl3_get_new_session_ticket(SSL *s)
+ }
+
+ p=d=(unsigned char *)s->init_msg;
++
++ if (s->session->session_id_length > 0)
++ {
++ int i = s->session_ctx->session_cache_mode;
++ SSL_SESSION *new_sess;
++ /*
++ * We reused an existing session, so we need to replace it with a new
++ * one
++ */
++ if (i & SSL_SESS_CACHE_CLIENT)
++ {
++ /*
++ * Remove the old session from the cache
++ */
++ if (i & SSL_SESS_CACHE_NO_INTERNAL_STORE)
++ {
++ if (s->session_ctx->remove_session_cb != NULL)
++ s->session_ctx->remove_session_cb(s->session_ctx,
++ s->session);
++ }
++ else
++ {
++ /* We carry on if this fails */
++ SSL_CTX_remove_session(s->session_ctx, s->session);
++ }
++ }
++
++ if ((new_sess = ssl_session_dup(s->session, 0)) == 0)
++ {
++ al = SSL_AD_INTERNAL_ERROR;
++ SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE);
++ goto f_err;
++ }
++
++ SSL_SESSION_free(s->session);
++ s->session = new_sess;
++ }
++
+ n2l(p, s->session->tlsext_tick_lifetime_hint);
+ n2s(p, ticklen);
+ /* ticket_lifetime_hint + ticket_length + ticket */
diff --git a/openssl.spec b/openssl.spec
index 19b650a..73667c8 100644
--- a/openssl.spec
+++ b/openssl.spec
@@ -23,7 +23,7 @@
Summary: Utilities from the general purpose cryptography library with TLS implementation
Name: openssl
Version: 1.0.1k
-Release: 9%{?dist}
+Release: 10%{?dist}
Epoch: 1
# We have to remove certain patented algorithms from the openssl source
# tarball with the hobble-openssl script which is included below.
@@ -98,6 +98,10 @@ Patch105: openssl-1.0.1k-cve-2015-0289.patch
Patch106: openssl-1.0.1e-cve-2015-0293.patch
Patch107: openssl-1.0.1k-alt-chains.patch
Patch108: openssl-1.0.1k-cve-2015-4000.patch
+Patch109: openssl-1.0.1e-cve-2015-1789.patch
+Patch110: openssl-1.0.1e-cve-2015-1790.patch
+Patch111: openssl-1.0.1k-cve-2015-1791.patch
+Patch112: openssl-1.0.1e-cve-2015-1792.patch
License: OpenSSL
Group: System Environment/Libraries
@@ -229,6 +233,10 @@ cp %{SOURCE12} %{SOURCE13} crypto/ec/
%patch106 -p1 -b .ssl2-assert
%patch107 -p1 -b .alt-chains
%patch108 -p1 -b .logjam
+%patch109 -p1 -b .oob-read
+%patch110 -p1 -b .missing-content
+%patch111 -p1 -b .ticket-race
+%patch112 -p1 -b .unknown-hash
sed -i 's/SHLIB_VERSION_NUMBER "1.0.0"/SHLIB_VERSION_NUMBER "%{version}"/' crypto/opensslv.h
@@ -496,6 +504,13 @@ rm -rf $RPM_BUILD_ROOT/%{_libdir}/fipscanister.*
%postun libs -p /sbin/ldconfig
%changelog
+* Mon Jun 15 2015 Tomáš Mráz <tmraz at redhat.com> 1.0.1k-10
+- fix CVE-2015-1789 - out-of-bounds read in X509_cmp_time
+- fix CVE-2015-1790 - PKCS7 crash with missing EncryptedContent
+- fix CVE-2015-1791 - race condition handling NewSessionTicket
+- fix CVE-2015-1792 - CMS verify infinite loop with unknown hash function
+- add missing parts of CVE-2015-0209 fix for corectness although unexploitable
+
* Fri May 29 2015 Tomáš Mráz <tmraz at redhat.com> 1.0.1k-9
- fix CVE-2015-4000 - prevent the logjam attack on client - restrict
the DH key size to at least 768 bits (limit will be increased in future)
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/openssl.git/commit/?h=f21&id=546bf977b53bc9fdb9139e780787e0a0801cb492
More information about the scm-commits
mailing list