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
Влияние: Низкое
ИДЕНТИФИКАТОР CWE: 587
Введенный в R2015b