CWARN.ALIGNMENT
不正確なポインターのスケーリングの可能性があります
C および C++ において、算術操作が明示的にスケーリングされている方法のため、不適切なメモリにうっかりして参照することがあります。CWARN.ALIGNMENT チェッカーは、ポインターが正しく向いていない可能性のあるインスタンスを検出します。
脆弱性とリスク
間違ったポインターのスケーリングはバッファオーバーフロー状態を引き起こす可能性があります。
脆弱コード例
コピー
int buffer[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int test1() {
char *temp = (char *)buffer;
int res = (int) (*(temp+6));
return res;
}
この例では、間違ったポインタースケーリングの可能性があるため、Klocwork は 4 行目で CWARN.ALIGNMENT 警告を出します。この行で 'res' は配列 'buffer' の 7 番目の要素を取得するよう意図されたのでしょうが、変数 'temp' に 6 を足すことで 6 バイトを足すだけになっています。この場合は、この整数値が 'buffer' の 3 番目の要素の中央から抽出されています。
修正コード例
コピー
int buffer[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int test1() {
char *temp = (char *)buffer;
int res = *((int*)temp+6);
return res;
}
修正例では、'res' が 'buffer' の 7 番目の要素を明確に参照するようなコードになっています。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。