cwe - 77:不当中和一个命令中使用的特殊元素(“命令注入”)
视图定制的信息:
命令注入漏洞通常发生在:
1。数据进入应用程序从一个不可信的来源。
2。数据是一个字符串的一部分,作为应用程序命令的执行。
3所示。通过执行命令,应用程序为攻击者提供了特权或能力,否则攻击者不会有。
许多协议和产品有自己的自定义命令语言。虽然OS或shell命令字符串经常发现和有针对性,开发人员可能没有意识到,这些其他命令语言也可能容易受到攻击。 包装程序命令注入是一种常见的问题。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 以下简单的程序接受文件名作为命令行参数并显示文件的内容给用户。程序安装setuid root,因为它的目的是作为一个学习工具,允许系统管理员培训检查特权系统文件没有给他们修改他们的能力或破坏系统。
(坏的代码)
例如语言:C
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。蝙蝠接受一个命令行参数,它指定什么类型的备份执行。因为限制访问数据库,应用程序运行备份作为特权用户。
(坏的代码)
例如语言:Java
…
字符串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确定安装的目录,然后执行一个初始化脚本基于指定的目录的相对路径。
(坏的代码)
例如语言:Java
…
字符串回家= System.getProperty (“APPHOME”); 字符串cmd = + INITCMD回家; java.lang.Runtime.getRuntime () .exec (cmd); … 上面的代码允许攻击者执行任意命令的高架特权应用程序通过修改系统属性APPHOME指向一个包含恶意INITCMD版本不同的道路。因为程序不验证值读取环境,如果攻击者可以控制APPHOME系统属性的值,然后他们可以愚弄应用程序运行恶意代码和系统的控制。 示例4 下面的代码是一个包装的UNIX命令猫将文件的内容打印到标准输出。这也是注射:
(坏的代码)
例如语言:C
# 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 Story.txt
当我们离开我们的英雄…… 然而,如果我们添加一个分号,这条线的结束另一个命令,该命令执行catWrapper没有抱怨:
(攻击代码)
美元。/ catWrapper Story.txt;ls
当我们离开我们的英雄…… Story.txt SensitiveFile.txt PrivateData.db a.o ut * 如果catWrapper设置高特权级别比标准的用户,可以执行任意命令与更高的特权。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
映射 使用映射:Allowed-with-Review (CWE ID可以用来映射到实际的漏洞在有限的情况下需要仔细审查)。 理由是:cwe - 77时通常使用操作系统命令注入(cwe - 78)的目的是(ref - 1287]。 评论:如果弱点涉及到命令语言除了操作系统shell调用,然后cwe - 77可以使用。 术语 “命令注入”词对不同的人有着不同的意义。对一些人来说,它指的是任何类型的攻击,可以允许攻击者执行命令自己的选择,无论如何插入这些命令。因此命令注入可以合成从另一个弱点。这种用法还包括病例的功能允许用户指定一个完整的命令,然后执行;CWE之内,这种情况可能是更好的被视为授权问题(因为攻击者不能指定任意命令。) 另一个常见的用法,包括cwe - 77及其后裔,包括分隔符注入情况下,攻击者的命令被构造。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |