CWE

普遍的弱点

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

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

CWE-783:操作员优先逻辑错误

弱点ID:783
抽象:根据
结构:简单的
查看自定义信息:
+描述
该产品使用一种表达式,其中操作员的优先级会导致使用错误的逻辑。
+扩展描述
虽然通常只是一个错误,但如果操作员的优先级逻辑错误在安全 - 关键代码中使用,例如做出身份验证决策,则可能会产生严重的后果。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 班级班级 - 以非常抽象的方式描述的弱点,通常与任何特定的语言或技术无关。比支柱弱点更具体,但比基本弱点更一般。班级弱点通常用以下维度的1或2来描述问题:行为,属性和资源。 670 始终构成控制流程实现
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 438 行为问题
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 569 表达问题
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行 即使在正常操作期间,与操作员优先级有关的逻辑错误也可能导致问题,因此在测试阶段可能会迅速发现它们。如果测试不完整或对代码的手动审查非常依赖,则在部署软件之前可能不会发现这些错误。
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

C(很少普遍)

C ++(很少普遍)

班级:不是特定语言的(很少普遍)

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

技术影响:随上下文而变化;意外状态

后果将根据不正确优先级的上下文而有所不同。在安全决定中,完整性或机密性是最有可能的结果。否则,由于软件达到意外状态,可能会发生崩溃。
+利用的可能性
低的
+示例的例子

示例1

在下面的示例中,方法validateuser呼吁另一种方法来验证用户的用户名和密码并返回成功或失败代码。

(不良代码)
示例语言:C
#Define Fail 0
#Define成功1

...

int verateuser(char *用户名,char *password){

int iSuser = fail;

//调用方法以身份验证用户名和密码

//如果身份验证失败,则返回失败,否则返回成功
if(isuser = authenticateUser(用户名,密码)==失败){
返回iSuser;
}
别的 {
Isuser =成功;
}

返回iSuser;
}

但是,在使用错误的操作员优先逻辑的IF语句中调用了用户名和密码进行身份验证的方法。由于比较运算符“ ==”的优先级高于分配运算符“ =”,因此将首先评估比较操作员,如果方法返回失败,则比较将是正确的,将返回变量设置为true and Success将退还。通过在IF语句的表达式中正确使用括号,可以轻松解决此操作器优先级逻辑误差,如下所示。

(好代码)
示例语言:C
...

if(((isuser = authenticateUser(用户名,密码))== fail){

...

示例2

在此示例中,该方法计算会计/财务应用程序的投资回报率。投资回报是通过从当前价值中减去初始投资成本,然后除以初始投资成本来计算的。

(不良代码)
示例语言:爪哇
公共双重计算电流投资(Double CurrentValue,double InitialInvestment){

double returnroi = 0.0;

//计算投资回报率
returnroi = CurrentValue-初始投资 /初始投资;

返回returnroi;
}

但是,由于公式中的运算符优先级逻辑不正确,投资计算的回报将无法产生正确的结果。除法运营商的优先级高于减去运营商,因此等式将将初始投资成本除以初始投资成本,而初始投资成本只会从当前价值中减去。同样,该操作员的优先逻辑误差可以通过在方程式内正确使用括号来解决,如下所示。

(好代码)
示例语言:爪哇
...

returnRoi =(CurrentValue-初始投资) /初始投资;

...

请注意,应验证本示例中的初始投资变量,以确保避免使用零误差的潜在划分大于零(CWE-369)。

+观察到的例子
参考 描述
身份验证模块允许身份验证旁路,因为它使用“(x = call(args)==成功)”而不是“((x = call(args))==成功)”。
链:语言解释器计算错误的缓冲区大小(CWE-131)使用“ size = ptr?x:y”而不是“ size =(ptr?x:y)”的表达式。
链:由于操作员优先级,产品无法正确检查反向DNS查找的结果(CWE-783),允许基于DNS的访问限制。
+潜在的缓解

阶段:实施

定期将子表达包装在括号中,尤其是在安全 - 关键代码中。
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 737 证书C安全编码标准(2008)第4章 - 表达式(EXP)
成员 看法查看 - CWE条目的子集,提供了一种检查CWE内容的方法。两个主视图结构是切片(平面列表)和图(包含条目之间的关系)。 884 CWE横截面
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1181 SEI CERT PERL编码标准 - 指南03.表达式(EXP)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1307 CISQ质量措施 - 可维护性
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1308 CISQ质量措施 - 安全性
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
证书C安全编码 exp00-c 精确的 使用括号进行操作优先
SEI CERT PERL编码标准 exp04-pl CWE更抽象 请勿将早期原则的逻辑操作员与晚期逻辑操作员混合
+参考
[Ref-62] Mark Dowd,John McDonald和Justin Schuh。“软件安全评估的艺术”。第6章,“优先”,第287页。第一版。艾迪生·卫斯理。2006。
+内容历史记录
+提交
提交日期 提交者 组织
2009-07-16 CWE内容团队 MITER
+修改
修改日期 修饰符 组织
2009-12-28 CWE内容团队 MITER
更新了观察到的examples
2011-06-27 CWE内容团队 MITER
更新的common_cconsquences
2012-05-11 CWE内容团队 MITER
更新了示范示例,参考,关系
2017-11-08 CWE内容团队 MITER
更新的分类法_ mappings,time_of_introduction
2019-01-03 CWE内容团队 MITER
更新的分类法_ mappings
2019-06-20 CWE内容团队 MITER
更新类型
2020-02-24 CWE内容团队 MITER
更新的关系
2020-08-20 CWE内容团队 MITER
更新的关系
2021-03-15 CWE内容团队 MITER
更新的关系
2023-01-31 CWE内容团队 MITER
更新的描述
提供更多信息 - 请选择其他过滤器。
页面最后更新:2023年1月31日