25b34dd97f
CVE-2016-0704 s2_srvr.c overwrite the wrong bytes in the master-key when applying Bleichenbacher protection for export cipher suites. This provides a Bleichenbacher oracle, and could potentially allow more efficient variants of the DROWN attack. CVE-2016-0703 s2_srvr.c did not enforce that clear-key-length is 0 for non-export ciphers. If clear-key bytes are present for these ciphers, they *displace* encrypted-key bytes. This leads to an efficient divide-and-conquer key recovery attack: if an eavesdropper has intercepted an SSLv2 handshake, they can use the server as an oracle to determine the SSLv2 master-key, using only 16 connections to the server and negligible computation. More importantly, this leads to a more efficient version of DROWN that is effective against non-export ciphersuites, and requires no significant computation. CVE-2016-0702 A side-channel attack was found which makes use of cache-bank conflicts on the Intel Sandy-Bridge microarchitecture which could lead to the recovery of RSA keys. The ability to exploit this issue is limited as it relies on an attacker who has control of code in a thread running on the same hyper- threaded core as the victim thread which is performing decryptions. CVE-2016-0799 The internal |fmtstr| function used in processing a "%s" format string in the BIO_*printf functions could overflow while calculating the length of a string and cause an OOB read when printing very long strings. Additionally the internal |doapr_outch| function can attempt to write to an OOB memory location (at an offset from the NULL pointer) in the event of a memory allocation failure. In 1.0.2 and below this could be caused where the size of a buffer to be allocated is greater than INT_MAX. E.g. this could be in processing a very long "%s" format string. Memory leaks can also occur. The first issue may mask the second issue dependent on compiler behaviour. These problems could enable attacks where large amounts of untrusted data is passed to the BIO_*printf functions. If applications use these functions in this way then they could be vulnerable. OpenSSL itself uses these functions when printing out human-readable dumps of ASN.1 data. Therefore applications that print this data could be vulnerable if the data is from untrusted sources. OpenSSL command line applications could also be vulnerable where they print out ASN.1 data, or if untrusted data is passed as command line arguments. Libssl is not considered directly vulnerable. Additionally certificates etc received via remote connections via libssl are also unlikely to be able to trigger these issues because of message size limits enforced within libssl. CVE-2016-0797 In the BN_hex2bn function the number of hex digits is calculated using an int value |i|. Later |bn_expand| is called with a value of |i * 4|. For large values of |i| this can result in |bn_expand| not allocating any memory because |i * 4| is negative. This can leave the internal BIGNUM data field as NULL leading to a subsequent NULL ptr deref. For very large values of |i|, the calculation |i * 4| could be a positive value smaller than |i|. In this case memory is allocated to the internal BIGNUM data field, but it is insufficiently sized leading to heap corruption. A similar issue exists in BN_dec2bn. This could have security consequences if BN_hex2bn/BN_dec2bn is ever called by user applications with very large untrusted hex/dec data. This is anticipated to be a rare occurrence. All OpenSSL internal usage of these functions use data that is not expected to be untrusted, e.g. config file data or application command line arguments. If user developed applications generate config file data based on untrusted data then it is possible that this could also lead to security consequences. This is also anticipated to be rare. CVE-2016-0798 The SRP user database lookup method SRP_VBASE_get_by_user had confusing memory management semantics; the returned pointer was sometimes newly allocated, and sometimes owned by the callee. The calling code has no way of distinguishing these two cases. Specifically, SRP servers that configure a secret seed to hide valid login information are vulnerable to a memory leak: an attacker connecting with an invalid username can cause a memory leak of around 300 bytes per connection. Servers that do not configure SRP, or configure SRP but do not configure a seed are not vulnerable. In Apache, the seed directive is known as SSLSRPUnknownUserSeed. To mitigate the memory leak, the seed handling in SRP_VBASE_get_by_user is now disabled even if the user has configured a seed. Applications are advised to migrate to SRP_VBASE_get1_by_user. However, note that OpenSSL makes no strong guarantees about the indistinguishability of valid and invalid logins. In particular, computations are currently not carried out in constant time. CVE-2016-0705 A double free bug was discovered when OpenSSL parses malformed DSA private keys and could lead to a DoS attack or memory corruption for applications that receive DSA private keys from untrusted sources. This scenario is considered rare. CVE-2016-0800 A cross-protocol attack was discovered that could lead to decryption of TLS sessions by using a server supporting SSLv2 and EXPORT cipher suites as a Bleichenbacher RSA padding oracle. Note that traffic between clients and non- vulnerable servers can be decrypted provided another server supporting SSLv2 and EXPORT ciphers (even with a different protocol such as SMTP, IMAP or POP) shares the RSA keys of the non-vulnerable server. This vulnerability is known as DROWN (CVE-2016-0800). Recovering one session key requires the attacker to perform approximately 2^50 computation, as well as thousands of connections to the affected server. A more efficient variant of the DROWN attack exists against unpatched OpenSSL servers using versions that predate 1.0.2a, 1.0.1m, 1.0.0r and 0.9.8zf released on 19/Mar/2015 (see CVE-2016-0703 below). Users can avoid this issue by disabling the SSLv2 protocol in all their SSL/TLS servers, if they've not done so already. Disabling all SSLv2 ciphers is also sufficient, provided the patches for CVE-2015-3197 (fixed in OpenSSL 1.0.1r and 1.0.2f) have been deployed. Servers that have not disabled the SSLv2 protocol, and are not patched for CVE-2015-3197 are vulnerable to DROWN even if all SSLv2 ciphers are nominally disabled, because malicious clients can force the use of SSLv2 with EXPORT ciphers. OpenSSL 1.0.2g and 1.0.1s deploy the following mitigation against DROWN: SSLv2 is now by default disabled at build-time. Builds that are not configured with "enable-ssl2" will not support SSLv2. Even if "enable-ssl2" is used, users who want to negotiate SSLv2 via the version-flexible SSLv23_method() will need to explicitly call either of: SSL_CTX_clear_options(ctx, SSL_OP_NO_SSLv2); or SSL_clear_options(ssl, SSL_OP_NO_SSLv2); as appropriate. Even if either of those is used, or the application explicitly uses the version-specific SSLv2_method() or its client or server variants, SSLv2 ciphers vulnerable to exhaustive search key recovery have been removed. Specifically, the SSLv2 40-bit EXPORT ciphers, and SSLv2 56-bit DES are no longer available. In addition, weak ciphers in SSLv3 and up are now disabled in default builds of OpenSSL. Builds that are not configured with "enable-weak-ssl-ciphers" will not provide any "EXPORT" or "LOW" strength ciphers. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 48868
185 lines
5.2 KiB
Diff
185 lines
5.2 KiB
Diff
--- a/Makefile.org
|
|
+++ b/Makefile.org
|
|
@@ -279,17 +279,17 @@ build_libcrypto: build_crypto build_engi
|
|
build_libssl: build_ssl libssl.pc
|
|
|
|
build_crypto:
|
|
- @dir=crypto; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=crypto; target=all; $(BUILD_ONE_CMD)
|
|
build_ssl: build_crypto
|
|
- @dir=ssl; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=ssl; target=all; $(BUILD_ONE_CMD)
|
|
build_engines: build_crypto
|
|
- @dir=engines; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=engines; target=all; $(BUILD_ONE_CMD)
|
|
build_apps: build_libs
|
|
- @dir=apps; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=apps; target=all; $(BUILD_ONE_CMD)
|
|
build_tests: build_libs
|
|
- @dir=test; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=test; target=all; $(BUILD_ONE_CMD)
|
|
build_tools: build_libs
|
|
- @dir=tools; target=all; $(BUILD_ONE_CMD)
|
|
+ +@dir=tools; target=all; $(BUILD_ONE_CMD)
|
|
|
|
all_testapps: build_libs build_testapps
|
|
build_testapps:
|
|
@@ -461,7 +461,7 @@ update: errors stacks util/libeay.num ut
|
|
@set -e; target=update; $(RECURSIVE_BUILD_CMD)
|
|
|
|
depend:
|
|
- @set -e; target=depend; $(RECURSIVE_BUILD_CMD)
|
|
+ +@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
|
|
|
|
lint:
|
|
@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
|
|
@@ -523,9 +523,9 @@ dist:
|
|
@$(MAKE) SDIRS='$(SDIRS)' clean
|
|
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
|
|
|
-install: all install_sw
|
|
+install: install_sw
|
|
|
|
-install_sw:
|
|
+install_dirs:
|
|
@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
|
|
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
|
|
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
|
|
@@ -534,12 +534,19 @@ install_sw:
|
|
$(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
|
|
$(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
|
|
$(INSTALL_PREFIX)$(OPENSSLDIR)/private
|
|
+ @$(PERL) $(TOP)/util/mkdir-p.pl \
|
|
+ $(INSTALL_PREFIX)$(MANDIR)/man1 \
|
|
+ $(INSTALL_PREFIX)$(MANDIR)/man3 \
|
|
+ $(INSTALL_PREFIX)$(MANDIR)/man5 \
|
|
+ $(INSTALL_PREFIX)$(MANDIR)/man7
|
|
+
|
|
+install_sw: install_dirs
|
|
@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
|
|
do \
|
|
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
|
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
|
done;
|
|
- @set -e; target=install; $(RECURSIVE_BUILD_CMD)
|
|
+ +@set -e; target=install; $(RECURSIVE_BUILD_CMD)
|
|
@set -e; liblist="$(LIBS)"; for i in $$liblist ;\
|
|
do \
|
|
if [ -f "$$i" ]; then \
|
|
@@ -623,12 +630,7 @@ install_html_docs:
|
|
done; \
|
|
done
|
|
|
|
-install_docs:
|
|
- @$(PERL) $(TOP)/util/mkdir-p.pl \
|
|
- $(INSTALL_PREFIX)$(MANDIR)/man1 \
|
|
- $(INSTALL_PREFIX)$(MANDIR)/man3 \
|
|
- $(INSTALL_PREFIX)$(MANDIR)/man5 \
|
|
- $(INSTALL_PREFIX)$(MANDIR)/man7
|
|
+install_docs: install_dirs
|
|
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
|
|
here="`pwd`"; \
|
|
filecase=; \
|
|
--- a/Makefile.shared
|
|
+++ b/Makefile.shared
|
|
@@ -120,6 +120,7 @@ SYMLINK_SO= \
|
|
done; \
|
|
fi; \
|
|
if [ -n "$$SHLIB_SOVER" ]; then \
|
|
+ [ -e "$$SHLIB$$SHLIB_SUFFIX" ] || \
|
|
( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
|
|
ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
|
|
fi; \
|
|
--- a/crypto/Makefile
|
|
+++ b/crypto/Makefile
|
|
@@ -85,11 +85,11 @@ testapps:
|
|
@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
|
|
|
|
subdirs:
|
|
- @target=all; $(RECURSIVE_MAKE)
|
|
+ +@target=all; $(RECURSIVE_MAKE)
|
|
|
|
files:
|
|
$(PERL) $(TOP)/util/files.pl "CPUID_OBJ=$(CPUID_OBJ)" Makefile >> $(TOP)/MINFO
|
|
- @target=files; $(RECURSIVE_MAKE)
|
|
+ +@target=files; $(RECURSIVE_MAKE)
|
|
|
|
links:
|
|
@$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
|
|
@@ -100,7 +100,7 @@ links:
|
|
# lib: $(LIB): are splitted to avoid end-less loop
|
|
lib: $(LIB)
|
|
@touch lib
|
|
-$(LIB): $(LIBOBJ)
|
|
+$(LIB): $(LIBOBJ) | subdirs
|
|
$(AR) $(LIB) $(LIBOBJ)
|
|
test -z "$(FIPSLIBDIR)" || $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
|
|
$(RANLIB) $(LIB) || echo Never mind.
|
|
@@ -111,7 +111,7 @@ shared: buildinf.h lib subdirs
|
|
fi
|
|
|
|
libs:
|
|
- @target=lib; $(RECURSIVE_MAKE)
|
|
+ +@target=lib; $(RECURSIVE_MAKE)
|
|
|
|
install:
|
|
@[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
|
|
@@ -120,7 +120,7 @@ install:
|
|
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
|
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
|
done;
|
|
- @target=install; $(RECURSIVE_MAKE)
|
|
+ +@target=install; $(RECURSIVE_MAKE)
|
|
|
|
lint:
|
|
@target=lint; $(RECURSIVE_MAKE)
|
|
--- a/engines/Makefile
|
|
+++ b/engines/Makefile
|
|
@@ -72,7 +72,7 @@ top:
|
|
|
|
all: lib subdirs
|
|
|
|
-lib: $(LIBOBJ)
|
|
+lib: $(LIBOBJ) | subdirs
|
|
@if [ -n "$(SHARED_LIBS)" ]; then \
|
|
set -e; \
|
|
for l in $(LIBNAMES); do \
|
|
@@ -89,7 +89,7 @@ lib: $(LIBOBJ)
|
|
|
|
subdirs:
|
|
echo $(EDIRS)
|
|
- @target=all; $(RECURSIVE_MAKE)
|
|
+ +@target=all; $(RECURSIVE_MAKE)
|
|
|
|
files:
|
|
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
|
@@ -128,7 +128,7 @@ install:
|
|
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
|
|
done; \
|
|
fi
|
|
- @target=install; $(RECURSIVE_MAKE)
|
|
+ +@target=install; $(RECURSIVE_MAKE)
|
|
|
|
tags:
|
|
ctags $(SRC)
|
|
--- a/test/Makefile
|
|
+++ b/test/Makefile
|
|
@@ -139,7 +139,7 @@ install:
|
|
tags:
|
|
ctags $(SRC)
|
|
|
|
-tests: exe apps $(TESTS)
|
|
+tests: exe $(TESTS)
|
|
|
|
apps:
|
|
@(cd ..; $(MAKE) DIRS=apps all)
|
|
@@ -557,7 +557,7 @@ $(SSLV2CONFTEST)$(EXE_EXT): $(SSLV2CONFT
|
|
# fi
|
|
|
|
dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO)
|
|
- @target=dummytest; $(BUILD_CMD)
|
|
+ +@target=dummytest; $(BUILD_CMD)
|
|
|
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
|
|