Function pointer assigned with absolute address

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

Описание

Этот дефект происходит, когда указатель функции присвоен абсолютный адрес.

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

Риск

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

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

Фиксация

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

Примеры

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

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