semgrep_id:flawfinder.memcpy-1.CopyMemory-1.bcopy-1:19:19
Function does not check for buffer overflows when copying
Ссылка на строку:
Описание уязвимости
Категория: SAST
Название: Функция не проверяет буферы на переполнение при копировании
Описание: Функции семейства memcpy требуют от разработчика проверки того, что размер целевого буфера равен или больше размера исходного буфера. Если не проверять размеры буферов, это может привести к переполнению буфера.
Уровень серьёзности: Высокий
Сканер: Semgrep
Расположение: repo/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h, строка 19
Варианты исправления
-
Использование безопасных версий функций: Для CRT можно использовать более безопасные версии функций, такие как
memcpy_sиwmemcpy_s.#include <string.h> // Пример использования memcpy_s if (memcpy_s(r, sizeof(r), &sig->data[0], 32) != 0) { // Обработка ошибки } if (memcpy_s(s, sizeof(s), &sig->data[32], 32) != 0) { // Обработка ошибки } -
Проверка размеров буферов перед копированием: Перед использованием
memcpyубедитесь, что целевой буфер достаточно велик для хранения данных.size_t r_size = sizeof(r); size_t s_size = sizeof(s); if (r_size >= 32 && s_size >= 32) { memcpy(r, &sig->data[0], 32); memcpy(s, &sig->data[32], 32); } else { // Обработка ошибки }
Ссылки на статьи
Описание:
The `memcpy` family of functions require the developer to validate that the destination buffer is the same size or larger than the source buffer. Buffer overflows could be introduced if care is not taken to validate buffer sizes.If developing for C Runtime Library (CRT), more secure versions of these functions should be used, see: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/memcpy-s-wmemcpy-s?view=msvc-170
Исходный JSON:
{
"id": "2e8827b3410c42795fb384669e9e0c0e1f7a6c5b0597bcfbae87c5ae1021d396",
"category": "sast",
"name": "Function does not check for buffer overflows when copying",
"description": "The `memcpy` family of functions require the developer to validate that the destination buffer\nis the same size or larger than the source buffer. Buffer overflows could be introduced if care\nis not taken to validate buffer sizes.\n\nIf developing for C Runtime Library (CRT), more secure versions of these functions should be\nused, see:\nhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/memcpy-s-wmemcpy-s?view=msvc-170\n",
"cve": "semgrep_id:flawfinder.memcpy-1.CopyMemory-1.bcopy-1:19:19",
"severity": "High",
"scanner": {
"id": "semgrep",
"name": "Semgrep"
},
"location": {
"file": "repo/crypto/secp256k1/libsecp256k1/src/modules/recovery/main_impl.h",
"start_line": 19
},
"identifiers": [
{
"type": "semgrep_id",
"name": "flawfinder.memcpy-1.CopyMemory-1.bcopy-1",
"value": "flawfinder.memcpy-1.CopyMemory-1.bcopy-1"
},
{
"type": "cwe",
"name": "CWE-120",
"value": "120",
"url": "https://cwe.mitre.org/data/definitions/120.html"
},
{
"type": "owasp",
"name": "A03:2021 - Injection",
"value": "A03:2021"
},
{
"type": "owasp",
"name": "A1:2017 - Injection",
"value": "A1:2017"
},
{
"type": "flawfinder_func_name",
"name": "Flawfinder - memcpy",
"value": "memcpy"
},
{
"type": "flawfinder_func_name",
"name": "Flawfinder - CopyMemory",
"value": "CopyMemory"
},
{
"type": "flawfinder_func_name",
"name": "Flawfinder - bcopy",
"value": "bcopy"
}
]
}
```