CWE

常见的弱点枚举

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

新CWE吗?点击这里!
CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.12)
ID

cwe - 761:免费指针不在缓冲区的开始

弱点ID: 761
抽象:变体
结构:简单的
视图定制的信息:
的用户感兴趣的更多的概念方面的一个弱点。例如:教育者,技术作家和项目/项目经理。 用户关心的实际应用和细节的本质弱点以及如何预防它的发生。例子:工具开发人员、安全人员、pen-testers事件反应分析师。 对于用户映射一个问题CWE / CAPEC id,即。,找到最合适的CWE为一个特定的问题(例如,CVE记录)。例如:工具开发人员、安全人员。 用户希望看到所有可用的信息CWE / CAPEC条目。 为用户谁想要定制显示细节。
×

编辑自定义过滤器


+描述
产品电话免费()在一个指针指向的内存资源分配在堆上,但不是开始时的缓冲区的指针。
+扩展描述

这可能会导致产品崩溃,或在某些情况下,修改关键程序变量或执行代码。

这个弱点通常发生在显式地在堆上分配的内存的malloc()家庭功能和免费的(),但指针算术造成了指针在缓冲区的内部或结束。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 763年 无效的指针或引用
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 404年 不当关机或释放资源
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现
+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
完整性
可用性
保密

技术的影响:修改内存;DoS:崩溃,退出或重新启动;执行未经授权的代码或命令

+示范例子

示例1

在这个例子中,程序员动态分配一个缓冲区来保存一个字符串,然后搜索一个特定的角色。完成搜索后,程序员试图释放分配的内存和成功或失败返回给调用者。注意:为了简化,本例中使用硬编码的字符串“搜索我!”和一个常量字符串的长度20。

(坏的代码)
例如语言:C
#定义成功(1)
#定义失败(0)

int contains_char (char c) {
char * str;
str = (char *) malloc (20 * sizeof (char));
strcpy (str,“搜索我!”);
而(* str ! = NULL) {
如果(* str = = c) {

/ *匹配字符,免费字符串并返回成功* /
免费(str);
返回成功;
}
/ *不匹配,增加指针并尝试下一个char * /

str = str + 1;
}
/ *我们不匹配字符的字符串,免费mem和返回失败* /

免费(str);
返回失败;
}

然而,如果字符不是一开始的字符串,或如果它不是字符串,那么指针不会开始的时候当程序员释放缓冲区。

而不是释放缓冲区的指针在中间,程序员可以使用一个索引指针遍历内存或抽象内存计算通过使用数组索引。

(好的代码)
例如语言:C
#定义成功(1)
#定义失败(0)

int cointains_char (char c) {
char * str;
int i = 0;
str = (char *) malloc (20 * sizeof (char));
strcpy (str,“搜索我!”);
虽然(我< strlen (str)) {
如果(str[我]= = c) {

/ *匹配字符,免费字符串并返回成功* /
免费(str);
返回成功;
}
/ *不匹配,增加指针并尝试下一个char * /

我=我+ 1;
}
/ *我们不匹配字符的字符串,免费mem和返回失败* /

免费(str);
返回失败;
}

示例2

这段代码尝试标记一个字符串,并将其变成一个数组使用strsep函数,插入一个\ 0字节的空格或制表符。完成循环后,美联社指向一个数组中的每个字符串输入字符串中的位置。

(坏的代码)
例如语言:C
据美联社,char * * * argv [10], * inputstring;
(美联社= argv;(*美联社= strsep (&inputstring \ t)) !) =零;
如果(* *美联社! = ' \ 0 ')
如果(+ + ap > = argv [10])
打破;

/……
免费(美联社[4]);

自strsep不是分配新的内存,释放一个元素的数组相当于免费inputstring中间的指针。

示例3

考虑下面的代码解析应用程序的上下文中提取命令的用户数据。目的是解析每个命令并将它添加到队列的命令,执行丢弃每个畸形的条目。

(坏的代码)
例如语言:C

/ /硬编码输入长度为简单起见
char *输入= (char *) malloc (40 * sizeof (char));
char *托托;
char * 9 = " \ t”;

get_user_input(输入);

/ *以下循环将解析和处理每个令牌在输入字符串* /

托托= strtok(输入、9月);
而(零! =托托){
如果(isMalformed (tok)) {

* / / *忽视抛弃坏数据
免费(托托);
}
其他{
add_to_command_queue(托托);
}
托托= strtok (NULL, 9月));
}

在上面的代码尝试空闲内存与糟糕的命令,因为分配的内存都是在一块,它必须一起被释放。

解决这个问题的一个方法是将命令复制到一个新的内存位置之前将它们放到队列中。所有命令都被处理之后,可以安全地释放的内存。

(好的代码)
例如语言:C

/ /硬编码输入长度为简单起见
char *输入= (char *) malloc (40 * sizeof (char));
char *托托,*命令;
char * 9 = " \ t”;

get_user_input(输入);

/ *以下循环将解析和处理每个令牌在输入字符串* /

托托= strtok(输入、9月);
而(零! =托托){
如果(! isMalformed(命令)){

/ * * /复制和排队好数据
命令= (char *) malloc ((strlen (tok) + 1) * sizeof (char));
拷贝字符串(命令,托托);
add_to_command_queue(命令);
}
托托= strtok (NULL, 9月));
}

免费(输入)
+观察到的例子
参考 描述
内部函数”称之为“calloc”并返回一个指针索引…内部分配的缓冲区。这导致了无效的内存释放。”
+潜在的缓解措施

实施阶段:

当使用指针算法遍历一个缓冲区,通过记忆和使用一个单独的变量来跟踪进度保存后释放的最初分配地址。

实施阶段:

在c++编程时,考虑使用boost库提供的智能指针来帮助正确和一致地管理内存。

阶段:体系结构和设计

策略:库或框架

使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。

例如,glibc Linux提供保护反对自由的无效的指针。

阶段:体系结构和设计

使用一种语言,提供了抽象内存分配和重分配。

测试阶段:

使用一个工具,动态检测内存管理问题,如valgrind。
+影响资源
  • 内存
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 969年 SFP二级集群:错误的内存释放
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1399年 综合分类:内存安全
+脆弱性映射笔记

用法:允许

(CWE ID可以用来映射到现实世界的漏洞)

原因:可接受的使用

理由是:

这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。

评论:

仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。
+笔记

维护

目前,cwe - 763是父母,然而它可能希望有一个中间的父母不是函数专用,类似于如何cwe - 762之间的一个中间的父母吗cwe - 763cwe - 590
+分类法映射
映射分类名称 节点ID 适合 映射节点名
软件故障模式 SFP12 错误的内存释放
+引用
[ref - 657]“提高c++库智能指针”。<https://www.boost.org/doc/libs/1_38_0/libs/smart_ptr/smart_ptr.htm>。URL验证:2023-04-07
[ref - 480]“Valgrind”。<http://valgrind.org/>。
+内容的历史
+提交
提交日期 提交者 组织
2009-05-08
(CWE 1.4, 2009-05-27)
CWE内容团队 主教法冠
+修改
修改日期 修饰符 组织
2010-09-27 CWE内容团队 主教法冠
更新的关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Demonstrative_Examples、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-02-18 CWE内容团队 主教法冠
更新Potential_Mitigations
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Observed_Examples
2023-01-31 CWE内容团队 主教法冠
更新描述
2023-04-27 CWE内容团队 主教法冠
更新引用关系
2023-06-29 CWE内容团队 主教法冠
更新Mapping_Notes
页面最后更新:2023年6月29日