CWE

常见的弱点

社区开发的软件和硬件弱点类型列表

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

CWE-467:在指针类型上使用sizeof()

弱点ID:467
抽象:变体
结构:简单的
查看自定义信息:
+描述
该代码在杂乱的指针类型上调用sizeof(),该指针类型始终返回单词size/8。如果程序员打算确定分配了多少内存,这可能会产生意外的结果。
+扩展描述
在指针上使用sizeof()有时会生成有用的信息。一个明显的情况是在平台上找出单词大小。通常,大小(指针)的出现表明一个错误。
+关系
部分帮助该表显示了与这种弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 姓名
Childof 支柱支柱 - 弱点是最抽象的弱点类型,代表了与之相关的所有类别/基础/变体弱点的主题。从技术上讲,支柱与类别不同,因为在技术上仍然是一种描述错误的弱点,而类别代表用于分组相关事物的常见特征。 682 错误的计算
canpreceede 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 131 缓冲尺寸的计算不正确
部分帮助该表显示了与这种弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 465 指针问题
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+适用的平台
部分帮助该清单显示可能出现给定弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

C(不确定的患病率)

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

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

技术影响:修改内存;阅读记忆

此错误通常会导致一个人分配一个比需要的缓冲区要小得多,从而导致导致的弱点,例如缓冲区溢出。
+利用的可能性
高的
+示例

示例1

应注意确保大小返回数据结构本身的大小,而不是指向数据结构的指针的大小。

在此示例中,sizeof(foo)返回指针的大小。

(不良代码)
示例语言:C
double *foo;
...
foo =(double *)malloc(sizeof(foo));

在此示例中,sizeof(*foo)返回数据结构的大小,而不是指针的大小。

(好代码)
示例语言:C
double *foo;
...
foo =(double *)malloc(sizeof( *foo));

示例2

此示例定义了固定的用户名和密码。AuthenticateUser()函数旨在接受不受信任的用户的用户名和密码,并检查以确保其与用户名和密码匹配。如果用户名和密码匹配,则AuthenticateUser()旨在表明身份验证成功。

(不良代码)

/* 忽略CWE-259(硬编码密码)和CWE-309(使用密码系统进行身份验证)在此示例中。*/

char *用户名=“ admin”;
char *pass =“密码”;

int authenticateuser(char *inuser,char *in pass){
printf(“ sizeof用户名=%d \ n”,sizeof(用户名));
printf(“ sizeof pass =%d \ n”,sizeof(pass));

if(strncmp(用户名,inuser,sizeof(用户名))){
printf(“使用sizeof \ n的用户名的身份失败”);
返回(auth_fail);
}
/* 因为CWE-467,大小在许多平台和架构上返回4个。*/

如果(!strncmp(Pass,intass,sizeof(pass))){
printf(“使用sizeof \ n的auth成功密码”);
返回(auth_success);
}
别的 {
printf(“使用sizeof \ n的auth失败密码”);
返回(auth_fail);
}
}

int main(int argc,char ** argv)
{
int authresult;

if(argc <3){
ExitError(“用法:提供用户名和密码”);
}
authResult = authenticateUser(argv [1],argv [2]);
如果(authresult!= auth_success){
ExitError(“身份验证失败”);
}
别的 {
doAuthenticatedTask(argv [1]);
}
}

在AuthenTicateUser()中,因为SizeOf()应用于具有数组类型的参数,因此SizeOf()调用可能在许多现代体系结构上返回4。结果,strncmp()调用仅检查输入密码的前四个字符,从而进行部分比较(CWE-187),导致身份验证不当(CWE-287)。

由于部分比较,这些密码中的任何一个仍将导致“ admin”用户成功的身份验证:

(攻击代码)
Pass5
Passabcdefgh
密码

因为只检查了4个字符,所以这大大减少了攻击者的搜索空间,使蛮力攻击更可行。

同样的问题也适用于用户名,因此“ AdminXyz”和“ Administrator”之类的值将为用户名取得成功。

+潜在的缓解

阶段:实施

使用诸如“ sizeof(*指针)”之类的表达式,而不是“ sizeof(指针)”,除非您打算在指针类型上运行sizeof()以获得某些平台独立性或在堆栈上分配变量。
+弱点
条例 描述
基本的
(在弱点存在的地方独立于其他弱点)
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将这种弱点作为成员。这些信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 姓名
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 737 证书C安全编码标准(2008)第4章 - 表达式(EXP)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 740 证书C安全编码标准(2008)第7章 - 阵列(ARR)
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 874 CERT C ++安全编码第06节 - 数组和STL(ARR)
成员 看法查看 - CWE条目的子集,提供了一种检查CWE内容的方法。两个主视图结构是切片(平面列表)和图(包含条目之间的关系)。 884 CWE横截面
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 974 SFP辅助群集:不正确的缓冲区长度计算
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1162 SEI CERT C编码标准 - 指南08.内存管理(MEM)
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
扣子 在指针类型上使用sizeof()
证书C安全编码 ARR01-C 摄入数组的大小时,请勿将尺寸运算符应用于指针
证书C安全编码 MEM35-C CWE更抽象 为对象分配足够的内存
软件故障模式 SFP10 不正确的缓冲区长度计算
+参考
[Ref-18] Secure Software,Inc.。“ CLASP应用程序安全过程”。2005年。<https://cwe.mitre.org/documents/sources/theclaspapplicationsecurityprocess.pdf>。
+内容历史记录
+提交
提交日期 提交者 组织
2006-07-19 扣子
+修改
修改日期 修饰符 组织
2008-07-01 埃里克·达奇(Eric Dalci) 雪茄
更新时间_OF_INTRODUCTION
2008-08-01 KDM分析
添加/更新的白色框定义
2008-09-08 CWE内容团队 MITER
更新已更新的适用_platforms,common_consequences,关系,其他_notes,分类_mappings,feebness_ordinalities
2008-11-24 CWE内容团队 MITER
更新的关系,分类_mappings
2009-03-10 CWE内容团队 MITER
更新了示范_examples
2009-12-28 CWE内容团队 MITER
更新了示范_examples
2010-02-16 CWE内容团队 MITER
更新的关系
2011-06-01 CWE内容团队 MITER
更新的common_cconsquences
2011-06-27 CWE内容团队 MITER
更新的common_cconsquences
2011-09-13 CWE内容团队 MITER
更新的关系,分类_mappings
2012-05-11 CWE内容团队 MITER
更新的关系
2014-06-23 CWE内容团队 MITER
更新的描述,其他_notes
2014-07-30 CWE内容团队 MITER
更新的关系,分类_mappings
2017-11-08 CWE内容团队 MITER
更新了示范示例,分类_mappings,white_box_definitions
2019-01-03 CWE内容团队 MITER
更新的关系
2020-02-24 CWE内容团队 MITER
更新的引用
提供更多信息 - 请选择其他过滤器。
页面最后更新:2023年1月31日