Loop bounded with tainted value

Циклом управляет значение из небезопасного источника

Описание

Этот дефект происходит, когда цикл ограничен значениями из незащищенных источников.

Риск

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

Фиксация

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

Примеры

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

enum {
    SIZE10  =  10,
    SIZE100 = 100,
    SIZE128 = 128
};

int taintedloopboundary(int count) {
    int res = 0;
    for (int i=0 ; i < count; ++i) {
        res += i;
    }
    return res;
}

В этом примере функция использует входной параметр, чтобы циклично выполнить count \times. count мог быть любой номер, потому что значение не проверяется прежде, чем запустить цикл for.

Коррекция — управление циклом проверки

Одна возможная коррекция должна проверять значение переменной, управляющей циклом прежде, чем запустить цикл for. Этот пример проверяет если count больше нуля и меньше, чем максимальный размер.

enum {
    SIZE10  =  10,
    SIZE100 = 100,
    SIZE128 = 128
};

int taintedloopboundary(int count) {
    int res = 0;

    if (count>0 && count<SIZE128) {
        for (int i=0 ; i<count ; ++i) { 
            res += i;
        }
    }
    return res;
}

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

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

Введенный в R2015b