Function pointer assigned with absolute address

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

Описание

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

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

Риск

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

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

Фиксация

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

Примеры

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

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