Входные параметры от независимых компонентов должны быть подтверждены.
Входные параметры от независимых компонентов должны быть подтверждены.
Когда входные параметры от независимых компонентов непосредственно используются в исходном коде, атакующие могут получить полный или частичный контроль буфера приложений. Это управление позволяет атакующему отключить программу, просмотреть содержимое стека, получить доступ к содержимому памяти, изменить память в случайных местах и выполнить нежелательный код, замаскированный как исходный код программы.
Чтобы предотвратить такие уязвимости, подтвердите вход от независимых компонентов. Это правило применяется к входным параметрам, полученным от внешних источников, таких как:
Входные параметры получены от сетей
Входные параметры получили от других процессов и программного обеспечения посредством межпроцессного взаимодействия (IPC)
Входные параметры получены от API компонентов
Polyspace® повышает флаг, когда входные параметры от независимых компонентов используются без валидации. Отмеченное использование включает:
Стандартные программы, такие как sethostid
(Linux®) или SetComputerName
Windows®) использование внешне управляло аргументами, чтобы изменить идентификатор хоста. Смотрите Host change using externally controlled elements
.
Функционирует, такие как putenv
и setenv
получите новые значения переменной окружения или из небезопасных источников. Смотрите Use of externally controlled environment variable
.
Функционирует, такие как printf
используйте спецификатор формата, который создается из небезопасных источников. Смотрите Tainted string format
.
Массивы или указатели используют индекс, который получен из небезопасных источников. Смотрите Array access with tainted index
.
Программа получает путь к команде из внешнего небезопасного источника. Смотрите Command executed from externally controlled path
.
Программа выполняет команду, которая полностью или частично создается из внешне управляемого входа. Смотрите Execution of externally controlled command
.
Библиотеки загрузок программы от фиксированных или внешне управляемых небезопасных путей, которыми могут частично или полностью управлять атакующие. Смотрите Library loaded from externally controlled path
.
Цикл использует значения, полученные из небезопасных источников как его контур. Смотрите Loop bounded with tainted value
.
Функции выделения памяти, такие как calloc
или malloc
, используйте аргумент размера из небезопасного источника. Смотрите Size argument to memory function is from an unsecure source
.
Указатель разыменовывает, использует переменную смещения из неизвестного или небезопасного источника. Смотрите Pointer dereference with tainted offset
.
Один или оба целочисленных операнда в операции деления прибывают из небезопасных источников. Смотрите Tainted division operand
.
Один или оба целочисленных операнда в операции остатка (%
) прибывает из небезопасных источников. Смотрите Tainted modulo operand
.
Функции обработки строк, которые неявно разыменовывают буфер строки, такой как strcpy
или sprintf
используйте строки из небезопасных источников. Смотрите Tainted NULL or non-null-terminated string
.
Значения из небезопасных источников неявно или явным образом преобразованы от со знаком до значений без знака. Смотрите Tainted sign change conversion
.
Программа разыменовывает указатель из небезопасного источника, который может быть NULL или указать на неизвестную память. Смотрите Use of tainted pointer
.
Polyspace рассматривает эти входные параметры как вход от независимого компонента или испорченный:
Энергозависимые объекты
Объект, которые взаимодействуют с пользователем
Объекты, которые взаимодействуют с оборудованием
Объекты, которые используют случайные числа или текущую дату и время
Чтобы рассмотреть весь вход снаружи текущего аналитического периметра как небезопасный, используйте -consider-analysis-perimeter-as-trust-boundary
. Смотрите источники заражения в анализе Polyspace.
Когда вход от независимого компонента используется без валидации многократно в коде, Polyspace отмечает первое использование.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: библиотека ввода/вывода |
Категория: необходимый, неавтоматизированный |