天天看点

CWE-483: Incorrect Block Delimitation(块分隔不正确)

 ID: 483

类型:变量

结构:简单

状态:草稿

描述

代码没有显式地限定一个块,该块打算包含2个或更多语句,从而导致逻辑错误。

扩展描述

在某些语言中,大括号(或其他定界符)对于块是可选的。当省略分隔符时,某条语句被认为是在块中,而实际情况却不在块中,这种情况下就可到招致逻辑错误。。在某些情况下,逻辑错误可能会带来安全隐患。

相关视图

与“研究层面”视图(CWE-1000)相关

与“开发层面”视图(CWE-699)相关

引入模式

阶段 说明
实现

应用平台

语言

C (有时出现)

C++ (有时出现)

后果

范围 冲击 可能性

保密性

完整性

可利用性

技术冲击: 修改执行逻辑

这是一种常见的逻辑错误,通常会导致明显的错误行为,这些行为会被迅速发现并得到纠正。在轻度测试或未测试的代码中,此错误可能会引入到生产环境中,并通过创建导致应用程序中出现意外状态的控制流路径来提供额外的攻击向量。后果将取决于错误执行的行为类型。

被利用的可能性:

示例

例1

在本例中,程序员缩进了要调用do_x()和do_y()的语句,就好像只在条件为真时才调用这些函数一样。但是,由于没有大括号表示块,因此即使条件为false,也将始终执行do_y()。

(问题代码)

Example Language: C 

if (condition==true)

Do_X();

Do_Y();

这可能不是程序员想要的。当条件对安全至关重要时,例如在做出安全决策或检测关键错误时,这可能会产生漏洞。

例2

在这个例子中,程序员缩进了do_y()语句,就好像其意图是函数应该与前面的条件相关联,并且只应该在条件为真时调用。但是,由于do_x()是在条件的同一行上调用的,并且没有大括号来表示块,因此即使条件为false,也将始终执行do_y()。

(问题代码)

Example Language: C 

if (condition==true) Do_X();

Do_Y();

这可能不是程序员想要的。当条件对安全至关重要时,例如在做出安全决策或检测关键错误时,这可能会产生漏洞。

应对措施

阶段: 实现

始终使用显式块划分,并使用静态分析技术来实施此实践。

种属

关系 类型 ID 名称
属于 884 CWE Cross-section
属于 977 SFP Secondary Cluster: Design

继续阅读