CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.10)
ID

cwe - 788:缓冲区结束后访问的内存位置

弱点ID: 788
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品读取或写入缓冲区使用索引或指针,引用一个内存位置后的缓冲区。
+扩展描述
这通常发生在一个指针或其索引缓冲区后增加一个位置;或者当指针的算术结果后的缓冲区。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 121年 基于堆栈缓冲区溢出
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 122年 基于堆的缓冲区溢出
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 126年 缓冲罩上
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1218年 内存缓冲区错误
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
保密

技术的影响:读记忆

禁止入内的阅读,攻击者可能对敏感信息的访问。如果敏感信息包含系统的细节,比如当前缓冲区位置在内存中,这方面的知识可用于工艺进一步袭击,可能带来更严重的后果。
完整性
可用性

技术的影响:修改内存;DoS:崩溃,退出或重新启动

越限的内存访问很可能导致腐败相关的记忆,或许说明,可能导致崩溃。其他的攻击导致缺乏可用性是可能的,包括把程序进入一个无限循环。
完整性

技术的影响:修改内存;执行未经授权的代码或命令

如果攻击者可访问的内存可以有效地控制,它可能会运行任意代码的情况,与一个标准的缓冲区溢出。如果攻击者可以覆盖一个指针的内存(通常是32位或64位),他们可以重定向一个函数指针指向自己的恶意代码。即使攻击者只能修改单个字节可以任意代码执行成为可能。有时这是因为同样的问题可以重复利用同样的效果。有时因为攻击者可以覆盖强调安全的特定于应用程序的数据——比如一个标志指示是否管理员用户。
+示范例子

示例1

这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。

(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr;
char主机名[64];
in_addr_t inet_addr (const char * cp);

/ *程序确保user_supplied_addr是正确的格式转换* /

validate_addr_form (user_supplied_addr);
addr = inet_addr (user_supplied_addr);
惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET);
strcpy(主机名、hp - > h_name);
}

这个函数分配64字节的缓冲区存储主机名,但是没有保证主机名不能超过64字节。如果攻击者指定一个地址解析为一个非常大的主机名,那么该函数会覆盖敏感数据,甚至放弃攻击者的控制流。

注意,本例中还包含一个未检查返回值(cwe - 252)能导致一个空指针(cwe - 476)。

示例2

在下面的示例中,可以要求memcpy比假定移动更大的内存段:

(坏的代码)
例如语言:C
int returnChunkSize (void *) {

/ *如果块信息有效,返回可用内存的大小,

*,返回1表示一个错误

* /
}
int main () {

memcpy (destBuf srcBuf (returnChunkSize (destBuf) 1));
}

如果returnChunkSize()碰巧遇到一个错误将返回1。注意,返回值不是之前检查memcpy操作(cwe - 2521),所以可以作为尺寸参数传递给memcpy () (cwe - 805)。因为memcpy()假设值是无符号,它将被视为MAXINT-1 (cwe - 195),因此将远比可能可用内存复制到目标缓冲区(cwe - 787,cwe - 788)。

示例3

这个例子中一个编码过程适用于一个输入字符串并将其存储到缓冲区。

(坏的代码)
例如语言:C
char * copy_input (char * user_supplied_string) {
int i, dst_index;
char * dst_buf = (char *) malloc (4 * sizeof (char) * MAX_SIZE);
如果(MAX_SIZE < = strlen (user_supplied_string)) {
死亡(“用户字符串太长,死亡邪恶的黑客!”);
}
dst_index = 0;
(我= 0;我< strlen (user_supplied_string);我+ +){
如果(' & ' = = user_supplied_string[我]){
dst_buf (dst_index + +) = ' & ';
dst_buf (dst_index + +) = ' a ';
dst_buf [dst_index + +] =“m”;
dst_buf [dst_index + +] =“p”;
dst_buf (dst_index + +) = '; ';
}
else if (' < ' = = user_supplied_string[我]){

/ * & lt编码;* /
}
其他dst_buf [dst_index + +] = user_supplied_string[我];
}
返回dst_buf;
}

程序员试图编码用户控制的&字符字符串,然而字符串的长度编码应用程序之前进行验证。此外,程序员假定编码扩张只会扩大给定字符的4倍,而编码&扩展的5。结果,当编码过程扩展了字符串可以溢出目的地缓冲区,如果攻击者提供了许多与符号的字符串。

示例4

在接下来的C / c++方法processMessageFromSocket例子从一个套接字()将会得到一个消息,放入缓冲区,并将缓冲区的内容解析成一个结构,包含消息长度和消息体。使用一个for循环将消息体复制到本地字符串将被传递给另一个方法进行处理。

(坏的代码)
例如语言:C
int processMessageFromSocket (int插座){
int成功;

字符缓冲区(BUFFER_SIZE);
字符消息(MESSAGE_SIZE);

/ /得到消息从套接字并存储到缓冲区

/ /忽略缓冲区> BUFFER_SIZE医生
如果(getMessage(套接字缓冲区,BUFFER_SIZE) > 0) {

/ /将缓冲区的内容放入消息结构
ExMessage *味精= recastBuffer(缓冲);

/ /消息体复制到字符串进行处理
int指数;
(指数= 0;指数<味精- > msgLength;指数+ +){
消息(指数)=味精- > msgBody(指数);
}
消息(指数)= ' \ 0 ';

/ /处理消息
成功= processMessage(消息);
}
返回成功;
}

然而,消息长度可变的结构是用作循环结束的条件没有确认消息长度变量准确地反映消息体的长度(cwe - 606)。这可能导致一个缓冲区上(cwe - 125)通过阅读从内存缓冲区的边界之外如果消息长度变量表示的长度长于消息体的大小(cwe - 130)。

+观察到的例子
参考 描述
经典的基于堆栈缓冲区溢出在媒体播放器在播放列表中使用长条目
基于堆的缓冲区溢出在媒体播放器在播放列表中使用长条目
大精度值的格式字符串触发溢出
attacker-controlled数组索引会导致代码的执行
操作系统内核信托userland-supplied长度值,使阅读的敏感信息
链:整数signedness错误(cwe - 195)通过签署比较,导致堆溢出(cwe - 122)
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1129年 方案》(2016)——可靠性质量措施
+分类法映射
映射分类名称 节点ID 适合 映射节点名
OMG ASCRM ASCRM -cwe - 788
+引用
(ref - 961)对象管理组织(OMG)。“自动源代码可靠性措施(ASCRM)”。ascrm - cwe - 788。2016 - 01。<http://www.omg.org/spec/ASCRM/1.0/>。
+内容的历史
+提交
提交日期 提交者 组织
2009-10-21 CWE内容团队 主教法冠
+贡献
贡献的日期 贡献者 组织
2022-02-23 Eric江诗丹顿Brinz GENIA-SEC IT-Sicherheitsmanagement GmbH是一家
建议修正扩展描述。
+修改
修改日期 修饰符 组织
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples Observed_Examples,关系
2013-02-21 CWE内容团队 主教法冠
更新Demonstrative_Examples
2014-06-23 CWE内容团队 主教法冠
更新Demonstrative_Examples
2015-12-07 CWE内容团队 主教法冠
更新描述
2017-05-03 CWE内容团队 主教法冠
更新描述
2017-11-08 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Observed_Examples
2019-01-03 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-06-25 CWE内容团队 主教法冠
更新Demonstrative_Examples
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-07-20 CWE内容团队 主教法冠
更新Demonstrative_Examples
2022-04-28 CWE内容团队 主教法冠
更新描述
2023-01-31 CWE内容团队 主教法冠
更新描述
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日