SV.STRBO.BOUND_COPY.OVERFLOW

バインドされた StringCopy のバッファオーバーフロー

SV.STRBO.BOUND_COPY.OVERFLOW チェッカーは、strncpy、StrnCpy、safe_strcpy などのバインドされた文字列コピー操作で発生した可能性のあるバッファオーバーフローを検出します。

脆弱性とリスク

文字列コピー操作中にバッファオーバーフローが発生すると、近くのメモリが上書きされます。その結果、メモリの安全性が侵害されます。

このようなエラーを回避するために、出力先のバッファのサイズを正しく計算し、バインドされている文字列コピー関数の 3 番目のパラメーターのサイズをバッファサイズ以下に設定してください。

脆弱コード例

コピー
 #include <string.h>
 int main(int argc, char* argv[]){
   char foo[10];
   char bar[] = "this text is too long";
   strncpy(foo, bar, sizeof(bar));
 }

Klocwork は、5 行目に SV.STRBO.BOUND_COPY.OVERFLOW 欠陥があることを報告します。 出力先バッファのサイズが、入力元バッファのサイズ 22 を下回る 10 となっています。

修正コード例 1

コピー
#include <string.h>
int main(int argc, char* argv[]){
  char foo[10];
  char bar[] = "this text is too long";
  strncpy(foo, bar, sizeof(foo));
}

この例では、コピー操作中にソース文字列が出力先バッファのサイズまで切り詰められるため、SV.STRBO.BOUND_COPY.OVERFLOW 欠陥は報告されません。

関連チェッカー

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。