描述
产品与多个逻辑表达式中包含一个条件语句的一个非起始表达式可能会产生副作用。这可能会导致一个意想不到的状态后的程序的执行条件,因为短路逻辑可能避免副作用的发生。
扩展描述
短路的使用评价,尽管C标准定义良好的,可能改变控制流的方式介绍了很难发现的逻辑错误,可能导致错误后产品的执行期间。如果攻击者可以发现这样一个矛盾,它有可能被利用来获得任意控制系统。
如果第一个条件的”或“声明被认为是真正的在正常情况下,如果第一个条件的”和“声明被认为是假的,那么任何后续条件可能包含自己的逻辑错误,代码评审或测试过程中检测到。
最后,使用短路评估可能会降低代码的可维护性。
的关系
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
保密 完整性 可用性
|
广泛多样的后果是可能的如果攻击者是意识到一个意想不到的国家有条件后的产品。它可能导致暴露信息,系统崩溃,甚至完整的攻击者的控制系统。 |
|
利用的可能性
示范例子
示例1
以下函数试图从用户价值大小,分配一个数组的大小(我们忽略边界检查为简单起见)。函数试图每个现货指数的值初始化,也就是说,一个[len-1] = len - 1;[len-2] = len - 2;…[1]= 1;[0]= 0;然而,由于程序员使用前缀减运算符,当条件评估我= = 1,衰减会导致0值谓词的第一部分,通过短路导致第二部分绕过评估。这意味着我们无法确定的值将在[0]当我们向用户返回数组。
#定义PRIV_ADMIN 0 #定义PRIV_REGULAR 1 typedef struct {
int特权; int id; }user_t; user_t * Add_Regular_Users (int num_users) {
user_t *用户= (user_t *) calloc (num_users sizeof (user_t)); int i = num_users; 虽然(我& &(用户[我]。特权= PRIV_REGULAR)) {
用户[我]。id =我; } 返回用户; } int main () {
user_t *测试; int我; 测试= Add_Regular_Users (25); (我= 0;我< 25;我+ +)printf(“用户% d特权水平% d \ n”,测试[我]。id、测试[我].privileges); }
编译和运行时,上面的代码将输出一个特权级别1,或为每个用户PRIV_REGULAR但用户id为0的if语句中使用的前缀增量运算符将达到零,短路前设置第0个用户的权限级别。因为我们使用calloc,这种特权将被设置为0,或者PRIV_ADMIN。
潜在的缓解措施
实施阶段:
最小化的条件语句的数量产生的副作用将有助于防止短路的可能性评估以一种意想不到的方式来改变控制流。 |
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
未能保护存储的数据修改 |
软件故障模式 |
SFP1只能 |
|
在计算故障 |
|