ton CVE semgrep_id:flawfinder.memcpy-1.CopyMemory-1.bcopy-1:40:40
Function does not check for buffer overflows when copying
Описание уязвимости
Уязвимость связана с использованием функции memcpy, которая не выполняет проверку на переполнение буфера. Если размер исходного буфера превышает размер целевого, это может привести к переполнению буфера и потенциальному выполнению произвольного кода или утечке данных.
Варианты исправления
-
Использовать более безопасные версии функций: в C Runtime Library (CRT) есть более безопасные версии функций для копирования памяти, например,
memcpy_sиwmemcpy_s. Они требуют указания размера буфера, что позволяет избежать переполнения.Пример кода:
memcpy_s(compressed_with_size.data() + kDecompressedSizeBytes, compressed_with_size.capacity() - kDecompressedSizeBytes, compressed.data(), compressed.size()); -
Добавить явную проверку размеров буферов: перед использованием
memcpyможно добавить проверку, что размер целевого буфера не меньше размера исходного буфера.Пример кода:
if (compressed_with_size.capacity() - kDecompressedSizeBytes >= compressed.size()) { memcpy(compressed_with_size.data() + kDecompressedSizeBytes, compressed.data(), compressed.size()); } else { // Обработка ошибки }
Ссылка на статью
Подробнее о безопасных версиях функций можно узнать на странице документации Microsoft: memcpy_s, wmemcpy_s.
Форматирование для GitLab Issues
# Уязвимость: отсутствие проверки на переполнение буфера при копировании данных
## Описание
Функция `memcpy` используется без проверки размеров буферов, что может привести к переполнению буфера.
## Местоположение
Файл: `repo/crypto/vm/boc-compression.cpp`
Строка: 40
## Уровень серьёзности
Высокий
## Идентификаторы
- CWE: [CWE-120](https://cwe.mitre.org/data/definitions/120.html)
- OWASP: A03:2021 - Injection, A1:2017 - Injection
## Варианты исправления
### 1. Использование безопасных версий функций
Использовать `memcpy_s` или `wmemcpy_s`:
```cpp
memcpy_s(compressed_with_size.data() + kDecompressedSizeBytes,
compressed_with_size.capacity() - kDecompressedSizeBytes,
compressed.data(),
compressed.size());
2. Добавление явной проверки размеров буферов
Добавить проверку перед использованием memcpy:
if (compressed_with_size.capacity() - kDecompressedSizeBytes >= compressed.size()) {
memcpy(compressed_with_size.data() + kDecompressedSizeBytes,
compressed.data(),
compressed.size());
} else {
// Обработка ошибки
}
Дополнительная информация
Подробнее о безопасных версиях функций: memcpy_s, wmemcpy_s
<hr><details><summary>Описание: </summary>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
</details><details><summary>Исходный JSON: </summary><pre><code lang='json'>{
"id": "9fd8d916e684e7edd5e94c2c70d27a75c814ea866c417fd6c10ac08c792f4dea",
"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:40:40",
"severity": "High",
"scanner": {
"id": "semgrep",
"name": "Semgrep"
},
"location": {
"file": "repo/crypto/vm/boc-compression.cpp",
"start_line": 40
},
"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"
}
]
}
```</code></pre></details>
/severity high