boringssl/crypto
David Benjamin 204dea8dae Fix encrypt overflow
An overflow can occur in the EVP_EncryptUpdate function. If an attacker is
able to supply very large amounts of input data after a previous call to
EVP_EncryptUpdate with a partial block then a length check can overflow
resulting in a heap corruption.

Following an analysis of all OpenSSL internal usage of the
EVP_EncryptUpdate function all usage is one of two forms.

The first form is like this:
EVP_EncryptInit()
EVP_EncryptUpdate()

i.e. where the EVP_EncryptUpdate() call is known to be the first called
function after an EVP_EncryptInit(), and therefore that specific call
must be safe.

The second form is where the length passed to EVP_EncryptUpdate() can be seen
from the code to be some small value and therefore there is no possibility of
an overflow. [BoringSSL: We also have code that calls EVP_CIPHER functions by
way of the TLS/SSL3 "AEADs". However, there we know the inputs are bounded by
2^16.]

Since all instances are one of these two forms, I believe that there can
be no overflows in internal code due to this problem.

It should be noted that EVP_DecryptUpdate() can call EVP_EncryptUpdate()
in certain code paths. Also EVP_CipherUpdate() is a synonym for
EVP_EncryptUpdate(). Therefore I have checked all instances of these
calls too, and came to the same conclusion, i.e. there are no instances
in internal usage where an overflow could occur.

This could still represent a security issue for end user code that calls
this function directly.

CVE-2016-2106

Issue reported by Guido Vranken.

(Imported from upstream's 3ab937bc440371fbbe74318ce494ba95021f850a.)

Change-Id: Iabde896555c39899c7f0f6baf7a163a7b3c2f3d6
Reviewed-on: https://boringssl-review.googlesource.com/7845
Reviewed-by: Adam Langley <agl@google.com>
2016-05-03 16:43:12 +00:00
..
aes Switch all 'num' parameters in crypto/modes to unsigned. 2016-04-19 17:56:25 +00:00
asn1 Don't free ret->data if malloc fails. 2016-05-03 16:36:04 +00:00
base64 Remove calls to ERR_load_crypto_strings. 2016-01-25 23:09:08 +00:00
bio Only use recv/send for socket BIOs on Windows. 2016-04-15 20:31:05 +00:00
bn Fix memory leak on error in BN_mpi2bn. 2016-04-29 16:20:14 +00:00
buf Make |BUF_memdup| look for zero length, not NULL. 2015-10-06 18:11:33 -07:00
bytestring Merge documentation from chromium's net/der into cbs.c 2016-04-28 19:39:40 +00:00
chacha chacha/asm/chacha-armv8.pl: fix intermittent build failures. 2016-04-14 20:50:36 +00:00
cipher Fix encrypt overflow 2016-05-03 16:43:12 +00:00
cmac Fix some malloc test failures. 2016-03-28 17:17:32 +00:00
conf Add missing internal includes. 2016-03-20 16:38:54 +00:00
curve25519 Appease sanitizers in x25519_ge_scalarmult. 2016-03-10 19:08:42 +00:00
des Use the straight-forward ROTATE macro. 2015-12-16 19:57:31 +00:00
dh Make return value of |BN_MONT_CTX_set_locked| int. 2016-04-18 23:19:08 +00:00
digest Revert md_len removal from SHA256_CTX and SHA512_CTX. 2016-04-27 19:01:23 +00:00
dsa Make return value of |BN_MONT_CTX_set_locked| int. 2016-04-18 23:19:08 +00:00
ec Use different bit tricks to extend the LSB. 2016-04-25 23:05:20 +00:00
ecdh Clean up |ECDH_compute_key|. 2015-10-27 17:00:25 +00:00
ecdsa Drop support for engines-provided signature verification. 2016-04-18 20:40:17 +00:00
engine Unwind DH_METHOD and DSA_METHOD. 2015-11-03 22:54:36 +00:00
err Add checks to X509_NAME_oneline() 2016-05-03 16:34:59 +00:00
evp Fix memory leak on invalid ecPublicKey parameters. 2016-04-15 19:43:26 +00:00
hkdf Start assuming MSVC 2015. 2016-05-02 19:46:25 +00:00
hmac Reimplement PKCS#12 key derivation. 2016-04-19 18:16:38 +00:00
lhash Add a run_tests target to run all tests. 2015-10-26 20:33:44 +00:00
md4 Revert md_len removal from SHA256_CTX and SHA512_CTX. 2016-04-27 19:01:23 +00:00
md5 Revert md_len removal from SHA256_CTX and SHA512_CTX. 2016-04-27 19:01:23 +00:00
modes Start assuming MSVC 2015. 2016-05-02 19:46:25 +00:00
newhope newhope: use less stack to compute client key 2016-04-27 19:25:25 +00:00
obj Fix build. 2016-04-26 15:53:09 +00:00
pem Reject inappropriate private key encryption ciphers. 2016-05-03 16:30:08 +00:00
perlasm perlasm/x86_64-xlate.pl: handle binary constants early. 2016-03-17 18:23:40 +00:00
pkcs8 Add standalone PKCS#8 and SPKI fuzzers. 2016-04-25 21:57:28 +00:00
poly1305 Use UINT64_C instead of unsigned long long integer constant. 2016-04-11 16:08:14 +00:00
rand Add a deterministic PRNG for fuzzing. 2016-03-03 01:36:19 +00:00
rc4 Remove RC4_options from rc4-586.pl. 2016-04-22 21:14:11 +00:00
rsa Require the public exponent to be available in RSA blinding. 2016-04-18 23:34:46 +00:00
sha Revert md_len removal from SHA256_CTX and SHA512_CTX. 2016-04-27 19:01:23 +00:00
stack If no comparison function is set, sk_sort is a NOP 2016-02-25 20:02:53 +00:00
test Start assuming MSVC 2015. 2016-05-02 19:46:25 +00:00
x509 Sync with upstream on i2d_X509_AUX. 2016-05-03 16:37:19 +00:00
x509v3 Check for malloc failure in r2i_certpol. 2016-04-29 16:22:05 +00:00
CMakeLists.txt Banish SSL_add_dir_cert_subjects_to_stack and OPENSSL_DIR_CTX to decrepit. 2016-04-27 18:40:25 +00:00
constant_time_test.c
cpu-aarch64-linux.c Rewrite ARM feature detection. 2016-03-26 04:54:44 +00:00
cpu-arm-linux.c Make CRYPTO_is_NEON_capable aware of the buggy CPU. 2016-04-28 16:42:21 +00:00
cpu-arm.c Rewrite ARM feature detection. 2016-03-26 04:54:44 +00:00
cpu-intel.c Add missing internal includes. 2016-03-20 16:38:54 +00:00
crypto.c Add |CRYPTO_is_confidential_build|. 2016-05-03 16:24:50 +00:00
ex_data.c Skip free callbacks on empty CRYPTO_EX_DATAs. 2015-12-15 21:32:14 +00:00
internal.h Another OPENSSL_NO_THREADS build fix. 2016-04-28 17:32:42 +00:00
mem.c Fix some indentation. 2016-01-28 00:51:45 +00:00
refcount_c11.c Cast refcounts to _Atomic before use. 2015-05-20 13:39:22 -07:00
refcount_lock.c
refcount_test.c Specify argc and argv arguments to refcount_test:main. 2015-05-20 13:49:41 -07:00
thread_none.c
thread_pthread.c Remove call to |fprintf| in |CRYPTO_once|. 2016-03-03 18:01:43 +00:00
thread_test.c Use nanosleep instead of usleep. 2016-04-19 21:54:26 +00:00
thread_win.c Replace CRYPTO_once_t on Windows with INIT_ONCE. 2016-04-19 21:34:20 +00:00
thread.c
time_support.c Remove some mingw support cruft. 2016-01-25 23:05:45 +00:00