libzmq CVE semgrep_id:flawfinder.strncpy-1:86:86
Function does not handle null terminated strings or invalid pointers properly
Ссылка на строку:
https://github.com/zeromq/libzmq/-/blob/master/src/norm_engine.cpp#L86
Описание уязвимости
Уязвимость заключается в том, что функция strncpy
не обеспечивает корректную обработку строк, не завершённых нуль-символом. Это может привести к переполнению буфера и другим уязвимостям.
Варианты исправления
-
Использование
snprintf
: эта функция более безопасна, так как позволяет контролировать размер записываемых данных и гарантирует добавление нуль-символа в конец строки.snprintf(ifaceName, ifaceLen + 1, "%s", ifacePtr);
-
Использование безопасных версий функций в CRT (для разработки под C Runtime Library): например,
strncpy_s
.strncpy_s(ifaceName, ifaceLen + 1, ifacePtr, ifaceLen);
Ссылки на статьи
- О функции
snprintf
: https://linux.die.net/man/3/snprintf. - О безопасных версиях функций в CRT: https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170.
- Информация о CWE-120: https://cwe.mitre.org/data/definitions/120.html.
Issue в GitLab
## Уязвимость: некорректная обработка строк функциями семейства `strncpy`
**Категория:** SAST
**Уровень серьёзности:** высокий
**Файл:** repo/src/norm_engine.cpp
**Строка:** 86
### Описание
Функция `strncpy` не обеспечивает корректную обработку строк, не завершённых нуль-символом, что может привести к переполнению буфера.
### Варианты исправления
1. Использовать `snprintf`:
```c
snprintf(ifaceName, ifaceLen + 1, "%s", ifacePtr);
- Использовать безопасные версии функций в CRT:
strncpy_s(ifaceName, ifaceLen + 1, ifacePtr, ifaceLen);
Ссылки
<hr><details><summary>Описание: </summary>The `strncpy` family of functions do not properly handle strings that are not null terminated.
It is recommended to use more secure alternatives such as `snprintf`.
For more information please see: https://linux.die.net/man/3/snprintf
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/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170
</details><details><summary>Исходный JSON: </summary><pre><code lang='json'>{
"id": "f6ebc3432d9b8785e2490d1720ccbfd4118e6a7d3406831bf4060dbf7d07a70d",
"category": "sast",
"name": "Function does not handle null terminated strings or invalid pointers properly",
"description": "The `strncpy` family of functions do not properly handle strings that are not null terminated.\nIt is recommended to use more secure alternatives such as `snprintf`.\n\nFor more information please see: https://linux.die.net/man/3/snprintf\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/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170\n",
"cve": "semgrep_id:flawfinder.strncpy-1:86:86",
"severity": "High",
"scanner": {
"id": "semgrep",
"name": "Semgrep"
},
"location": {
"file": "repo/src/norm_engine.cpp",
"start_line": 86
},
"identifiers": [
{
"type": "semgrep_id",
"name": "flawfinder.strncpy-1",
"value": "flawfinder.strncpy-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 - strncpy",
"value": "strncpy"
}
]
}
```</code></pre></details>
/severity high