cwe - 95:不当中和指令的动态评估代码(Eval注入)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) JavaScript患病率(待定) Python患病率(待定) Perl患病率(待定) PHP患病率(待定) Ruby患病率(待定) 类:解释患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 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)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。 示例2 这个简单的脚本要求用户提供一个数字列表作为输入,并将它们添加在一起。
(坏的代码)
例如语言:Python
def main ():
和= 0 main ()数量= eval(输入("输入一个空格分隔的数字列表:")) num的数字:
=和+ num求和 打印(f”之和{数字}={和}")eval()函数可以将用户提供的列表,并将它转换成一个Python列表对象,因此允许程序员使用列表理解方法来处理数据。但是,如果代码提供给eval()函数,它将执行代码。例如,恶意用户可以提供以下字符串:
(攻击代码)
__import__(“子流程”)。getoutput (rm - r *)
这将删除当前目录中的所有文件。由于这个原因,不建议使用eval()不可信的输入。 来完成这个不使用eval()是应用整数转换输入在一个try /除了块。如果用户提供的输入不是数字,这将提高ValueError。通过避免eval(),没有机会执行输入字符串的代码。
(好的代码)
例如语言:Python
def main ():
和= 0 main ()数量=输入(输入一个空格分隔的数字列表:)。分割(" ") 试一试:
num的数字: 除了ValueError:
=和+ num求和 打印(f”之和{数字}={和}")
print(“错误:无效输入”)
另一种选择是使用ast.literal_eval()函数从Python的ast模块。这个函数只考虑Python文字作为有效数据类型和不会执行任何代码中包含用户输入。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |