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
Удар: Средняя
ID CWE: 573
Введенный в R2019b