Цикл ограничен с испорченным значением

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

Описание

Цикл, ограниченный с испорченным значением, обнаруживает циклы, которые ограничены значениями из небезопасного источника.

Риск

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

Фиксация

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

Примеры

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

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. 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