Указатель функции присвоен с абсолютным адресом

Константное выражение используется, когда функциональный адрес уязвим для инжекции кода

Описание

Указатель функции, присвоенный с абсолютным адресом, ищет присвоения на указатели функции. Если указатель функции присвоен абсолютный адрес, Средство поиска Ошибки повышает дефект.

Средство поиска ошибки рассматривает выражения с любой комбинацией литеральных констант как абсолютный адрес. Одно исключение - когда значение выражения является нулем.

Риск

Используя фиксированный адрес не является портативным, потому что возможно, что адрес недопустим на других платформах.

Атакующий может ввести код в абсолютном адресе, заставив вашу программу выполниться произвольный, возможно злонамеренный, код.

Фиксация

Не используйте абсолютный адрес с указателями функции.

Примеры

развернуть все

extern int func0(int i, char c);
typedef int (*FuncPtr) (int, char);

FuncPtr funcptrabsoluteaddr() {
    return (FuncPtr)0x08040000; 
}

В этом примере функция возвращает указатель функции в адрес 0x08040000. Если атакующий знает этот абсолютный адрес, атакующий может поставить под угрозу вашу программу.

Исправление — функциональный адрес

Одно возможное исправление должно использовать адрес существующей функции вместо этого.

extern int func0(int i, char c);
typedef int (*FuncPtr) (int, char);

FuncPtr funcptrabsoluteaddr() {
    return &func0;
}

Информация о результате

Группа: безопасность
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: FUNC_PTR_ABSOLUTE_ADDR
Влияние: низко
ID CWE: 587

Введенный в R2015b