аргумент функции putenv-family недоступен за пределами ее области действия
Этот дефект возникает, когда аргумент putenvФункция -family является локальной переменной с автоматической длительностью.
Функция putenv(char *string) вставляет указатель на предоставленный аргумент в массив среды вместо создания копии аргумента. Если аргумент является автоматической переменной, его память может быть перезаписана после функции, содержащей putenv() возврат вызова. Последующий вызов getenv() из другой функции возвращает адрес переменной вне области действия, которая не может быть дереферифицирована юридически. Эта переменная вне области действия может привести к тому, что переменные среды приобретут непредвиденные значения, перестанут отвечать программе или допустят уязвимости при выполнении произвольного кода.
Использовать setenv()/unsetenv() для установки и отмены настройки переменных среды. В качестве альтернативы можно использовать putenv-семейные аргументы функции с динамически выделенной памятью или, если приложение не требует повторного входа, аргументы со статической длительностью. Например, выполнение одного потока без рекурсии или прерываний не требует повторного входа. Его невозможно вызвать (повторно ввести) во время выполнения.
| Группа: Статическая память |
| Язык: C | C++ |
| По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода |
Синтаксис командной строки:
PUTENV_AUTO_VAR
|
| Воздействие: Высокое |
| CWE ID: 562, 686, 825 |