Missing hash algorithm

Контекст в стандартной программе EVP инициализируется без хэш-алгоритма

Описание

Этот дефект возникает, когда вы используете контекст дайджеста сообщений в этих стандартных программах EVP, но вы инициализируете контекст, не задавая хеш-алгоритм.

  • EVP_DigestFinal

  • EVP_DigestSignFinal

  • EVP_SignFinal

  • EVP_VerifyFinal

Риск

Использование контекста дайджеста сообщений, который был инициализирован без алгоритма для выполнения операции хеширования, может привести к ошибке времени выполнения. Даже если операция хеширования успешна, результат дайджеста не является безопасным.

Зафиксировать

Задайте хэш-алгоритм, когда вы инициируете контекст дайджеста сообщений, который вы используете в стандартной программе EVP.

Примеры

расширить все


#include <openssl/evp.h>

void func(unsigned char* src, int len)
{
    EVP_MD_CTX ctx;
    EVP_MD_CTX_init(&ctx);

    EVP_VerifyInit(&ctx, EVP_sha256());
    EVP_MD_CTX_cleanup(&ctx);
    EVP_VerifyUpdate(&ctx, src, len);
}

В этом примере контекстные ctx инициализируется с помощью SHA-256 алгоритма безопасного хеширования. Но, ctx очищается перед использованием EVP_VerifyUpdate. Очистка ctx освобождает его ресурсы и повторно инициализирует его без хэш-алгоритма. Операция хеширования EVP_VerifyUpdate может привести к ошибке времени выполнения.

Коррекция - Очистка контекста только после того, как вам больше не нужно

Одной из возможных коррекций является очистка контекста дайджеста только после того, как он вам больше не нужен.


#include <openssl/evp.h>

void func(unsigned char* src, int len)
{
    EVP_MD_CTX ctx;
    EVP_MD_CTX_init(&ctx);

    EVP_VerifyInit(&ctx, EVP_sha256());
    EVP_VerifyUpdate(&ctx, src, len);
    EVP_MD_CTX_cleanup(&ctx);
}

Информация о результатах

Группа: Криптография
Язык: C | C++
По умолчанию: Off
Синтаксис командной строки : CRYPTO_MD_NO_ALGORITHM
Влияние: Средний
ИДЕНТИФИКАТОР CWE: 573
Введенный в R2019b