CodeQL 文档

可能不安全的 strcat 使用方式

ID: cpp/unsafe-strcat
Kind: problem
Security severity: 9.8
Severity: warning
Precision: medium
Tags:
   - reliability
   - correctness
   - security
   - external/cwe/cwe-676
   - external/cwe/cwe-120
   - external/cwe/cwe-251
Query suites:
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

标准库函数 strcat 将源字符串追加到目标字符串。如果未检查源字符串的大小,则无法保证将数据追加到目标字符串不会导致缓冲区溢出。缓冲区溢出会导致各种问题,从段错误到安全漏洞。

建议

仔细检查突出显示的函数调用,以确保不会发生缓冲区溢出。为了获得更稳健的解决方案,可以考虑添加显式范围检查或使用 strncat 函数。

示例

void f(char *s) {
	char buf[80];
	strcpy(buf, "s: ");
	strcat(buf, s);  // wrong: buffer not checked before strcat
}

void g(char *s) {
	char buf[80];
	strcpy(buf, "s: ");
	if(strlen(s) < 77)
		strcat(buf, s);  // correct: buffer size checked before strcat
}

参考

  • I. Gerg,缓冲区溢出攻击概述及示例。IANewsletter 第 7 卷,第 4 期,2005 年。

  • M. Donaldson,缓冲区溢出攻击内部机制:机制、方法及预防。SANS Institute InfoSec 阅读室。2002 年。

  • 常见漏洞枚举:CWE-676.

  • 常见漏洞枚举:CWE-120.

  • 常见漏洞枚举:CWE-251.

  • ©GitHub, Inc.
  • 条款
  • 隐私