CWE-125: Out-of-bounds Read(越界读取)

 ID: 125

类型:基础
结构:简单

状态:草稿

+描述

软件读取缓冲区之前或者之后的数据。

+扩展描述

通常,这会允许攻击者从其它内存位置读取敏感信息或导致崩溃。假定存在用于停止读取操作(如字符串中的nul)的哨兵变量时,当代码读取可变数量的数据时候可能会发生崩溃。预期的哨兵可能不在越界内存边界之内,导致读取过多数据,引发“分段错误”或“缓冲区溢出”。软件可以修改索引或执行指针运算,该索引或运算结果指向缓冲区边界之外的内存位置。随后的读取操作将产生未定义或意外的结果。

+关联视图

+与“研究层面”视图(CWE-1000)相关

+同 "简化已发布漏洞映射的弱点" 视图CWE-1003)相关

+与“开发层面”视图(CWE-699)相关

+引入模式

阶段

说明

实现

 

+应用平台

语言

C (出现的可能性不确定)

C++ (出现的可能性不确定)

+后果

范围

冲击

可能性

保密性

技术冲击: 内存读取

 

+示例

例1

在下面的代码中,该方法从特定数组索引位置的数组中检索一个值,该值作为该方法的输入参数给定。

(问题代码)

Example Language:

int getValueFromArray(int *array, int len, int index) {


int value;

// check that the array index is less than the maximum

// length of the array
if (index < len) {


// get the value at the specified index of the array
value = array[index];

}
// if array index is invalid then output error message

// and return value indicating error
else {

printf("Value is: %d\n", array[index]);
value = -1;

}

return value;

}

但是,此方法只验证给定的数组索引是否小于数组的最大长度,但不检查最小值(CWE-839)。这将允许接受负值作为输入数组索引,这将导致越界读取(CWE-125),并允许访问敏感内存。应检查输入数组索引,以验证是否在数组所需的最大和最小范围内(CWE-129)。在这个例子中,if语句应该修改为包含一个最小范围检查,如下所示

(正确代码)

Example Language:


...

// check that the array index is within the correct

// range of values for the array
if (index >= 0 && index < len) {

...

+种属

 

关系

类型

ID

名称

属于

970

SFP Secondary Cluster: Faulty Buffer Access

属于

1157

SEI CERT C Coding Standard - Guidelines 03. Expressions (EXP)

属于

1160

SEI CERT C Coding Standard - Guidelines 06. Arrays (ARR)

属于

1161

SEI CERT C Coding Standard - Guidelines 07. Characters and Strings (STR)

 

你可能感兴趣的:(漏洞检查)