Целевое недостаточное наполнение буфера в обработке строк

Функция пишет, чтобы буферизовать при отрицательном смещении с начала буфера

Описание

Целевое недостаточное наполнение буфера в обработке строк происходит, когда определенные функции обработки строк пишут в свой целевой буферный аргумент при отрицательном смещении с начала буфера.

Например, для функционального sprintf(char* buffer, const char* format), вы получаете buffer из операции buffer = (char*)arr; ... buffer += offset;. arr является массивом, и offset является отрицательной величиной.

Риск

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

Фиксация

Если целевой буферный аргумент следует из адресной арифметики с указателями, смотрите, постепенно уменьшаете ли вы указатель. Зафиксируйте декремент указателя путем изменения или исходного значения перед декрементом или декрементного значения.

Примеры

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

#include <stdio.h>
#define offset -2

void func(void) {
    char buffer[20];
    char *fmt_string ="Text";

    sprintf(&buffer[offset], fmt_string);     
}

В этом примере &buffer[offset] при отрицательном смещении из памяти, выделенной buffer.

Исправление — указатель изменения Decrementer

Одно возможное исправление должно изменить значение offset.

#include <stdio.h>
#define offset 2

void func(void) {
    char buffer[20];
    char *fmt_string ="Text";

    sprintf(&buffer[offset], fmt_string);     
}

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

Группа: Статическое ЗУ
Язык: C | C++
Значение по умолчанию: на
Синтаксис командной строки: STRLIB_BUFFER_UNDERFLOW
Влияние: высоко
ID CWE: 124, 786, 787

Введенный в R2015b