cwe - 74:不当中和下游组件使用的特殊元素的输出(注射)
 描述
产品结构的全部或部分命令,数据结构,或记录使用externally-influenced输入从一个上游组件,但是它不中和或错误中和特殊元素,可以修改它是如何解析或解释当它发送到下游组件。
 扩展描述
软件或其他自动化逻辑有一定的假设分别什么是数据和控制。它是缺乏验证这些假设的用户控制输入导致注入问题。注入问题包含了各种各样的问题,减轻以非常不同的方式,通常试图为了改变过程的控制流。出于这个原因,讨论这些弱点的最有效的方法是注意截然不同的特性,其分类为注入的弱点。需要注意的最重要的问题是,注入所有的问题都有一个共同点,即。,他们允许注入控制平面数据到用户控制飞机。这意味着过程的执行可能被改变通过合法的数据通道发送代码,使用任何其他机制。虽然缓冲区溢出,和许多其他缺陷,包括获得执行进一步的使用问题,注入的问题只需要解析数据。
 的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
支柱——一个弱点是最抽象类型的弱点和代表一个主题类/基地/变体相关弱点。支柱是不同于一个类别作为支柱技术上仍然是一种弱点,描述了一个错误,而一个类别代表一个共同特征用于组相关的东西。 |
707年 |
不适当的中和 |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
75年 |
未能清洁特殊元素转换为不同的平面(特殊元素注入) |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
77年 |
不当中和一个命令中使用的特殊元素(“命令注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
79年 |
中和不当输入在Web页面生成(“跨站点脚本编制”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
91年 |
XML注入(又名XPath盲注) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
93年 |
中和不当CRLF序列(CRLF注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
94年 |
不当控制生成的代码(代码注入) |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
99年 |
不恰当的控制资源标识符(“资源注入”) |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
943年 |
不当中和特殊元素的数据查询逻辑 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1236年 |
不当中和公式元素的CSV文件 |
光束 |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
20. |
不正确的输入验证 |
光束 |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
116年 |
不当的编码或逃避的输出 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ParentOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
77年 |
不当中和一个命令中使用的特殊元素(“命令注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
78年 |
不当使用中和特殊元素在一个操作系统命令(OS命令注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
79年 |
中和不当输入在Web页面生成(“跨站点脚本编制”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
88年 |
不当中和一个命令的参数分隔符(“参数注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
89年 |
不当使用中和特殊元素在一个SQL命令(SQL注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
91年 |
XML注入(又名XPath盲注) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
94年 |
不当控制生成的代码(代码注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
917年 |
不当中和一个表达式语言语句中使用的特殊元素(表达式语言注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1236年 |
不当中和公式元素的CSV文件 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关视图”架构概念”(cwe - 1008)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1019年 |
验证输入 |
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
|
实现 |
实现:造成这一弱点在建筑安全策略的实施。 |
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
保密
|
注入攻击涉及许多方面的重要信息的披露,数据敏感性和有效性进一步剥削。 |
|
访问控制
|
在某些情况下,注射代码控制认证;这可能会导致远程漏洞。 |
|
其他
|
注入攻击的特点是能够显著改变给定的流动过程,在某些情况下,执行任意代码。 |
|
完整性 其他
|
数据注入攻击导致的损失数据完整性在几乎所有情况下的控制平面数据注入总是附带数据召回或写作。 |
|
不可抵赖性
|
经常unlogged注入控制代码执行的操作。 |
|
 利用的可能性
 示范例子
示例1
这个示例代码将把用户的名字和列表,用户的主目录的内容。它受到第一个变种的OS命令注入。
$ userName = $ _POST(“用户”); $命令= ' ls - l /home/ '。美元的用户名; 系统($命令);
$ userName变量不是检查恶意输入。攻击者可以将$ userName变量设置为任意操作系统命令,如:
这将导致美元的命令是:
因为分号在Unix命令分隔符,操作系统将首先执行ls命令,然后rm命令,删除整个文件系统。
还注意到,这个示例代码是容易受到路径遍历(CWE-22)和不受信任的搜索路径(cwe - 426)的攻击。
示例2
考虑以下项目。它打算执行“ls - l”输入文件名。validate_name()子例程执行验证的输入以确保只允许字母数字和“-”字符,这避免了路径遍历(CWE-22)和操作系统命令注入(cwe - 78)的弱点。只有文件名“abc”或“d-e-f”旨在允许。
我的$ arg = GetArgument(“文件名”); do_listing (arg);
子do_listing {
我的(帧)= @ _; 如果(!validate_name(帧)美元){
打印”错误:名称格式不正确! \ n”; 返回;
}
#构建命令
我的$ cmd =“美元/ bin / ls - l帧”; 系统(cmd);
}
子validate_name {
我(名字)美元= @ _; 如果($ name = ~ / ^ \ w \[-] + /美元){
返回(1);
} 其他{
返回(0);
}
}
然而,validate_name()在船底文件名,用“-”开始。敌人可以供应一个文件名“基于“增大化现实”技术”,产生“ls - l ar”命令(cwe - 88),从而得到一个完整的清单整个递归目录及其所有子目录的。
有几个可能的缓解措施的弱点。一是重构代码完全避免使用系统(),而不是依赖内部函数。
另一个选择可能是添加一个”——“参数ls命令,如“ls - l——”,所以,任何剩余的参数作为文件名,导致任何领先的“-”被视为一个文件名的一部分而不是另一个选择。
另一个修复可能是改变正则表达式中使用validate_name迫使文件名的第一个字符是字母或数字,如:
如果($ name = ~ / ^ \ w (\ w \] +美元/)……
 观察到的例子
参考 |
描述 |
|
面向依赖管理工具可以避免OS命令注入在生成Git命令但是允许注入可选参数和输入从少量开始,可能允许代码执行。 |
|
规范的操作系统命令的例子注入。CGI程序并不中和“|”元字符当调用一个电话本程序。 |
|
注入sed脚本语法(sed注入) |
|
|
|
产品并不中和$ {xyz}风格表达式,允许远程代码执行。(log4shell漏洞) |
 潜在的缓解措施
阶段:需求
编程语言和支持技术可能会选择不受这些问题。 |
实施阶段:
利用一个适当的混合allowlist和denylist解析从所有输入过滤器控制平面的语法。 |
 弱点Ordinalities
Ordinality |
描述 |
主 |
(其他弱点的弱点存在独立的) |
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
 笔记
理论
许多人只注射治疗作为输入验证问题( CWE-20),因为很多人并不区分结果/攻击(注射)和阻止攻击成功的保护机制。然而,输入验证只是一个潜在的保护机制(输出编码是另一个),还有一个链接关系不当的执法不当输入验证和其他组件的消息结构。其他问题没有直接关系输入验证,如竞争条件,同样可以在消息结构的影响。
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
扣 |
|
|
注入问题(“数据”用作别的) |
OWASP十大2004 |
A6 |
CWE更具体 |
注塑缺陷 |
软件故障模式 |
SFP24 |
|
污染输入命令 |
 引用
|