mirror of
https://github.com/Mbed-TLS/mbedtls.git
synced 2025-07-30 22:43:08 +03:00
Merge pull request #1349 from felixc-arm/pem-integer-underflow-3.6
[3.6] Fix Integer Underflow when Decoding PEM Keys
This commit is contained in:
5
ChangeLog.d/pem-integer-underflow.txt
Normal file
5
ChangeLog.d/pem-integer-underflow.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Security
|
||||||
|
* Fix an integer underflow that could occur when parsing malformed PEM
|
||||||
|
keys, which could be used by an attacker capable of feeding encrypted
|
||||||
|
PEM keys to a user. This could cause a crash or information disclosure.
|
||||||
|
Found and reported by Linh Le and Ngan Nguyen from Calif.
|
@ -243,7 +243,10 @@ exit:
|
|||||||
#if defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C)
|
#if defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C)
|
||||||
static int pem_check_pkcs_padding(unsigned char *input, size_t input_len, size_t *data_len)
|
static int pem_check_pkcs_padding(unsigned char *input, size_t input_len, size_t *data_len)
|
||||||
{
|
{
|
||||||
/* input_len > 0 is guaranteed by mbedtls_pem_read_buffer(). */
|
/* input_len > 0 is not guaranteed by mbedtls_pem_read_buffer(). */
|
||||||
|
if (input_len < 1) {
|
||||||
|
return MBEDTLS_ERR_PEM_INVALID_DATA;
|
||||||
|
}
|
||||||
size_t pad_len = input[input_len - 1];
|
size_t pad_len = input[input_len - 1];
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
@ -53,6 +53,10 @@ PEM read (malformed PEM AES-128-CBC)
|
|||||||
depends_on:MBEDTLS_MD_CAN_MD5:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CBC
|
depends_on:MBEDTLS_MD_CAN_MD5:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CBC
|
||||||
mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-128-CBC,AA94892A169FA426AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":"pwd":MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH:""
|
mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-128-CBC,AA94892A169FA426AA94892A169FA426\n\nMAAA\n-----END EC PRIVATE KEY-----":"pwd":MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH:""
|
||||||
|
|
||||||
|
PEM read (malformed PEM AES-128-CBC with fewer than 4 base64 chars)
|
||||||
|
depends_on:MBEDTLS_MD_CAN_MD5:MBEDTLS_AES_C:MBEDTLS_CIPHER_MODE_CBC
|
||||||
|
mbedtls_pem_read_buffer:"-----BEGIN EC PRIVATE KEY-----":"-----END EC PRIVATE KEY-----":"-----BEGIN EC PRIVATE KEY-----\nProc-Type\: 4,ENCRYPTED\nDEK-Info\: AES-128-CBC,7BA38DE00F67851E4207216809C3BB15\n\n8Q-----END EC PRIVATE KEY-----":"pwd":MBEDTLS_ERR_PEM_INVALID_DATA:""
|
||||||
|
|
||||||
# The output sequence's length is not multiple of block size (16 bytes). This
|
# The output sequence's length is not multiple of block size (16 bytes). This
|
||||||
# proves that the pem_context->len value is properly updated based on the SEQUENCE
|
# proves that the pem_context->len value is properly updated based on the SEQUENCE
|
||||||
# length read from the decoded ASN.1 data (i.e. extra padding, if any, is ignored).
|
# length read from the decoded ASN.1 data (i.e. extra padding, if any, is ignored).
|
||||||
|
Reference in New Issue
Block a user