SV.STRBO.UNBOUND_COPY
未绑定的字符串复制中的缓冲区溢出
strcpy 函数用于将源字符串复制到内存缓冲区。strcpy 函数将固定大小的数组作为目标,但是未对复制的数据加以限制,因此可能发生缓冲区溢出。
SV.STRBO.UNBOUND_COPY 将标记调用 strcpy 的代码实例。
漏洞与风险
strcpy 函数未检查所复制字符串的长度,可能很容易导致缓冲区溢出。如果可能,建议使用 strncpy 函数并检查应用程序中缓冲区的使用情况。
漏洞代码示例
复制
int main()
{
char FIXEDbuf[12];
strcpy(FIXEDbuf, "Something rather large");
return 0;
}
Klocwork 针对第 4 行生成问题报告,指出 strcpy 函数未检查缓冲区边界并且可能使固定大小为 12 的缓冲区 FIXEDbuf 溢出。
修正代码示例
复制
int main()
{
char FIXEDbuf[23];
char *POINTERbuf;
strcpy(FIXEDbuf, "Something rather large");
strcpy(POINTERbuf, "Something very large as well");
return 0;
}
在该修正代码示例中,FIXEDbuf 的大小已增加为 23,以确保有足够的空间来进行 strcpy 运算。要修正代码的另一个备选方法是使用 strncpy 并检查缓冲区大小。