cwe - 843:访问的资源使用不兼容的类型(类型混淆)
视图定制的信息:
当产品访问资源使用不兼容的类型,这可能触发逻辑错误,因为资源没有预期的性能。语言没有记忆中安全,如C和c++类型混乱会导致禁止入内的内存访问。 虽然这弱点时经常与工会有关解析数据与许多不同的嵌入对象类型在C语言中,它可以出现在任何应用程序可以以多种方式解释相同的变量或内存位置。 这个弱点是C和c++不是独一无二的。例如,PHP应用程序中的错误可以通过提供触发数组参数预计当标量,反之亦然。语言如Perl,执行自动转换的一种类型的一个变量访问时,就好像它是另一种类型,也可以包含这些问题。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例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语言。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
适用的平台 这个弱点是可能在任何type-unsafe编程语言。 研究的差距 类型混乱的缺点得到了一些关注,研究人员和主要软件供应商申请C和c++代码。一些公开报道的漏洞可能类型混乱根源的弱点,但这些可能被描述为“内存泄露”。 为其他语言,很少有公开报告类型的混淆的弱点。这些可能是超。由于许多项目直接或间接依赖宽松打字,一个潜在的“类型混乱”的行为可能是有意的,可能需要更多的人工分析。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |