CWE

常见的弱点枚举

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

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

cwe - 94:不当控制生成的代码(代码注入)

弱点ID: 94
抽象:基地
结构:简单的
视图定制的信息:
+描述
产品结构全部或部分的代码段使用externally-influenced输入从一个上游组件,但是它不中和或中和特殊的元素,可以修改错误的语法或行为的代码段。
+扩展描述

当一个产品允许用户输入包含代码的语法,有可能对攻击者工艺代码以这样一种方式,它将改变产品的预期控制流。这样的改变可能导致执行任意代码。

注入问题包含了各种各样的问题,减轻以非常不同的方式。出于这个原因,讨论这些弱点的最有效的方法是注意的不同特性进行分类注入的弱点。需要注意的最重要的问题是,注入所有的问题都有一个共同点,即。,他们允许注入控制平面数据到用户控制飞机。这意味着过程的执行可能被改变通过合法的数据通道发送代码,使用任何其他机制。虽然缓冲区溢出,和许多其他缺陷,包括获得执行进一步的使用问题,注入的问题只需要解析数据。最经典的实例化这个类别的软弱是SQL注入和格式字符串漏洞。

+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 913年 不当的控制代码动态地管理资源
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
ParentOf 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 95年 不当中和指令的动态评估代码(Eval注入)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 96年 不当中和静态保存指令的代码(静态代码注入)
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1336年 不当使用中和特殊元素在一个模板引擎
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 98年 不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关观点“软件开发”(cwe - 699)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 137年 数据中和问题
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 74年 不当中和下游组件使用的特殊元素的输出(注射)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

类:解释(有时流行)

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

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

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

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

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

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

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

技术的影响:隐藏活动

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

示例1

这个例子试图写用户消息到消息文件,允许用户查看它们。

(坏的代码)
例如语言:PHP
$ MessageFile =“messages.out”;
如果($ _GET[“行动”= =“NewMessage”) {
$ name = $ _GET [“name”);
美元消息= $ _GET(“信息”);
$处理= fopen (MessageFile美元," + ");
写入文件($处理,”< / b > < b > $ name说美元消息<人力资源> \ n”);
文件关闭($处理);
回声”消息得救了! < p > \ n”;
}
else if ($ _GET[“行动”= =“ViewMessages”) {
包括(MessageFile美元);
}

而程序员MessageFile只包括数据计划,攻击者可以提供信息,如:

(攻击代码)
name = h4x0r
消息= % 3 c ? php % 20系统(% 22 / bin / ls % 20-l % 22); ? % 3 e

将解码后:

(攻击代码)
< ?php系统(“/ bin / ls - l”); ? >

程序员认为他们只是包括常规数据文件的内容,但PHP解析和执行代码。现在,这段代码执行任何时候人消息的看法。

注意,XSS (cwe - 79在这种情况下)也是可能的。

示例2

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)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。

示例3

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

(坏的代码)
例如语言: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的数字:
=和+ num求和
打印(f”之和{数字}={和}")
除了ValueError:
print(“错误:无效输入”)
main ()

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

+观察到的例子
参考 描述
Python编译器使用eval()来执行恶意字符串作为Python代码。
链:正则表达式在EXIF处理器代码不正确确定字符串结束(cwe - 625),使eval注入(cwe - 95),利用每中钢协KEV在野外。
“代码注入”VPN产品,利用每中钢协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语句。
Perl代码直接从参数注入CGI库文件到另一个CGI程序。
直接支持模板文件的PHP代码注入。
直接注入代码的PHP脚本可以被攻击者访问。
PHP代码直接从用户代理HTTP头插入到日志文件作为PHP脚本实现。
+潜在的缓解措施

阶段:体系结构和设计

重构程序,这样你不需要动态生成的代码。

阶段:体系结构和设计

运行您的代码在一个“监狱”或类似沙箱环境,执行严格的流程和操作系统之间的边界。这可能有效地限制哪些代码可以执行你的产品。

例子包括Unix chroot监狱和AppArmor对。在一般情况下,托管代码可能会提供一些保护。

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,使用一个可接受的输入列表,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换为一些。

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

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

减少代码注入的可能性,使用严格的allowlists限制允许哪些构造。如果你是动态构建的代码调用一个函数,然后验证输入字母数字可能是不够的。攻击者可能仍然能够引用一个你不打算让危险的功能,如系统(),exec(),或退出()。

测试阶段:

使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。

测试阶段:

使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。

阶段:操作

策略:编译和构建硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。

阶段:操作

策略:环境硬化

运行代码的一个执行自动的环境污染传播,防止使用受污染的任何命令执行变量,比如Perl的“t”开关。这将迫使程序执行验证步骤,消除污染,尽管你必须小心正确验证您的输入,这样你就不会意外危险的输入标记为未染污的(见cwe - 183cwe - 184)。
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 752年 2009年前25 -资源管理风险
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 884年 CWE横截面
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 991年 SFP二级集群:污染环境的输入
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1387年 2022 CWE最危险软件的弱点的弱点
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 代码 评价和代码注入
+引用
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪3:直接相关的漏洞(XSS)。”Page 63. McGraw-Hill. 2010.
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Applicable_Platforms、关系、Research_Gaps Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新Common_Consequences Demonstrative_Examples,描述、Likelihood_of_Exploit名字,Potential_Mitigations、人际关系
2009-03-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2009-05-27 CWE内容团队 主教法冠
更新Demonstrative_Examples、名称
2010-02-16 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-06-21 CWE内容团队 主教法冠
更新描述,Potential_Mitigations
2011-03-29 CWE内容团队 主教法冠
更新后的名字
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Common_Consequences、Demonstrative_Examples Observed_Examples、引用关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新的关系
2014-07-30 CWE内容团队 主教法冠
更新的关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Demonstrative_Examples Modes_of_Introduction,关系
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、类型
2019-09-19 CWE内容团队 主教法冠
更新的关系
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Potential_Mitigations
2020-08-20 CWE内容团队 主教法冠
更新的关系
2021-03-15 CWE内容团队 主教法冠
更新Demonstrative_Examples
2021-07-20 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更新,描述、Potential_Mitigations关系
+以前的条目名称
改变日期 以前的条目名称
2009-01-12 代码注入
2009-05-27 未能控制生成的代码(又名“代码注入”)
2011-03-29 未能控制生成的代码(代码注入)
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日