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 が提供しているアプリケーションセキュリティトレーニング教材。