cwe - 77:不当中和一个命令中使用的特殊元素(“命令注入”)
 描述
产品结构的全部或部分命令使用externally-influenced输入从一个上游组件,但这并不中和或错误地中和特殊元素时可以修改预定的命令发送到下游组件。
 扩展描述
命令注入漏洞通常发生在:
1。数据进入应用程序从一个不可信的来源。
2。数据是一个字符串的一部分,作为应用程序命令的执行。
3所示。通过执行命令,应用程序为攻击者提供了特权或能力,否则攻击者不会有。
许多协议和产品有自己的自定义命令语言。虽然OS或shell命令字符串经常发现和有针对性,开发人员可能没有意识到,这些其他命令语言也可能容易受到攻击。
包装程序命令注入是一种常见的问题。
 的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
74年 |
不当中和下游组件使用的特殊元素的输出(注射) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
78年 |
不当使用中和特殊元素在一个操作系统命令(OS命令注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
88年 |
不当中和一个命令的参数分隔符(“参数注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
624年 |
可执行正则表达式错误 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
917年 |
不当中和一个表达式语言语句中使用的特殊元素(表达式语言注入) |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
74年 |
不当中和下游组件使用的特殊元素的输出(注射) |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关视图”架构概念”(cwe - 1008)
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1019年 |
验证输入 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 |
类型 |
ID |
的名字 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
78年 |
不当使用中和特殊元素在一个操作系统命令(OS命令注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
88年 |
不当中和一个命令的参数分隔符(“参数注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
624年 |
可执行正则表达式错误 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
917年 |
不当中和一个表达式语言语句中使用的特殊元素(表达式语言注入) |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
 相关的视图”方案及数据保护措施”(cwe - 1340)
自然 |
类型 |
ID |
的名字 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
78年 |
不当使用中和特殊元素在一个操作系统命令(OS命令注入) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
88年 |
不当中和一个命令的参数分隔符(“参数注入”) |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
624年 |
可执行正则表达式错误 |
ParentOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
917年 |
不当中和一个表达式语言语句中使用的特殊元素(表达式语言注入) |
 模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 |
请注意 |
架构和设计 |
|
实现 |
实现:造成这一弱点在建筑安全策略的实施。 |
 常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性 保密 可用性
|
如果恶意用户注入一个字符(比如分号)划入一个命令的结束和另一个的开始,它可能会插入一个全新的和无关的命令并不是为了被执行。 |
|
 利用的可能性
 示范例子
示例1
以下简单的程序接受文件名作为命令行参数并显示文件的内容给用户。程序安装setuid root,因为它的目的是作为一个学习工具,允许系统管理员培训检查特权系统文件没有给他们修改他们的能力或破坏系统。
int主要(int命令行参数个数,char * * argv) {
char cmd [CMD_MAX] = " / usr / bin /猫”; strcat (cmd, argv [1]); 系统(cmd); }
因为根特权的程序运行,调用系统()也使用root特权执行。如果用户指定了一个标准的文件名,调用是否按预期运行。然而,如果攻击者通过一个字符串的形式”;rm射频/”,然后调用系统()失败执行猫由于缺乏论据,然后犁递归删除根分区的内容。
注意,如果argv[1]是一个很长的参数,那么这个问题可能还受到缓冲区溢出(cwe - 120)。
示例2
下面的代码是一个管理web应用程序允许用户启动一个Oracle数据库的备份使用批处理文件包装rman实用程序,然后运行清理。蝙蝠脚本删除一些临时文件。脚本rmanDB。蝙蝠接受一个命令行参数,它指定什么类型的备份执行。因为限制访问数据库,应用程序运行备份作为特权用户。
… 字符串btype = request.getParameter (“backuptype”); 字符串cmd =新的字符串(“cmd。exe / K \”
c: \ \ util \ \ rmanDB。蝙蝠” + btype + “c: \ \你\ \ cleanup.bat \“”)
System.Runtime.getRuntime () .exec (cmd); …
这里的问题是,这个项目不做任何验证backuptype参数读取用户。通常Runtime.exec()函数不会执行多个命令,但在这种情况下,程序第一次运行cmd。exe壳为了运行多个命令用一个叫Runtime.exec ()。一旦调用shell,它将愉快地执行多个指令通过两个&号分开。如果攻击者通过一个字符串的形式”& del c: \ \ dbms \ \ *。*”,则应用程序将执行这个命令以及其他指定的项目。因为应用程序的性质,它运行所必需的特权与数据库交互,这意味着攻击者将会运行任何命令与特权。
示例3
下面的代码从系统实用程序使用系统属性APPHOME确定安装的目录,然后执行一个初始化脚本基于指定的目录的相对路径。
… 字符串回家= System.getProperty (“APPHOME”); 字符串cmd = + INITCMD回家; java.lang.Runtime.getRuntime () .exec (cmd); …
上面的代码允许攻击者执行任意命令的高架特权应用程序通过修改系统属性APPHOME指向一个包含恶意INITCMD版本不同的道路。因为程序不验证值读取环境,如果攻击者可以控制APPHOME系统属性的值,然后他们可以愚弄应用程序运行恶意代码和系统的控制。
示例4
下面的代码是一个包装的UNIX命令猫将文件的内容打印到标准输出。这也是注射:
# include < stdio . h > # include < unistd.h >
int主要(int命令行参数个数,char * * argv) {
猫char[] = "猫"; char *命令; size_t commandLength;
commandLength = strlen (cat) + strlen (argv [1]) + 1; 命令= (char *) malloc (commandLength); strncpy(指挥、猫、commandLength); strncat(命令、argv [1] (commandLength - strlen (cat)));
系统(命令); 返回(0);
}
正常使用,输出就是文件的内容要求:
然而,如果我们添加一个分号,这条线的结束另一个命令,该命令执行catWrapper没有抱怨:
美元。/ catWrapper Story.txt;ls 当我们离开我们的英雄…… Story.txt SensitiveFile.txt PrivateData.db a.o ut *
如果catWrapper设置高特权级别比标准的用户,可以执行任意命令与更高的特权。
 观察到的例子
参考 |
描述 |
|
面向依赖管理工具可以避免OS命令注入在生成Git命令但是允许注入可选参数和输入从少量开始,可能允许代码执行。 |
|
规范的操作系统命令的例子注入。CGI程序并不中和“|”元字符当调用一个电话本程序。 |
|
|
|
注入sed脚本语法(sed注入) |
|
注入sed脚本语法(sed注入) |
|
注入sed脚本语法(sed注入) |
|
图像程序允许注入的命令在“魔法矢量图形(MVG)”的语言。 |
|
反垃圾邮件产品允许注入SNMP命令到confiuration文件中 |
 潜在的缓解措施
阶段:体系结构和设计
如果可能的话,使用库调用而不是外部流程重建所需的功能。 |
实施阶段:
如果可能的话,确保所有外部命令从程序静态创建。 |
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,使用一个可接受的输入列表,严格遵守规范。拒绝任何不严格符合规范的输入,或将其转换为一些。
当执行输入验证,考虑所有可能相关的属性,包括长度,类型的输入,可接受的值的全系列,缺失或额外的输入,语法,一致性相关领域,符合业务规则。作为业务规则逻辑的一个例子,在语法上“船”可能是有效的,因为它只包含字母数字字符,但它不是有效的如果输入预计仅包含颜色,如“红”或“蓝色”。
不完全依赖寻找恶意或畸形的输入。这很可能错过至少有一个不受欢迎的输入,特别是如果代码的环境变化。这可以让攻击者有足够的空间绕过验证。然而,denylists可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
|
阶段:操作
运行时间:运行时可以使用策略实施allowlist方式以防止任何non-sanctioned命令的使用。 |
阶段:系统配置
分配权限,阻止用户访问/开放特权文件。 |
 弱点Ordinalities
Ordinality |
描述 |
主 |
(其他弱点的弱点存在独立的) |
 会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
713年 |
OWASP十大2007类别A2 -注塑缺陷 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
722年 |
OWASP十大2004类别A1 -用户输入 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
727年 |
OWASP十大2004类别A6 -注塑缺陷 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
929年 |
OWASP十大2013类别A1 -注射 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
990年 |
SFP二级集群:污染输入命令 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1005年 |
7 pk -输入验证和代表性 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1027年 |
OWASP十大2017类别A1 -注射 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1179年 |
01 SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1308年 |
方案及质量措施,安全 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1337年 |
2021 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1340年 |
方案及数据保护措施 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1347年 |
OWASP十大2021类别A03:2021 -注射 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1387年 |
2022 CWE最危险软件的弱点的弱点 |
 笔记
术语
“命令注入”词对不同的人有着不同的意义。对一些人来说,它指的是任何类型的攻击,可以允许攻击者执行命令自己的选择,无论如何插入这些命令。因此命令注入可以合成从另一个弱点。这种用法还包括病例的功能允许用户指定一个完整的命令,然后执行;CWE之内,这种情况可能是更好的被视为授权问题(因为攻击者不能指定任意命令。)
另一个常见的用法,包括cwe - 77及其后裔,包括分隔符注入情况下,攻击者的命令被构造。
 分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
7有害的王国 |
|
|
命令注入 |
扣 |
|
|
命令注入 |
OWASP十大2007 |
A2 |
CWE更具体 |
注塑缺陷 |
OWASP十大2004 |
A1 |
CWE更具体 |
用户输入 |
OWASP十大2004 |
A6 |
CWE更具体 |
注塑缺陷 |
软件故障模式 |
SFP24 |
|
污染输入命令 |
SEI CERT Perl编码标准 |
IDS34-PL |
CWE更具体 |
不通过不可信,unsanitized数据命令解释器 |
 引用
|
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之十:命令注入。”Page 171. McGraw-Hill. 2010. |
|
|