RN.INDEX
不適切なチェック前のインデックスの不審な使用
int と定義されたバッファインデックス変数が負の数でないことを確認するのは重要です。 これがバッファオーバーフローを引き起こす可能性があるためです。ただし、チェック前に変数がコードのインデックスとして採用されている場合は、チェックは、冗長となるか、またはインデックスの使用を優先させてください。RN.INDEX チェッカーは、バッファインデックスとして使用されている変数が、負の値についてチェックされる前に使用されるようになったインスタンスにフラグを立てます。
脆弱性とリスク
負の値のチェックのバッファインデックスが正であるとわかっている場合、チェックは冗長となります。そうでない場合は、チェックはインデックスの使用を優先させてください。 そうでなければ、意味がありません。
脆弱コード例
コピー
public int foo(int *a, int t)
{
int x;
x = a[t];
if (t >= 0)
x++;
return x;
}
この例では、Klocwork は、インデックス変数 't' が負の値についてチェックされる 5 行目の RN.INDEX を報告します。既に 4 行目でバッファインデックスとして使用されたことがあるため、チェックは手遅れです。変数 't' が正であるとわかっている場合、チェックは冗長となります。そうでない場合は、チェックは変数のインデックスとしての使用を優先させてください。
修正コード例
コピー
public int foo(int *a, int t)
{
int x;
if (t >= 0)
{
x = a[t];
x++;
}
return x;
}
修正されたコード例では、変数は、6 行目でインデックスとして使用される前に、4 行目で負の値についてチェックされます。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。