CXX.SUSPICIOUS_INDEX_CHECK

当访问特定索引处的数组之前存在可疑的索引检查时,CXX.SUSPICIOUS_INDEX_CHECK 检查器会查找缺陷。

漏洞与风险

如果超出数组大小的索引访问数组,可能会导致数据损坏、操作不当或崩溃。

缓解与预防

在访问特定索引处的数组之前,执行适当的边界检查。

漏洞代码示例

复制
int get_index(); // some function returning an index

void foo() {
    const int SIZE = 10;
    int arr[SIZE];
    int index = get_index();

    if (index >= 12) {
        return;
    }

    arr[index] = 0;
}

Klocwork 在第 12 行报告 CXX.SUSPICIOUS_INDEX_CHECK,提醒用户关注第 8 行的可疑索引检查。

如果第 12 行的索引值为 10 或 11,则可能取消引用数组,这可能会导致缓冲区溢出。

修正代码示例

复制
int get_index(); // some function returning an index

void foo() {
    const int SIZE = 10;
    int arr[SIZE];
    int index = get_index();

    if (index >= 9) {
        return;
    }

    arr[index] = 0;
}

不会发生缓冲区溢出,因为第 8 行的约束条件“index >= 9”排除了所有不良行为。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。