ID: 242 类型:基础 | 状态:草稿 |
描述
程序调用一个无法保证安全工作的函数。
扩展描述
某些函数的行为是危险的,不管它们是如何使用的。这类功能的实现通常不考虑安全问题。get()函数不安全,因为它不对输入的大小执行边界检查。攻击者可以轻松地将任意大小的输入发送到get()并溢出目标缓冲区。同样,当读取静态分配的字符数组时,>>运算符是不安全的,因为它不会对输入的大小执行边界检查。攻击者可以轻松地将任意大小的输入发送给>>运算符,并溢出目标缓冲区。
相关视图
与“研究层面”视图(CWE-1000)相关
引入模式
阶段 | 说明 |
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 | 冲击 | 可能性 |
Other | 技术冲击: 随上下文而变 |
被利用的可能性:
高
示例
例1
下面的代码调用gets()将信息读取到缓冲区中。
(问题代码)
Example Language: C
char buf[BUFSIZE];
gets(buf);
c语言中的 gets() 函数是不安全的.
例2
下面代码调用gets()从命令行中读取数据。
(问题代码)
Example Language: C
char buf[24];
printf("Please enter your name and press <Enter>\n");
gets(buf);
...
}
但是,程序员使用的函数gets()本质上是不安全的,因为它盲目地将stdin中的所有输入复制到缓冲区,而不检查大小。这允许用户提供大于缓冲区大小的字符串,从而导致溢出条件。
应对措施
阶段: 实现; 需求 禁止使用危险函数。使用功能相同的替代函数 |
阶段: 测试 使用静态分析工具发现使用危险函数的代码。 |
种属
关系 | 类型 | ID | 名称 |
属于 | 227 | ||
属于 | 748 | ||
属于 | 1001 | ||
属于 | 1171 |