From 1a348139a77f2f0a4f564d759b37a76901c0dbdf Mon Sep 17 00:00:00 2001 From: Sona Sarmadi Date: Wed, 13 Dec 2017 18:39:24 +0100 Subject: openssl: Fix for CVE-2017-3737 Read/write after SSL object in error state References: https://www.openssl.org/news/secadv/20171207.txt https://nvd.nist.gov/vuln/detail/CVE-2017-3737 Signed-off-by: Sona Sarmadi Signed-off-by: Adrian Dudau --- .../openssl/openssl/CVE-2017-3737.patch | 49 ++++++++++++++++++++++ recipes-connectivity/openssl/openssl_%.bbappend | 1 + 2 files changed, 50 insertions(+) create mode 100644 recipes-connectivity/openssl/openssl/CVE-2017-3737.patch diff --git a/recipes-connectivity/openssl/openssl/CVE-2017-3737.patch b/recipes-connectivity/openssl/openssl/CVE-2017-3737.patch new file mode 100644 index 0000000..3a7b5b2 --- /dev/null +++ b/recipes-connectivity/openssl/openssl/CVE-2017-3737.patch @@ -0,0 +1,49 @@ +From 898fb884b706aaeb283de4812340bb0bde8476dc Mon Sep 17 00:00:00 2001 +From: Matt Caswell +Date: Wed, 29 Nov 2017 14:04:01 +0000 +Subject: [PATCH] Don't allow read/write after fatal error + +OpenSSL 1.0.2 (starting from version 1.0.2b) introduced an "error state" +mechanism. The intent was that if a fatal error occurred during a handshake +then OpenSSL would move into the error state and would immediately fail if +you attempted to continue the handshake. This works as designed for the +explicit handshake functions (SSL_do_handshake(), SSL_accept() and +SSL_connect()), however due to a bug it does not work correctly if +SSL_read() or SSL_write() is called directly. In that scenario, if the +handshake fails then a fatal error will be returned in the initial function +call. If SSL_read()/SSL_write() is subsequently called by the application +for the same SSL object then it will succeed and the data is passed without +being decrypted/encrypted directly from the SSL/TLS record layer. + +In order to exploit this issue an attacker would have to trick an +application into behaving incorrectly by issuing an SSL_read()/SSL_write() +after having already received a fatal error. + +Thanks to David Benjamin (Google) for reporting this issue and suggesting +this fix. + +CVE: CVE-2017-3737 +Upstream-Status: Backport + +Reviewed-by: Rich Salz +Signed-off-by: Sona Sarmadi +--- + ssl/ssl.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ssl/ssl.h b/ssl/ssl.h +index 90aeb0c..3cf96a2 100644 +--- a/ssl/ssl.h ++++ b/ssl/ssl.h +@@ -1727,7 +1727,7 @@ extern "C" { + # define SSL_ST_BEFORE 0x4000 + # define SSL_ST_OK 0x03 + # define SSL_ST_RENEGOTIATE (0x04|SSL_ST_INIT) +-# define SSL_ST_ERR 0x05 ++# define SSL_ST_ERR (0x05|SSL_ST_INIT) + + # define SSL_CB_LOOP 0x01 + # define SSL_CB_EXIT 0x02 +-- +1.9.1 + diff --git a/recipes-connectivity/openssl/openssl_%.bbappend b/recipes-connectivity/openssl/openssl_%.bbappend index a0b936a..7e81042 100644 --- a/recipes-connectivity/openssl/openssl_%.bbappend +++ b/recipes-connectivity/openssl/openssl_%.bbappend @@ -1,4 +1,5 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI += "file://CVE-2017-3735.patch \ + file://CVE-2017-3737.patch \ " -- cgit v1.2.3-54-g00ecf