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