CWE

常见的弱点枚举

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

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

cwe - 457:使用未初始化的变量

弱点ID: 457
抽象:变体
结构:简单的
视图定制的信息:
+描述
代码使用一个变量没有初始化,导致不可预知的或意想不到的结果。
+扩展描述
在某些语言如C和c++,默认堆栈变量没有初始化。他们通常包含垃圾数据堆栈的内容记忆之前调用这个函数。攻击者有时可以控制或阅读这些内容。在其他语言或条件,未显式初始化的变量可以给一个默认值,安全问题,这取决于程序的逻辑。未初始化的变量的存在有时可以显示一个排版错误的代码。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 908年 使用未初始化资源
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 456年 失踪的初始化一个变量
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 665年 不适当的初始化
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”方案及数据保护措施”(cwe - 1340)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 665年 不适当的初始化
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现 在C语言中,使用未初始化的char *在某些字符串库将返回不正确的结果,作为图书馆希望零终结者总是最后一个字符串,即使字符串是空的。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C(有时流行)

c++(有时流行)

Perl(通常是普遍的)

PHP(通常是普遍的)

类:不是特定于语言的患病率(待定)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
可用性
完整性
其他

技术的影响:其他

初始变量通常包含垃圾,不能信任的一致性。这可能导致拒绝服务条件,或修改控制流以意想不到的方式。在某些情况下,攻击者可以使用之前的行动“pre-initialize”变量,这可能使代码执行。这可能会导致竞态条件如果锁变量检查时不应该。
授权
其他

技术的影响:其他

字符串不初始化尤其危险,因为许多功能预计最后一个空的——最后,只有一个字符串。
+利用的可能性
+示范例子

示例1

这段代码输出一个问候使用信息存储在一个POST请求:

(坏的代码)
例如语言:PHP
如果收取($ _POST['名字'])){
$ nameArray = $ _POST['名字'];
}
“你好”。美元nameArray['第一次'];

这段代码检查POST数组的名字的是之前设置分配$ nameArray变量。然而,如果数组不是在POST请求,nameArray美元将保持未初始化。这将导致一个错误访问数组时打印问候信息,这可能导致进一步的利用。

示例2

以下switch语句的目的是设置变量的值和bN之前使用:

(坏的代码)
例如语言:C
int, Bn;
开关(ctl) {
案例1:
一个= 0;
bN = 0;
打破;

例0:
=我;
bN =我;
打破;

案例1:
=我+ NEXT_SZ;
bN = i - NEXT_SZ;
打破;

默认值:
一个= 1;
一个= 1;
打破;
}
重画(bN);

switch语句的默认情况下,程序员有意外的价值的两倍。因此,bN将一个未定义的值。大多数未初始化的变量问题导致通用软件可靠性问题,但是如果攻击者可以故意触发使用未初始化的变量,他们可能会发起拒绝服务攻击程序崩溃。在适当的情况下,攻击者可以通过影响控制未初始化变量的值栈上的值之前调用的函数。

示例3

这个例子将在一个未知的条件下,当我离开test_string err_val是相同的值,因为test_string不是初始化(cwe - 456)。根据这个代码段出现(如在一个函数体),test_string可能是随机的,如果是存储在堆或堆栈。如果中声明的变量是静态内存,它可能是零个或NULL。编译器优化这个地址的不可预知性。

(坏的代码)
例如语言:C
char * test_string;
如果(我! = 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 =初“完成”;
如果(我! = err_val)
{
test_string =“Hello World !”;
}
printf (" % s ", test_string);

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

(好的代码)
例如语言:C
char * test_string;
如果(我! = err_val)
{
test_string =“Hello World !”;
}
其他{
test_string = "做另一边!”;
}
printf (" % s ", test_string);
+观察到的例子
参考 描述
链:sscanf()调用用于检查用户名和组存在,但sscanf()调用的返回值不是检查(cwe - 252),导致未初始化的变量检查(cwe - 457),返回成功执行特权允许授权旁路(cwe - 863)。
链:拒绝服务可能是由于未初始化的变量(cwe - 457)允许一个无限循环(cwe - 835)从一个连接到一个服务器没有响应。
未初始化的变量导致流行的桌面应用程序的代码执行。
精心设计的输入触发引用未初始化的对象的指针。
精心制作的音频文件触发使用未初始化的变量时崩溃。
使用未初始化的变量随机种子。
+潜在的缓解措施

实施阶段:

策略:减少攻击表面

将所有变量分配给一个初始值。

阶段:构建和编译

策略:编译和构建硬化

大多数编译器将抱怨使用未初始化的变量是否打开警告。

阶段:实施;操作

当使用一种语言,不需要显式声明的变量,运行或编译软件模式,报告未申报或未知的变量。这可能表明存在一个排版错误的变量的名字。

阶段:需求

选择可以使用的语言,这些问题并不容易。

阶段:体系结构和设计

减轻技术,如安全字符串库和容器可以引入抽象。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 398年 7 pk -代码质量
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 998年 SFP二级集群:故障计算
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1180年 02 SEI CERT Perl编码标准,指导方针。声明和初始化(DCL)
+分类法映射
映射分类名称 节点ID 适合 映射节点名
未初始化变量
7有害的王国 未初始化变量
软件故障模式 SFP1只能 在计算故障
SEI CERT Perl编码标准 DCL33-PL 不精确的 在使用它们之前声明的标识符
+引用
[REF-18]安全软件公司. .“扣应用程序安全性的过程”。2005年。<https://cwe.mitre.org/documents/sources/TheCLASPApplicationSecurityProcess.pdf>。
(ref - 436)怜悯。“利用未初始化的数据”。2006 - 01。<http://www.felinemenace.org/ /论文/ UBehavior / UBehavior.zip摆布>。
(ref - 437)微软安全漏洞研究和国防。“ms08 - 014:未初始化堆栈变量脆弱性”的情况下。2008-03-11。<http://blogs.technet.com/swi/archive/2008/03/11/the-case-of-the-uninitialized-stack-variable-vulnerability.aspx>。
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之八:c++灾难。”Page 143. McGraw-Hill. 2010.
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章“变量初始化”,312页。1版。艾迪生卫斯理》2006。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-01 股的分析
添加/更新白盒定义
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms Common_Consequences、描述关系,Observed_Example, Other_Notes,引用,Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Potential_Mitigations
2009-03-10 CWE内容团队 主教法冠
更新Demonstrative_Examples
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新引用关系
2012-10-30 CWE内容团队 主教法冠
更新Demonstrative_Examples
2013-02-21 CWE内容团队 主教法冠
更新Applicable_Platforms、描述Other_Notes Potential_Mitigations,关系
2014-06-23 CWE内容团队 主教法冠
更新Modes_of_Introduction Other_Notes
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2017-11-08 CWE内容团队 主教法冠
更新引用关系,Taxonomy_Mappings White_Box_Definitions
2019-01-03 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新关系类型
2020-02-24 CWE内容团队 主教法冠
更新引用、关系类型
2020-08-20 CWE内容团队 主教法冠
更新的关系
2020-12-10 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples Observed_Examples,关系
2021-07-20 CWE内容团队 主教法冠
更新Observed_Examples
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 未初始化变量
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日