CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

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

cwe - 843:访问的资源使用不兼容的类型(类型混淆)

弱点ID: 843
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品分配和初始化一个指针等资源,对象,或变量使用一个类型,但后来访问该资源使用与原始类型不兼容的类型。
+扩展描述

当产品访问资源使用不兼容的类型,这可能触发逻辑错误,因为资源没有预期的性能。语言没有记忆中安全,如C和c++类型混乱会导致禁止入内的内存访问。

虽然这弱点时经常与工会有关解析数据与许多不同的嵌入对象类型在C语言中,它可以出现在任何应用程序可以以多种方式解释相同的变量或内存位置。

这个弱点是C和c++不是独一无二的。例如,PHP应用程序中的错误可以通过提供触发数组参数预计当标量,反之亦然。语言如Perl,执行自动转换的一种类型的一个变量访问时,就好像它是另一种类型,也可以包含这些问题。

+替代条款
对象类型的困惑
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 704年 不正确类型转换或演员
PeerOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1287年 不当的验证指定的类型的输入
CanPrecede 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 119年 不当的操作限制的范围内一个内存缓冲区
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 136年 类型错误
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 704年 不正确类型转换或演员
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

C患病率(待定)

c++患病率(待定)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
可用性
完整性
保密

技术的影响:读记忆;修改内存;执行未经授权的代码或命令;DoS:崩溃,退出或重新启动

当访问内存缓冲区使用错误的类型,它可以读取或写入内存缓冲区的边界,如果分配缓冲区小于代码试图访问的类型,可能导致崩溃和代码的执行。
+示范例子

示例1

下面的代码使用了一个联盟支持的表示不同类型的消息。消息格式不同,这取决于他们的类型。

(坏的代码)
例如语言:C
#定义NAME_TYPE 1
#定义ID_TYPE 2

struct MessageBuffer
{
int msgType;
联盟{
char *名称;
int nameID;
};
};


int主要(int命令行参数个数,char * * argv) {
struct MessageBuffer缓冲区;
char * defaultMessage =“Hello World”;

缓冲区。msgType = NAME_TYPE;
buf.name = defaultMessage;
printf (" buf.name指针是% p \ n ", buf.name);
/ * nameID这个值是用来制造与体系结构无关的代码。如果来自不受信任的输入,它可以是任何值。* /

buf.nameID = (int) (defaultMessage + 1);
printf("指针buf.name现在% p \ n ", buf.name);
如果(缓冲区。msgType = = NAME_TYPE) {
printf(“信息:% s \ n”, buf.name);
}
其他{
printf(“信息:使用ID % d \ n”, buf.nameID);
}
}

代码作为NAME_TYPE打算处理该消息,并设置默认消息“Hello World”。However, since both buf.name and buf.nameID are part of the same union, they can act as aliases for the same memory location, depending on memory layout after compilation.

结果,修改buf.nameID int -可以有效地修改指针存储在buf.name -一个字符串。

执行程序可能产生的输出,如:

指针的名字是10830
指针的名字现在是10831
消息:嗨世界

注意buf.name的指针是如何改变,即使buf.name不是显式地修改。

在这种情况下,第一个“H”的消息被省略。然而,如果攻击者可以完全控制buf.nameID的价值,然后buf.name可以包含任意指针,导致界外的读或写。

示例2

下面的PHP代码接收一个值,增加5,输出之和。

(坏的代码)
例如语言:PHP
美元价值= $ _GET['价值');
美元金额= $值+ 5;
回声“价值参数是美元价值< p >”;
回声“美元金额”;

当使用以下查询字符串:

值= 123

程序计算总和和打印出:

金额是128

然而,攻击者可能会提供一个查询字符串,例如:

值[]= 123

“[]”数组语法导致美元价值被视为一个数组类型,然后生成一个致命错误在计算美元金额:

致命错误:在程序不支持的操作数类型。php在第2行

示例3

下面的Perl代码的目的是查找特权用户ID 0和3之间,通过执行一个访问UserPrivilegeArray美元的参考。预计只有userID 3是一个管理(因为这是列在第三个元素的数组)。

(坏的代码)
例如语言:Perl
我的$ UserPrivilegeArray =(“用户”、“用户”、“管理”、“用户”);

我的用户id =美元get_current_user_ID ();

如果($ UserPrivilegeArray eq“用户”){
打印“普通用户! \ n”;
}
其他{
打印“Admin ! \ n”;
}

打印”\ UserPrivilegeArray = UserPrivilegeArray美元\ n”;

在这种情况下,程序员打算使用“$ UserPrivilegeArray - > {$ userID}”访问数组中的合适位置。但由于下标被省略,“用户”字符串比较的标量表示美元UserPrivilegeArray参考,可能的形式“数组(0 x229e8)”或类似的。

因为逻辑也“不开放”(cwe - 636),这个bug的结果是,所有用户分配管理员权限。

虽然这是一个强制的示例,它演示了如何类型混乱能带来安全问题,即使在memory-safe语言。

+观察到的例子
参考 描述
在CSS序列类型混乱导致界外阅读。
大小不一致允许代码执行,第一次发现的时候积极利用在野外。
Improperly-parsed包含记录不同类型的文件会导致代码执行内存位置时要比解释为不同的对象。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1157年 SEI CERT C编码标准- 03指导方针。表达式(EXP)
+笔记

适用的平台

这个弱点是可能在任何type-unsafe编程语言。

研究的差距

类型混乱的缺点得到了一些关注,研究人员和主要软件供应商申请C和c++代码。一些公开报道的漏洞可能类型混乱根源的弱点,但这些可能被描述为“内存泄露”。

为其他语言,很少有公开报告类型的混淆的弱点。这些可能是超。由于许多项目直接或间接依赖宽松打字,一个潜在的“类型混乱”的行为可能是有意的,可能需要更多的人工分析。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
CERT C安全编码 EXP39-C 确切的 不通过指针访问一个变量的不兼容的类型
+引用
(ref - 811)马克·多德瑞安史密斯和大卫·杜威。“攻击互操作性”。“类型混乱漏洞,”59页。2009年。<http://www.azimuthsecurity.com/resources/bh2009_dowd_smith_dewey.pdf>。
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第七章,“类型混乱”,319页。1版。艾迪生卫斯理》2006。
+内容的历史
+提交
提交日期 提交者 组织
2011-05-15 CWE内容团队 主教法冠
+修改
修改日期 修饰符 组织
2012-05-11 CWE内容团队 主教法冠
更新的引用
2017-11-08 CWE内容团队 主教法冠
更新Applicable_Platforms Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新的关系
2019-06-20 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新的关系
2020-06-25 CWE内容团队 主教法冠
更新Common_Consequences、人际关系
2022-04-28 CWE内容团队 主教法冠
更新Research_Gaps
2023-01-31 CWE内容团队 主教法冠
更新描述
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日