CWE

普遍的弱点

社区开发的软件和硬件弱点类型清单

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

CWE-908:使用非初始化资源

弱点ID:908
抽象:根据
结构:简单的
查看自定义信息:
+描述
该产品使用或访问尚未初始化的资源。
+扩展描述
当资源尚未正确初始化时,产品可能会出乎意料地行事。这可能会导致崩溃或无效的内存访问,但是后果因资源类型以及产品在产品中的使用方式而有所不同。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 665 初始化不当
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 457 使用非初始化变量
可以按照 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 909 缺少资源初始化
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 399 资源管理错误
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“简化已发表漏洞的简化映射”(CWE-1003)相关的视图相关(CWE-1003)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 665 初始化不当
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

班级:不是特定语言的(不确定的患病率)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
保密

技术影响:阅读记忆;读取应用程序数据

当重复使用内存或程序变量之类的资源时,该资源的原始内容可能在将其发送给不受信任的一方之前就无法清除。
可用性

技术影响:DOS:崩溃,退出或重新启动

非初始化的资源可能包含导致程序流以程序员不打算变化的值。
+利用的可能性
中等的
+示例的例子

示例1

在这里,咨询了布尔值初始化字段,以确保初始化任务仅完成一次。但是,该字段在静态初始化期间错误地设置为true,因此从未达到初始化代码。

(不良代码)
示例语言:爪哇
私人布尔初始化= true;
公共void somemethod(){
如果(!初始化){

//执行初始化任务
...

初始化= true;
}

示例2

以下代码打算仅将某些操作限制在管理员身上。

(不良代码)
示例语言:珀尔
$ username = getCurrentuser();
$ state = getStatedata($ username);
如果(定义($ state)){
$ uid = extractUserid($ state);
}

# 做东西
如果($ uid == 0){
doadminthings();
}

如果该应用程序无法提取状态信息 - 例如,由于数据库超时 - 将$ UID变量无法由程序员明确设置。这将导致$ UID被认为等于条件中的“ 0”,从而使原始用户可以执行管理员操作。即使攻击者无法直接影响状态数据,出乎意料的错误也可能导致不正确的特权仅出于意外而分配给用户。

示例3

以下代码打算将字符串连接到变量并打印字符串。

(不良代码)
示例语言:C
char str [20];
Strcat(Str,“ Hello World”);
printf(“%s”,str);

这似乎是足够无辜的,但是STR并未初始化,因此它包含随机内存。结果,str [0]可能不包含空终结器,因此副本可能以其他0的偏移范围开始。后果可能会有所不同,具体取决于基础内存。

如果在str [8]之前发现了无效终结器,则将在“ Hello World”字符串之前打印一些随机垃圾。内存可能包含以前用途的敏感信息,例如密码(可能是由于CWE-14或者CWE-244)。在此示例中,这可能没什么大不了的,但是请考虑如果在发现空终止器之前将大量内存打印出来,可能会发生什么。

如果在str [8]之前找不到空终结器,则可能会发生缓冲区溢出,因为Strcat将首先查找Null终结器,然后复制从该位置开始的12个字节。或者,可能会发生缓冲区过度阅读(CWE-126)如果在到达内存段结束之前找不到零终端,则导致分割故障和崩溃。

示例4

当我与err_val相同时,此示例将使test_string处于未知条件下,因为test_string未初始化(CWE-456)。取决于该代码段出现的位置(例如在功能主体内),如果将其存储在堆或堆栈上,则可能是随机的。如果变量在静态内存中声明,则可能为零或null。编译器优化可能有助于该地址的不可预测性。

(不良代码)
示例语言:C
char *test_string;
如果(i!= err_val)
{
test_string =“ Hello World!”;
}
printf(“%s”,test_string);

到达printf()时,test_string可能是一个意外的地址,因此printf可能会打印垃圾字符串(CWE-457)。

为了修复此代码,有几种方法可以确保Test_string在达到printf()后才正确设置。

一种解决方案是将test_string设置为有条件之前的可接受默认值:

(好代码)
示例语言:C
char *test_string =“开始完成”;
如果(i!= err_val)
{
test_string =“ Hello World!”;
}
printf(“%s”,test_string);

另一个解决方案是确保条件的每个分支(包括默认分支)可以确保设置test_string:

(好代码)
示例语言:C
char *test_string;
如果(i!= err_val)
{
test_string =“ Hello World!”;
}
别的 {
test_string =“在另一侧完成!”;
}
printf(“%s”,test_string);
+观察到的例子
参考 描述
链:在完成初始化之前,就会发生数据包客户端的创建(CWE-696)导致从非初始化的内存中读取(CWE-908),导致记忆损坏。
使用非初始化的内存可以允许执行代码。
没有非初始化的指针会导致崩溃和可能的代码执行。
产品在生成错误消息时不会清除内存内容,从而导致信息泄漏。
缺乏初始化触发了零指针的解除或双重触发。
非初始化的变量导致在流行桌面应用程序中执行代码。
链:非初始化的变量导致无限循环。
链:初始化不当会导致内存腐败。
链:由于授权不当而导致访问限制的旁路(CWE-862用户的结果是由不当初始化的(CWE-909)I/O许可位图
链:游戏服务器可以在初始化发生之前访问玩家数据结构,导致无效
链:可以指出非初始化的功能指针,允许执行代码
链:不正确的记忆初始化可能导致无效解雇
链:一些无私人的IOCTL不能验证在调用之前初始化结构,导致无效
+潜在的缓解

阶段:实施

在使用前明确对资源进行初始化。如果通过API函数或标准过程执行此操作,请按照所有必需的步骤操作。

阶段:实施

密切注意影响初始化的复杂条件,因为某些分支可能无法执行初始化。

阶段:实施

避免种族条件(CWE-362)在初始化例程中。

阶段:构建和编译

运行或编译产品的设置,该设置会生成有关非初始化变量或数据的警告。
+弱点
条件 描述
基本的
(弱点独立于其他弱点的地方)
结果
(弱点通常与其他一些弱点有关)
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1157 SEI CERT C编码标准 - 指南03.表达式(EXP)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1306 CISQ质量措施 - 可靠性
成员 看法查看 - CWE条目的子集,提供了一种检查CWE内容的方法。两个主视图结构是切片(平面列表)和图(包含条目之间的关系)。 1340 CISQ数据保护措施
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
证书C安全编码 EXP33-C CWE更抽象 不要读取非专门的记忆
+参考
[Ref-436]怜悯。“利用非初始化数据”。2006-01。<http://www.felinemenace.org/~mercy/papers/ubehavior/ubehavior.zip>。
+内容历史记录
+提交
提交日期 提交者 组织
2012-12-21 CWE内容团队 MITER
根据2012年12月在CWE研究清单上的讨论的新弱点。
+修改
修改日期 修饰符 组织
2017-11-08 CWE内容团队 MITER
更新的分类法_ mappings
2019-01-03 CWE内容团队 MITER
更新的关系
2020-02-24 CWE内容团队 MITER
更新的描述,关系
2020-08-20 CWE内容团队 MITER
更新的关系
2020-12-10 CWE内容团队 MITER
更新的关系
2021-03-15 CWE内容团队 MITER
更新了示范示例,obsoved_examples
2023-01-31 CWE内容团队 MITER
更新的描述,势_MITIGATIONS
提供更多信息 - 请选择其他过滤器。
页面最后更新:2023年1月31日