cwe - 88:不当中和一个命令的参数分隔符(“参数注入”)
描述
产品构造一个字符串的命令来执行一个单独的组件在另一个控制范围,但这并不正确划定目标参数,选项,或者开关命令字符串中。
扩展描述
在创建命令使用插值成一个字符串时,开发人员可能认为只有参数/选项,指定将被处理。这种假设可能更强当程序员编码的命令的方式防止单独的命令被恶意提供,例如在shell元字符的情况下。构建命令时,开发人员可以使用空格或其他所需分隔符来分隔参数,当命令。然而,如果攻击者可以提供一个不受信任的输入包含argument-separating分隔符,然后生成的命令将会有更多的参数比开发人员的意图。攻击者可能能够改变命令的行为。根据所支持的功能无关的参数,这可能的安全相关的后果。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
77年
不当中和一个命令中使用的特殊元素(“命令注入”)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为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年
验证输入
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
77年
不当中和一个命令中使用的特殊元素(“命令注入”)
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及数据保护措施”(cwe - 1340)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
77年
不当中和一个命令中使用的特殊元素(“命令注入”)
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
架构和设计
实现
实现:造成这一弱点在建筑安全策略的实施。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
保密 完整性 可用性 其他
技术的影响: 执行未经授权的代码或命令;改变执行逻辑;阅读应用程序数据;修改应用程序数据
攻击者可能包括参数允许意外执行指令或代码,允许读取或修改敏感数据或其他可能导致意想不到的行为。
示范例子
示例1
考虑以下项目。它打算执行“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 \] +美元/)……
示例2
cve - 2016 - 10033 / (ref - 1249 )提供了一个有用的真实世界的例子在PHPMailer弱点。
程序调用PHP的邮件()函数来组合和发送邮件。第五个参数邮件()是一组参数。该计划打算提供一个“-fSENDER”参数,发送者将一个格式良好的电子邮件地址。程序已验证电子邮件地址之前调用邮件(),但有一个很大的灵活性在什么是一个格式良好的电子邮件地址,包括空格。与一些额外的允许字符执行一些逃离,敌人可以指定一个额外的“o”参数(清单一个输出文件)和“- x”参数(给一个程序执行)。这种利用额外的细节是在ref - 1250 ]。
观察到的例子
参考
描述
面向依赖管理工具可以避免OS命令注入在生成Git命令但是允许注入可选参数和输入从少量开始,可能允许代码执行。
典型的例子——“含有”参数被传递到另一个程序,在执行“- f”原因作为用户“根”
Web浏览器执行Telnet会话使用命令行参数指定的网站,这可能允许远程攻击者执行任意命令。
Web浏览器允许远程攻击者执行命令通过产卵Telnet日志文件在命令行选项和编写成一个可执行文件后执行任意代码。
邮件为PHP函数的参数注入漏洞可能允许攻击者绕过安全模式限制和修改命令行参数MTA(例如sendmail)可能执行命令。
帮助和支持中心在windows不正确验证HCP URL,它允许远程攻击者执行任意代码通过引号“HCP: / / URL。
邮件客户端不足够滤波器参数的mailto: url作为参数使用邮件执行时,它允许远程攻击者执行任意程序。
Web浏览器不过滤”——“当调用各种命令,允许指定命令行开关。
邮件客户端允许远程攻击者执行任意代码通过一个URI,它使用一个UNC网络共享路径名提供另一个配置文件。
SSH URI处理程序web浏览器允许远程攻击者执行任意代码或通过一个命令行选项进行端口转发。
Web浏览器不过滤”——“当调用各种命令,允许指定命令行开关。
早些时候在TellMe 1.2和参数注入漏洞允许远程攻击者修改域名查询服务程序的命令行参数和获取敏感信息通过”——“q_Host风格选项的参数。
小猎犬之前0.2.5可以产生某些不安全的命令行启动外部辅助应用程序索引时,攻击者可以执行任意命令。注意:不清楚这个问题涉及参数注入,shell元字符,或其他问题。
参数注入漏洞在Internet Explorer 6中为Windows XP SP2允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在Mozilla Firefox 1.0.6允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在浏览器的10.1构建17允许user-assisted远程攻击者修改命令行参数一个邮件客户端通过调用”(双引号)字符mailto:计划处理程序,通过启动Microsoft Outlook,任意文件名作为附件。注:目前尚不清楚这个问题是特定于实现的或微软API的一个问题。
参数注入漏洞在Skype 2.0 . * URI处理程序。104和2.5 . *。0到2.5 . *。78 Windows允许远程攻击者授权下载任意文件通过一个URL包含特定的命令行开关。
328年3.8.1有WinSCP构建参数注入漏洞允许远程攻击者上传或下载任意文件通过编码空间和双引号中的字符scp和sftp URI。
参数注入漏洞在Windows对象包装机(packager.exe)在Microsoft Windows XP SP1和SP2和服务器2003 SP1和允许远程攻击者user-assisted早些时候执行任意命令通过一个精心设计的文件是有“/”(削减)字符的文件名命令行属性,紧随其后的是一个有效的文件扩展名,导致命令执行削减之前,又名“对象包装机对话欺骗漏洞。”
参数注入漏洞HyperAccess 8.4允许远程攻击者user-assisted执行任意vbscript通过telnet / r选项和命令:/ / URI,配置为使用hawin32.exe。
参数注入漏洞的telnet守护进程(in.telnetd)在Solaris 10和11 (SunOS 5.10和5.11)曲解某些客户“- f”序列作为有效的登录请求程序跳过认证,远程攻击者可以登录账号,本为代表的帐户。
语言翻译的邮件函数接受另一个论点是连接到一个字符串中使用危险的popen()调用。由于没有中和这个论点,包括OS命令注入(
cwe - 78 )和参数注入(
cwe - 88 )是可能的。
参数注入允许执行任意命令通过注射“-”选项,执行的命令。
应用邮件处理函数中参数注入允许写unxpected文件和执行程序使用tecnically-valid电子邮件地址插入“o”和“- x”开关。
潜在的缓解措施
实施阶段:
在可能的情况下,避免构建一个字符串,其中包含命令及其参数。一些语言或框架功能,支持指定独立参数,例如作为一个数组,用于自动执行适当的引用或逃避而构建命令。例如,在PHP, escapeshellarg()可以用来逃避一个参数对系统(),或exec()可以被称为一个参数数组。在C语言中,通常可以重构代码从系统使用(),它接受一个字符串,使用exec(),它需要单独的函数参数为每个参数。
阶段:体系结构和设计
理解所有潜在的地区不受信任的输入可以输入产品:参数或参数,饼干,任何从网络读取环境变量,请求头以及内容,URL组件、电子邮件、文件、数据库、和任何外部系统向应用程序提供数据。在定义良好的接口执行输入验证。
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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和类似的场景,但它可能无意中修改输入,允许包含正确编码危险的内容。
实施阶段:
当组件之间交换数据,确保组件都使用相同的字符编码。确保适当的编码应用于每个接口。时显式地设置您所使用的编码协议允许你这样做。
实施阶段:
当应用程序结合来自多个数据源的数据,执行验证来源之后的总和。单个数据元素可以通过验证步骤但是违反限制后的总和。
测试阶段:
使用自动静态分析工具针对这种类型的弱点。许多现代技术利用数据流分析,减少假阳性的数量。这不是一个完美的解决方案,因为100%的准确率和覆盖率不可行。
测试阶段:
使用动态交互的工具和技术与产品使用大型测试套件和许多不同的输入,如模糊测试(起毛)健壮性测试和故障注入。产品的操作可能慢下来,但它不应该成为不稳定,崩溃,或者产生不正确的结果。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
741年
CERT C安全编码标准(2008)第八章-字符和字符串(STR)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
744年
CERT C安全编码标准(2008)第11章-环境(ENV)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
810年
OWASP十大2010类别A1 -注射
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
875年
CERT c++安全编码部分07 -字符和字符串(STR)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
878年
CERT c++安全编码部分10 -环境(ENV)
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
929年
OWASP十大2013类别A1 -注射
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
990年
SFP二级集群:污染输入命令
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1027年
OWASP十大2017类别A1 -注射
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1165年
SEI CERT 10 C编码标准指导方针。环境(ENV)
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1347年
OWASP十大2021类别A03:2021 -注射
笔记
的关系
在一层的抽象,这可以重叠其他弱点空白问题,例如javascript注入属性的HTML标记。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
参数注入或修改
CERT C安全编码
ENV03-C
当调用外部程序清洁环境
CERT C安全编码
ENV33-C
不精确的
不调用系统()
CERT C安全编码
STR02-C
Sanitize数据传递到复杂的子系统
WASC
30.
邮件命令注入
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。第十章”,参数数组”,567页。1版。艾迪生卫斯理》2006。