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