CWE

常见的弱点枚举

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

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

cwe - 478:失踪的默认情况下在多个条件表达式

弱点ID: 478
抽象:基地
结构:简单的
视图定制的信息:
+描述
代码表达式中没有一个默认情况下使用多个条件,比如一个switch语句。
+扩展描述
如果多个条件表达式(如开关在C)省略了默认情况下但不考虑可能发生或处理所有可能的值,那么这可能会导致复杂的逻辑错误和合成的弱点。因此,进一步的决策基于差信息,级联失效的结果。这个级联故障可能导致任何数量的安全问题,和系统中构成一个重大的失误。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 1023年 不完全与缺失的因素
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1006年 糟糕的编码实践
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C患病率(待定)

c++患病率(待定)

Java患病率(待定)

c#患病率(待定)

Python患病率(待定)

JavaScript患病率(待定)

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

技术的影响:不同的上下文;改变执行逻辑

根据逻辑的情况下,任何后果可能结果:例如,保密、身份验证、授权、可用性、完整性、问责制、不可抵赖性。
+示范例子

示例1

以下不正确检查返回代码的情况下security_check函数返回1值时发生一个错误。如果攻击者可以提供数据,将调用一个错误,攻击者可以绕过安全检查:

(坏的代码)
例如语言:C
#定义失败0
#定义了1
int结果;

结果= security_check(数据);
开关(结果){
失败案例:
printf("安全检查失败! \ n ");
退出(1);
/ /打破从来没有达到,因为退出()
打破;

案例通过:
printf("安全检查通过。\ n ");
打破;
}
/ /程序执行继续……

而不是默认的标签应该用于行踪不明的条件:

(好的代码)
例如语言:C
#定义失败0
#定义了1
int结果;

结果= security_check(数据);
开关(结果){
失败案例:
printf("安全检查失败! \ n ");
退出(1);
/ /打破从来没有达到,因为退出()
打破;

案例通过:
printf("安全检查通过。\ n ");
打破;

默认值:
printf(“未知错误(% d),退出…\ n”,结果);
退出(1);
}

使用这个标签,因为假设不能占到所有可能的情况下。一个良好的实践是保留默认的错误处理。

示例2

在接下来的Java示例方法getInterestRate检索点的数量的利率抵押贷款。点的数量中提供输入参数和一个switch语句将利率值返回基于点的数量。

(坏的代码)
例如语言:Java
公共静态最终字符串INTEREST_RATE_AT_ZERO_POINTS = " 5.00 ";
公共静态最终字符串INTEREST_RATE_AT_ONE_POINTS = " 4.75 ";
公共静态最终字符串INTEREST_RATE_AT_TWO_POINTS = " 4.50 ";

公共BigDecimal getInterestRate (int) {
结果= new BigDecimal (INTEREST_RATE_AT_ZERO_POINTS);

开关(点){
例0:
结果= new BigDecimal (INTEREST_RATE_AT_ZERO_POINTS);
打破;

案例1:
结果= new BigDecimal (INTEREST_RATE_AT_ONE_POINTS);
打破;

案例2:
结果= new BigDecimal (INTEREST_RATE_AT_TWO_POINTS);
打破;
}
返回结果;
}

然而,这段代码假设点输入参数的值永远是0,1或2,不检查其他不正确的值传递给方法。这可以很容易地通过提供一个默认标签的switch语句输出错误消息指示一个无效值点输入参数和返回一个null值。

(好的代码)
例如语言:Java
公共静态最终字符串INTEREST_RATE_AT_ZERO_POINTS = " 5.00 ";
公共静态最终字符串INTEREST_RATE_AT_ONE_POINTS = " 4.75 ";
公共静态最终字符串INTEREST_RATE_AT_TWO_POINTS = " 4.50 ";

公共BigDecimal getInterestRate (int) {
结果= new BigDecimal (INTEREST_RATE_AT_ZERO_POINTS);

开关(点){
例0:
结果= new BigDecimal (INTEREST_RATE_AT_ZERO_POINTS);
打破;

案例1:
结果= new BigDecimal (INTEREST_RATE_AT_ONE_POINTS);
打破;

案例2:
结果= new BigDecimal (INTEREST_RATE_AT_TWO_POINTS);
打破;

默认值:
System.err。println(“无效值点,必须是0,1或2”);
System.err。println(“利率返回null值”);
结果=零;
}

返回结果;
}

示例3

在接下来的Python示例相符的声明(可以在Python 3.10和更高版本)执行操作基于process_data的结果()函数。要么是0或1的预期收益。然而,如果一个意想不到的结果(例如,1或2)获得然后不采取行动可能导致一个意想不到的程序状态。

(坏的代码)
例如语言:Python
结果= process_data(数据)
比赛结果:
例0:
打印(“妥善处理零。”)

案例1:
打印(“妥善处理一个案子”。)

#程序执行继续……

推荐的方法是添加一个默认的情况下,捕捉任何意想不到的结果的条件下,无论如何不可能这些意想不到的条件,并妥善处理。

(好的代码)
例如语言:Python
结果= process_data(数据)
比赛结果:
例0:
打印(“妥善处理零。”)

案例1:
打印(“妥善处理一个案子”。)

例_:
打印(“妥善处理意外情况。”)

#程序执行继续……

示例4

在以下JavaScript例切换实例语句(1.2及以后版本中可用的JavaScript)是用于处理一个给定的步骤基于calcuation涉及两个输入的结果。预期回报率是1、2或3。然而,如果一个意想不到的结果(例如,4)获得然后没有行动将可能导致一个意想不到的程序状态。

(坏的代码)
例如语言:JavaScript
让一步= input1 + input2;
开关(步骤){
案例1:
警报(“流程第一步。”);
打破;

案例2:
警报(“流程步骤2。”);
打破;

案例3:
警报(“流程步骤3。”);
打破;

}
/ /程序执行继续……

推荐的方法是添加一个默认的情况下,捕捉任何意想不到的结果的条件,妥善处理。

(好的代码)
例如语言:JavaScript
让一步= input1 + input2;
开关(步骤){
案例1:
警报(“流程第一步。”);
打破;

案例2:
警报(“流程步骤2。”);
打破;

案例3:
警报(“流程步骤3。”);
打破;

默认值:
警报(“遇到意想不到的一步。”);

}
/ /程序执行继续……

示例5

有限状态机(FSM)“坏”的代码片段所示分配输出(“”)基于状态的价值,确定基于用户提供的输入(user_input)。

(坏的代码)
例如语言:Verilog
模块fsm_1 (, user_input) clk rst_n);
输入[2:0]user_input;
输入时钟,rst_n;
输出reg (2:0);
注册(1:0)状态;
总是@ (posedge clk或negedge rst_n)
开始
如果(! rst_n)
国家= 3 'h0;
其他的
案例(user_input)
3 'h0:
3 'h1:
3 'h2:
= 2 'h3 3 'h3:状态;
= 2 'h2 3 'h4:状态;
= 2 'h1 3 'h5:状态;
endcase
结束
从< = {1 'h1状态};
endmodule

case语句不包含一个默认的处理3 'h6的场景当用户提供输入和3 'h7。这些输入推系统一个未定义的状态,可能会导致崩溃(拒绝服务)或任何其他意外的结果。

添加一个默认的语句来处理未定义的输入,缓解了这一问题。这是“好”的代码片段所示。默认语句以粗体显示。

(好的代码)
例如语言:Verilog
案例(user_input)
3 'h0:
3 'h1:
3 'h2:
= 2 'h3 3 'h3:状态;
= 2 'h2 3 'h4:状态;
= 2 'h1 3 'h5:状态;
默认值:国家= 2 'h0;
endcase
+潜在的缓解措施

实施阶段:

确保没有下落不明的情况,当调整程序流或值基于给定的变量的值。切换风格的语句,很简单的创建一个默认的情况下,如果做得正确,缓解这种情况。然而,通常默认情况下使用仅仅代表一个假定的选择,而不是作为无效输入的检查工作。这是可怜的实践和在某些情况下是和省略一个默认情况下完全一样糟糕。
+弱点Ordinalities
Ordinality 描述
(其他弱点的弱点存在独立的)
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 962年 SFP二级集群:未经检查的状态情况
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1307年 方案及质量度量,可维护性
+分类法映射
映射分类名称 节点ID 适合 映射节点名
未能占默认情况下开关
软件故障模式 SFP4 不受控制的状态条件
+引用
[REF-18]安全软件公司. .“扣应用程序安全性的过程”。2005年。<https://cwe.mitre.org/documents/sources/TheCLASPApplicationSecurityProcess.pdf>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章“Switch语句”,337页。1版。艾迪生卫斯理》2006。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19
+贡献
贡献的日期 贡献者 组织
2022-08-15 画Buttner
建议更改名称和其他修改,包括一个新的示范例子。
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms Common_Consequences、描述关系,Other_Notes, Taxonomy_Mappings Weakness_Ordinalities
2009-05-27 CWE内容团队 主教法冠
更新描述、名称
2010-06-21 CWE内容团队 主教法冠
更新Demonstrative_Examples
2011-03-29 CWE内容团队 主教法冠
更新Demonstrative_Examples
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2011-06-27 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新引用关系
2014-06-23 CWE内容团队 主教法冠
更新描述、Other_Notes Potential_Mitigations
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2017-11-08 CWE内容团队 主教法冠
更新的关系
2018-03-27 CWE内容团队 主教法冠
更新的关系
2019-01-03 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新引用、关系类型
2020-08-20 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Applicable_Platforms Demonstrative_Examples、描述、名称、Potential_Mitigations
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 未能占默认情况下开关
2009-05-27 未能使用默认情况下开关
2022-10-13 失踪的默认情况下在Switch语句
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日