SV.STRBO.BOUND_COPY.UNTERM

随后字符串运算中可能的缓冲区溢出

如果绑定复制操作虽没有溢出缓冲区大小,但是未在缓冲区中为字符串 NULL 终止符留有空间,则将报告此缺陷。如果完成字符串复制操作(strncpy、StrnCpy、safe_strcpy)后,缓冲区中没有 NULL 终止符的空间,SV.STRBO.BOUND_COPY.UNTERM 检查器将查找此情况。

漏洞与风险

如果字符串未以 NULL 终止,则随后未绑定的字符串运算可能发生缓冲区溢出。

漏洞代码示例

复制
 #include <string.h>
 int main(int argc, char* argv[]){
   char foo[10];
   strncpy(foo, "1234567890", sizeof(foo));
 }

在此示例中,在第 4 行报告了 SV.STRBO.BOUND_COPY.UNTERM,因为缓冲区 foo 中没有 NULL 终止符的空间。

修正代码示例 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 提供。