CWE

普遍的弱点

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

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

CWE-690:未选中的返回值对NULL指针删除

弱点ID:690
抽象:化合物
结构:
查看自定义信息:
+描述
该产品在调用可以用空指针返回的函数后,如果该功能失败,则不会检查错误,从而导致结果null指针取消。
+链组件
自然 类型 ID 名称
以。。开始 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 252 未选中的返回值
其次是 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 476 空指针解除
+扩展描述
虽然未选中的回报价值弱点不限于零指针的回报(请参见CWE-252),函数通常返回null以指示错误状态。当未检查此错误条件时,可能会发生空指针解除。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 名称
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 476 空指针解除
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行 当应用程序包含用户控制的输入到malloc()调用时,就会发生这种弱点的典型发生。相关代码对于防止缓冲区的溢出可能是正确的,但是如果提供了较大的值,则由于内存不足,Malloc()将失败。当解析程序期望某些元素始终存在时,也经常发生这个问题。如果提供了畸形输入,解析器可能会返回null。例如,strtok()可以返回null。
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

C(不确定的患病率)

C ++(不确定的患病率)

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

技术影响:DOS:崩溃,退出或重新启动

正直
保密
可用性

技术影响:执行未经授权的代码或命令;阅读记忆;修改内存

在极少数情况下,当null等效于0x0内存地址,并且特权代码可以访问它,则可以写或读取内存,这可能导致代码执行。
+示例的例子

示例1

下面的代码调用了getUsername()函数,但在取消给出之前没有检查返回值(这可能会导致NullPoInterException)。

(不良代码)
示例语言:爪哇
字符串用户名= getUsername();
if(username.equals(admin_user)){
...
}

示例2

此示例从用户获取IP地址,验证其形成良好,然后查找主机名并将其复制到缓冲区中。

(不良代码)
示例语言:C
void host_lookup(char *user_supplied_addr){
struct hostent *hp;
in_addr_t *addr;
char主机名[64];
in_addr_t inet_addr(const char *cp);

/ *确保user_supplied_addr的例程以适当的格式用于转换 */

validate_addr_form(user_supplied_addr);
addr = inet_addr(user_supplied_addr);
hp = gethostbyaddr(addr,sizeof(struct in_addr),af_inet);
strcpy(主机名,hp-> h_name);
}

如果攻击者提供了一个似乎已良好的地址,但地址无法解答到主机名,则呼叫GethostbyAddr()将返回null。由于代码未从GethostbyAddr检查返回值(CWE-252),无效的指针解除(CWE-476)然后在呼叫strcpy()中发生。

请注意,此代码也容易受到缓冲区溢出(CWE-119)。

+观察到的例子
参考 描述
当Malloc失败时,大的内容长度值会导致无效指针解除。
当malloc失败时,大消息长度字段导致无效指针解除。
当输入缺失结肠分离器时,解析例程会遇到无效的解释。
当发生解析故障时,URI解析API将参数设置为null,例如,当推荐人标头丢失主机名时,导致null删除。
链:未选中的返回值可能导致无效删除
+检测方法

黑盒子

这通常发生在很少触发的误差条件下,从而减少了黑匣子测试期间检测的机会。

白盒

代码分析可能需要了解可能返回null的库函数的API行为知识,从而减少了使用未知库时的检测机会。
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 名称
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 851 Java的Cert Oracle安全编码标准(2011)第8章 - 特殊行为(ERR)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 876 CERT C ++安全编码第08部分 - 内存管理(MEM)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1157 SEI CERT C编码标准 - 指南03.表达式(EXP)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1181 SEI CERT PERL编码标准 - 指南03.表达式(EXP)
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
证书C安全编码 EXP34-C CWE更具体 不要放弃无效指针
Java(2011)的CERT ORACLE SECURE编码标准 err08-j 请勿捕获NullPoInterException或其任何祖先
SEI CERT PERL编码标准 EXP32-PL CWE更具体 不要忽略函数返回值
+内容历史记录
+提交
提交日期 提交者 组织
2008-04-11 CWE内容团队 MITER
+修改
修改日期 修饰符 组织
2008-07-01 Sean Eidemiller 雪茄
添加/更新的示例
2008-07-01 埃里克·达奇(Eric Dalci) 雪茄
更新的time_of_introduction
2008-09-08 CWE内容团队 MITER
更新已更新的适用_platforms,描述,detection_factors,关系,其他_notes
2009-12-28 CWE内容团队 MITER
更新了示范_examples
2010-09-27 CWE内容团队 MITER
更新了观察到的examples
2011-06-01 CWE内容团队 MITER
更新的common_conconquence,关系,分类_mappings
2011-09-13 CWE内容团队 MITER
更新的关系,分类_mappings
2014-06-23 CWE内容团队 MITER
更新的模e_of_introduction,其他_notes
2017-01-19 CWE内容团队 MITER
更新的关系
2017-11-08 CWE内容团队 MITER
更新的关系,相关的_properties,分类_mappings,time_of_introduction
2019-01-03 CWE内容团队 MITER
更新的关系,分类_mappings
2020-06-25 CWE内容团队 MITER
更新的common_cconsquences
2021-03-15 CWE内容团队 MITER
更新的示范_examples,关系
提供更多信息 - 请选择其他过滤器。
页面最后更新:2022年10月13日