exponenta event banner

Отсутствует алгоритм хеширования

Контекст в подпрограмме 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++
По умолчанию: Откл.
Синтаксис командной строки: CRYPTO_MD_NO_ALGORITHM
Воздействие: среднее
ИДЕНТИФИКАТОР CWE: 573
Представлен в R2019b