CWE

常见的弱点枚举

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

新CWE吗?点击这里!
CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.12)
ID

cwe - 95:不当中和指令的动态评估代码(Eval注入)

弱点ID: 95
抽象:变体
结构:简单的
视图定制的信息:
的用户感兴趣的更多的概念方面的一个弱点。例如:教育者,技术作家和项目/项目经理。 用户关心的实际应用和细节的本质弱点以及如何预防它的发生。例子:工具开发人员、安全人员、pen-testers事件反应分析师。 对于用户映射一个问题CWE / CAPEC id,即。,finding the most appropriate CWE for a specific issue (e.g., a CVE record). Example: tool developers, security researchers. 用户希望看到所有可用的信息CWE / CAPEC条目。 为用户谁想要定制显示细节。
×

编辑自定义过滤器


+描述
产品从一个上游组件接收输入,但它不会消除或中和代码语法错误使用前输入在一个动态的评价(如打电话。“eval”)。
+扩展描述
这可能允许攻击者执行任意代码,或者至少修改什么代码可以执行。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 94年 不当控制生成的代码(代码注入)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现 实现:造成这一弱点在建筑安全策略的实施。
实现 这在处理程序的缺点是普遍/调度程序可能需要调用大量的功能,或设置大量的变量。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

Java患病率(待定)

JavaScript患病率(待定)

Python患病率(待定)

Perl患病率(待定)

PHP患病率(待定)

Ruby患病率(待定)

类:解释患病率(待定)

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

技术的影响:阅读文件或目录;读取应用程序数据

注入的代码可以访问受限制的数据/文件。
访问控制

技术的影响:旁路保护机制

在某些情况下,注射代码控制认证;这可能会导致远程漏洞。
访问控制

技术的影响:获得特权或假设的身份

注入的代码可以访问资源,攻击者直接禁止访问。
完整性
保密
可用性
其他

技术的影响:执行未经授权的代码或命令

代码注入攻击可能导致的损失数据完整性在几乎所有情况下的控制平面数据注入总是附带数据召回或写作。此外,代码注入往往导致执行任意代码。
不可抵赖性

技术的影响:隐藏活动

经常unlogged注入控制代码执行的操作。
+利用的可能性
媒介
+示范例子

示例1

edit-config。pl:这CGI脚本用于修改配置文件中的设置。

(坏的代码)
例如语言:Perl
使用CGI qw(:标准);

子config_file_add_key {
我的(关键帧,美元,美元arg) = @ _;
#代码添加一个字段/文件的关键就在这里
}

子config_file_set_key {
我的(关键帧,美元,美元arg) = @ _;
#代码设置特定文件的关键就在这里
}

子config_file_delete_key {
我的(关键帧,美元,美元arg) = @ _;
#代码从一个特定的文件删除键就在这里
}

子handleConfigAction {
我的(帧,行动美元)= @ _;
我美元关键=参数(关键);
我$ val =参数(“val”);
#这是高效的代码,特别是如果你必须调用
#任何几十种不同的功能之一!

我的代码=美元”config_file_ action_key美元(美元\帧美元\键,美元\ val);”;
美元eval(代码);
}

$ configfile =“/ home / cwe / config.txt”;
打印头;
如果(定义(参数('行动'))){
handleConfigAction (configfile美元,参数('行动'));
}
其他{
打印”指定的任何行动! \ n”;
}

脚本打算采取行动的参数和调用多种功能的基于该参数的值——config_file_add_key (), config_file_set_key(),或config_file_delete_key ()。它可以单独设置一个条件来调用每个函数,但eval()是一个强大的方法使用更少的代码做同样的事情,尤其是当涉及大量的函数或变量。不幸的是,在这种情况下,攻击者可以提供其他值在操作参数,如:

(攻击代码)
中(“,”、“);系统(“/ bin / ls”);

这将产生以下字符串handleConfigAction ():

(结果)
config_file_add_key (”、“,”);系统(“/ bin / ls”);

可以添加任意Perl代码后,攻击者已经“关闭”建设的原始的函数调用,为了防止解析错误造成恶意eval()失败之前攻击者的有效载荷被激活。这个特定的操作系统()调用会失败后,因为“_key(\ $帧\键,美元\ $ val)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。

示例2

这个简单的脚本要求用户提供一个数字列表作为输入,并将它们添加在一起。

(坏的代码)
例如语言:Python
def main ():
和= 0
数量= eval(输入("输入一个空格分隔的数字列表:"))
num的数字:
=和+ num求和
打印(f”之和{数字}={和}")
main ()

eval()函数可以将用户提供的列表,并将它转换成一个Python列表对象,因此允许程序员使用列表理解方法来处理数据。但是,如果代码提供给eval()函数,它将执行代码。例如,恶意用户可以提供以下字符串:

(攻击代码)
__import__(“子流程”)。getoutput (rm - r *)

这将删除当前目录中的所有文件。由于这个原因,不建议使用eval()不可信的输入。

来完成这个不使用eval()是应用整数转换输入在一个try /除了块。如果用户提供的输入不是数字,这将提高ValueError。通过避免eval(),没有机会执行输入字符串的代码。

(好的代码)
例如语言:Python
def main ():
和= 0
数量=输入(输入一个空格分隔的数字列表:)。分割(" ")
试一试:
num的数字:
和=和+ int (num)
打印(f”之和{数字}={和}")
除了ValueError:
print(“错误:无效输入”)
main ()

另一种选择是使用ast.literal_eval()函数从Python的ast模块。这个函数只考虑Python文字作为有效数据类型和不会执行任何代码中包含用户输入。

+观察到的例子
参考 描述
Python编译器使用eval()来执行恶意字符串作为Python代码。
链:正则表达式在EXIF处理器代码不正确确定字符串结束(cwe - 625),使eval注入(cwe - 95),利用每中钢协KEV在野外。
链:反斜杠,后跟一个换行符可以绕过验证步骤(CWE-20),导致eval注入(cwe - 95),利用每中钢协KEV在野外。
Eval注入在PHP程序。
Eval注入在Perl程序。
Eval注入在Perl程序使用一个ID应该只包含连字符和数字。
直接代码注入Perl eval函数。
Eval注入在Perl程序。
直接代码注入Perl eval函数。
直接代码注入Perl eval函数。
MFV。使用嵌套代码注入到PHP eval语句结构不能嵌套。
MFV。使用嵌套代码注入到PHP eval语句结构不能嵌套。
Python代码注入eval语句从一个字段格式的文件。
Eval注入在Python程序。
链:合成eval注入。无效的值可以防止初始化的变量,它可以被攻击者修改后来注入PHP eval语句。
链:执行重定向后触发eval注入。
+潜在的缓解措施

阶段:体系结构和设计;实现

如果可能的话,重构你的代码,所以它不需要使用eval ()。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does.

当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。

不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。

实施阶段:

输入应该解码和规范化应用程序当前的内部表示之前验证(cwe - 180,cwe - 181)。确保您的应用程序不会无意中解码输入两次相同(cwe - 174)。这些错误可以用来绕过allowlist方案通过引入危险的输入后检查。使用库如OWASP ESAPI规范化控制。

考虑执行重复的规范化,直到输入不会改变。这将避免double-decoding和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。

+弱点Ordinalities
Ordinality 描述
(其他弱点的弱点存在独立的)
+检测方法

自动静态分析

自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 714年 OWASP 2007年十大类别A3 -恶意文件执行
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 727年 OWASP十大2004类别A6 -注塑缺陷
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 990年 SFP二级集群:污染输入命令
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1179年 01 SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS)
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1409年 综合分类:注射
+脆弱性映射笔记

用法:允许

(CWE ID可以用来映射到现实世界的漏洞)

原因:可接受的使用

理由是:

这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。

评论:

仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。
+笔记

其他

因素:特殊字符错误可以扮演一个角色在增加各种各样的代码,可以注射,虽然有些漏洞不需要特殊字符,例如,当一个函数没有参数可以引用一个终结者的角色并不是必要的。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 直接动态代码评估(Eval注入)
OWASP十大2007 A3 CWE更具体 恶意文件执行
OWASP十大2004 A6 CWE更具体 注塑缺陷
软件故障模式 SFP24 污染输入命令
SEI CERT Perl编码标准 IDS35-PL 确切的 不调用eval形式字符串参数
+引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第18章,“在线评估”,1095页。1版。艾迪生卫斯理》2006。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19
(CWE草案3,2006-07-19)
千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-08-15 Veracode
建议OWASP 2004年排名前十的映射
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms、描述Modes_of_Introduction、关系、Other_Notes, Taxonomy_Mappings Weakness_Ordinalities
2009-01-12 CWE内容团队 主教法冠
更新描述、Observed_Examples Other_Notes Research_Gaps
2009-05-27 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Demonstrative_Examples、描述、名称、引用
2010-02-16 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-06-21 CWE内容团队 主教法冠
更新描述、名称
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新Observed_Examples
2014-07-30 CWE内容团队 主教法冠
更新的关系,Taxonomy_Mappings
2017-11-08 CWE内容团队 主教法冠
更新Causal_Nature Modes_of_Introduction、引用关系,Taxonomy_Mappings
2019-01-03 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2019-06-20 CWE内容团队 主教法冠
更新的类型
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Potential_Mitigations
2021-03-15 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新Research_Gaps
2022-06-28 CWE内容团队 主教法冠
更新Observed_Examples
2022-10-13 CWE内容团队 主教法冠
更新Observed_Examples
2023-01-31 CWE内容团队 主教法冠
更新Demonstrative_Examples、描述
2023-04-27 CWE内容团队 主教法冠
更新Demonstrative_Examples Detection_Factors,关系,Time_of_Introduction
2023-06-29 CWE内容团队 主教法冠
更新Mapping_Notes
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 直接动态代码评估(Eval注入)
2009-05-27 在代码动态地评估不足的控制指令(又名“Eval注入”)
2010-06-21 不适当的卫生处理指令的动态评估代码(Eval注入)
页面最后更新:2023年6月29日