SV.STRBO.BOUND_COPY.UNTERM
次の文字列演算でバッファ オーバーフローの可能性があります
この欠陥は、バインドされたコピー操作によってバッファサイズのオーバーフローは起きないが、文字列 null 終了文字のバッファにスペースが残されないと報告されます。SV.STRBO.BOUND_COPY.UNTERM チェッカーは、文字列コピー操作 strncpy、StrnCpy、safe_strcpy の後、バッファ内に null 終了文字のスペースがないと、この状況を検出します。
脆弱性とリスク
文字列が null で終端されない場合、バインドされていない文字列操作に続いてバッファオーバーランが発生する可能性があります。
脆弱コード例
コピー
#include <string.h>
int main(int argc, char* argv[]){
char foo[10];
strncpy(foo, "1234567890", sizeof(foo));
}
この例では、バッファ foo 内で null 終了文字のスペースがないため、4 行目に SV.STRBO.BOUND_COPY.UNTERM が報告されています。
修正コード例 1
コピー
#include <string.h>
int main(int argc, char* argv[]){
char foo[12];
strncpy(foo, "1234567890", sizeof(foo));
}
以上のように修正することで、文字列のコピー後に strncpy 関数でバッファに対する null 終端文字を配置できます。sizeof(foo) が、ソース文字列長より大きい値を返すためです。
関連チェッカー
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。