From f47547b35462571636a76b737602e827ae43bc24 Mon Sep 17 00:00:00 2001 From: Demi Marie Obenour Date: Thu, 8 Dec 2022 15:24:01 -0500 Subject: [PATCH] fix(auth): reject invalid padding in digests Digests must not have padding after the SEQUENCE or OCTET STRING. Change-Id: Id25ab23111781f8c8a97c2c3c8edf1cc4a4384c0 Signed-off-by: Demi Marie Obenour --- drivers/auth/mbedtls/mbedtls_crypto.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/auth/mbedtls/mbedtls_crypto.c b/drivers/auth/mbedtls/mbedtls_crypto.c index d231179f5..178bbf5f4 100644 --- a/drivers/auth/mbedtls/mbedtls_crypto.c +++ b/drivers/auth/mbedtls/mbedtls_crypto.c @@ -170,12 +170,15 @@ static int verify_hash(void *data_ptr, unsigned int data_len, size_t len; int rc; - /* Digest info should be an MBEDTLS_ASN1_SEQUENCE */ + /* + * Digest info should be an MBEDTLS_ASN1_SEQUENCE + * and consume all bytes. + */ p = (unsigned char *)digest_info_ptr; end = p + digest_info_len; rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE); - if (rc != 0) { + if (rc != 0 || ((size_t)(end - p) != len)) { return CRYPTO_ERR_HASH; } @@ -195,9 +198,9 @@ static int verify_hash(void *data_ptr, unsigned int data_len, return CRYPTO_ERR_HASH; } - /* Hash should be octet string type */ + /* Hash should be octet string type and consume all bytes */ rc = mbedtls_asn1_get_tag(&p, end, &len, MBEDTLS_ASN1_OCTET_STRING); - if (rc != 0) { + if ((rc != 0) || ((size_t)(end - p) != len)) { return CRYPTO_ERR_HASH; } -- 2.39.5