描述
产品允许攻击者上传或危险的传输文件类型,可以自动处理产品的内环境。
替代条款
不受限制的文件上传:
用于漏洞数据库和其他地方,但不够精确。这个词可以解释为缺乏对上传文件的大小或数量的限制,这是一个资源消耗问题。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
669年
不正确的资源领域之间的转移
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
351年
不足的类型的区别
PeerOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
436年
解释的冲突
PeerOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
430年
部署错误处理程序
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
73年
外部控制文件名或路径
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
183年
宽容的允许输入列表
光束
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
184年
不允许输入的完整列表
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
429年
处理程序错误
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
669年
不正确的资源领域之间的转移
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关视图”架构概念”(cwe - 1008)
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1011年
授权的演员
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段
请注意
实现
架构和设计
遗漏:这个弱点是由于缺少一个安全策略在体系结构和设计阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围
影响
可能性
完整性 保密 可用性
任意代码执行是可能的如果一个上传文件的代码的解释和执行。特别是asp和php扩展上传到web服务器,因为这些文件类型通常视为自动执行,即使没有指定文件系统权限执行。例如,在Unix环境中,程序通常不能运行,除非执行位被设置,但PHP程序可能执行的web服务器,而不是直接调用操作系统。
利用的可能性
示范例子
示例1
下面的代码将允许用户上传图片到web服务器。驱动形式的HTML代码在用户结束有一个输入字段类型的“文件”。
< action = " upload_picture形式。php”方法= " post " enctype = " multipart /格式”>
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / >
> < /形式
一旦提交,上面的形式向upload_picture发送文件。php web服务器上。PHP将文件存储在一个临时位置,直到检索服务器端代码(或丢弃)。在本例中,文件是搬到一个更永久的照片/目录。
/ /定义目标位置的图片
/ /上传会得救。
$ target = " / "照片。:$带有_file [' uploadedfile ']['名字']);
/ /将上传的文件移动到新的位置。
如果函数(带有_file美元[' uploadedfile '] [' tmp_name '],美元目标))
{
回声”已成功上传照片。”;
}
其他的
{
回声”上传照片时发生了一个错误,请再试一次。”;
}
上面的代码的问题是没有检查关于正在上传的文件类型。假设照片/可在web文档根,攻击者可以上传文件的名称:
因为这个文件名以”。php“它可以由web服务器执行。在这上传文件的内容,攻击者可以使用:
< ? php
系统($ _GET [' cmd ']);
? >
这个文件已经安装之后,攻击者可以输入任意命令执行使用一个URL,如:
http://server.example.com/upload_dir/malicious.php?cmd=ls%20-l
运行“ls - l命令——或任何其他类型的命令,攻击者想要指定。
示例2
下面的代码演示了无限制上传文件的Java servlet和路径遍历的脆弱性。HTML表单的动作属性是上传文件将请求发送给Java servlet。
<形式action = " FileUploadServlet " method = " post " enctype = "多部分/格式" >
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / >
> < /形式
当提交的Java servlet的doPost方法将接收请求,从Http请求中提取文件的名称标题,读取文件内容从请求和输出文件到本地上传目录。
公开课FileUploadServlet扩展HttpServlet {
…
保护无效doPost (HttpServletRequest请求,HttpServletResponse响应)抛出ServletException IOException {
response.setContentType (" text / html ");
PrintWriter = response.getWriter ();
字符串contentType = request.getContentType ();
/ /边界头的起始位置
int印第安纳= contentType.indexOf(“边界= ");
字符串边界= contentType.substring(印第安纳州+ 9);
字符串多义线=新的字符串();
字符串uploadLocation =新的字符串(UPLOAD_DIRECTORY_STRING);/ /恒定值
/ /验证内容类型是多部分表单数据
如果(contentType ! = null & & contentType.indexOf(“多部分/格式”)! = 1){
/ /从Http报头中提取文件名
BufferedReader br = new BufferedReader(新InputStreamReader (request.getInputStream ()));
…
多段线= br.readLine ();
字符串文件名= pLine.substring (pLine.lastIndexOf (“\ \”), pLine.lastIndexOf (" \ "));
…
/ /输出文件到本地上传目录
尝试{
BufferedWriter bw = new BufferedWriter(新FileWriter (uploadLocation +文件名,真的));
(字符串行;(= br.readLine行())!)=零;{
如果(line.indexOf(边界)= = 1){
bw.write(线); bw.newLine (); bw.flush ();
}
}/ / for循环的结束
bw.close ();
}捕捉(IOException特异){…}
/ /输出成功上传响应的HTML页面
}
/ /输出成功上传响应的HTML页面
其他的
{…}
}
…
}
这段代码不执行检查上传文件的类型(cwe - 434 )。这可能允许攻击者上传任何可执行文件或其他文件与恶意代码。
此外,BufferedWriter对象的创建主题相对路径遍历(CWE-23 )。由于代码不提供检查文件名的头,攻击者可以使用“. ./“序列写文件之外的目的目录。根据执行环境中,攻击者可以指定任意文件编写,导致各种各样的后果,从代码执行,XSS (cwe - 79 ),或者系统崩溃。
观察到的例子
参考
描述
基于网络的邮件产品商店”。shtml”附件,可能包含SSI
PHP不限制上传文件类型
. php文件的上传和执行
上传文件与危险的扩展
程序不限制文件类型
上传文件的类型检查不当
双“php扩展留下了一个积极的php扩展生成的文件名。
ASP程序允许上传的ASP文件绕过客户端检查
ASP文件上传
ASP文件上传
潜在的缓解措施
阶段:体系结构和设计
阶段:体系结构和设计
组接受对象时,如文件名或url,是有限的或已知,从一组固定的输入值创建一个映射(比如数字id)实际的文件名或url,并拒绝所有其他输入。
阶段:体系结构和设计
考虑存储上传文件之外的web文档根完全。然后,使用其他机制来动态交付文件。(
ref - 423 ]
实施阶段:
假设所有的输入是恶意的。使用一个“接受良好的“输入验证策略,即。,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可以用于检测潜在攻击或确定哪些输入是畸形的,应该直接驳回。
例如,限制文件名字母数字字符限制的引入可以帮助意想不到的文件扩展名。
阶段:体系结构和设计
只允许定义一组非常有限的扩展和生成文件名,以这些扩展。考虑XSS的可能性(
cwe - 79 )允许. html或. htm文件类型。
实施阶段:
确保只使用一个扩展的文件名。一些web服务器,包括一些版本的Apache,可能过程文件基于这样“filename.php内部扩展。gif”是美联储PHP解释器。
ref - 422 ][
ref - 423 ]
实施阶段:
当运行在web服务器上支持区分大小写的文件名,扩展所提供的执行不区分大小写的评估。
阶段:体系结构和设计
对于任何一个在客户端执行安全检查,确保这些检查复制在服务器端,为了避免
cwe - 602 。攻击者可以绕过客户端检查通过修改值后,检查执行,或通过改变客户端完全删除客户端检查。然后,这些修改的值将被提交到服务器。
实施阶段:
不完全依赖健康检查文件内容,确保预期的文件类型和大小。攻击者可能隐藏代码在某些文件片段,仍将由服务器执行。例如,GIF图像可能包含一个自由格式的注释字段。
实施阶段:
不要完全依赖MIME内容类型或文件名属性在确定如何呈现一个文件。验证MIME内容类型,并确保它匹配扩展只能解决部分问题。
阶段:体系结构和设计;操作
使用所需的最低特权运行您的代码来完成必要的任务(
ref - 76 ]。如果可能的话,创建独立帐户权限有限,只用于一个任务。这样,一个成功的攻击不会立即给攻击者访问其他软件或其环境。例如,数据库应用程序很少需要作为数据库管理员运行,特别是在日常操作。
阶段:体系结构和设计;操作
运行代码的“监狱”或类似沙箱环境执行严格的流程和操作系统之间的边界。这可能有效地限制哪些文件可以在一个特定的目录或访问哪些命令可以执行的软件。
操作系统的例子包括Unix chroot监狱,AppArmor对,SELinux。在一般情况下,托管代码可能会提供一些保护。例如,java。在Java SecurityManager FilePermission允许软件指定文件操作的限制。
这可能不是一个可行的解决方案,它只限制对操作系统的影响;应用程序的其余部分可能仍然接受妥协。
注意: 这种缓解的有效性取决于特定的沙盒或监狱的预防功能使用,只可能有助于减少攻击的范围,比如限制攻击者对特定文件系统的系统调用或限制部分,可以访问。
弱点Ordinalities
Ordinality
描述
主
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这可以主要在没有检查。
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这是当使用双扩展(如经常合成。“.php.gif”)绕过一个检查。
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
这可以从客户端执行结果(
cwe - 602 );一些产品将包括在web客户机web脚本检查文件名,没有在服务器端验证。
检测方法
动态分析与自动化的结果解释
根据飙升,以下检测技术可能是有用的:
Web应用程序扫描
Web服务的扫描仪
数据库扫描仪
动态分析与人工解释结果
根据飙升,以下检测技术可能是有用的:
人工静态分析源代码
根据飙升,以下检测技术可能是有用的:
关注人工抽查,手动分析来源
手工源代码审查(不检查)
自动静态分析源代码
根据飙升,以下检测技术可能是有用的:
源代码缺陷分析仪
Context-configured源代码分析器
体系结构或设计审查
根据飙升,以下检测技术可能是有用的:
功能区域
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然
类型
ID
的名字
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
714年
OWASP 2007年十大类别A3 -恶意文件执行
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
801年
2010年前25 -安全组件之间的交互
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
813年
OWASP十大2010类别A4 -不安全的直接对象引用
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
864年
2011年前25 -安全组件之间的交互
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
884年
CWE横截面
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1131年
方案》(2016)——安全质量措施
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1200年
弱点在2019 CWE最危险的软件错误
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1308年
方案及质量措施,安全
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1337年
2021 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1340年
方案及数据保护措施
MemberOf
类别——CWE条目包含一组其他条目,共享一个共同的特点。
1348年
OWASP 2021年十大类别A04:2021——不安全设计
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1350年
2020 CWE最危险软件的弱点的弱点
MemberOf
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。
1387年
2022 CWE最危险软件的弱点的弱点
笔记
的关系
这可以有链接关系不完全denylist /宽容allowlist错误当产品尝试,但是失败了,适当限制允许哪些类型的文件(cwe - 183 ,cwe - 184 )。
这对中介机构也可以重叠多个解释错误,如防病毒产品与特定的文件扩展名不删除或检疫附件,可以由客户端处理系统。
分类法映射
映射分类名称
节点ID
适合
映射节点名
千鸟
不受限制的文件上传
OWASP十大2007
A3
CWE更具体
恶意文件执行
OMG ASCSM
ASCSM -cwe - 434
引用
(ref - 62)马克·多德约翰麦克唐纳和贾斯汀Schuh。“软件安全评估的艺术”。17章,“文件上传”,1068页。1版。艾迪生卫斯理》2006。
内容的历史
提交
提交日期
提交者
组织
2006-07-19
千鸟
修改
修改日期
修饰符
组织
2008-07-01
Eric Dalci
Cigital
更新Time_of_Introduction
2008-09-08
CWE内容团队
主教法冠
更新Alternate_Terms、关系、Other_Notes Taxonomy_Mappings
2009-01-12
CWE内容团队
主教法冠
更新的关系
2009-12-28
CWE内容团队
主教法冠
更新Applicable_Platforms、Functional_Areas Likelihood_of_Exploit、Potential_Mitigations Time_of_Introduction
2010-02-16
CWE内容团队
主教法冠
转换从Compound_Element弱点
2010-02-16
CWE内容团队
主教法冠
更新Alternate_Terms、Applicable_Platforms Common_Consequences Demonstrative_Examples,名字,Other_Notes, Potential_Mitigations,引用,Related_Attack_Patterns, Relationship_Notes,关系类型,Weakness_Ordinalities
2010-04-05
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2010-06-21
CWE内容团队
主教法冠
更新引用,Relationship_Notes
2010-09-27
CWE内容团队
主教法冠
更新Potential_Mitigations
2010-12-13
CWE内容团队
主教法冠
更新Potential_Mitigations
2011-06-27
CWE内容团队
主教法冠
更新的关系
2011-09-13
CWE内容团队
主教法冠
更新Potential_Mitigations、引用关系
2012-05-11
CWE内容团队
主教法冠
更新引用关系
2012-10-30
CWE内容团队
主教法冠
更新Potential_Mitigations
2014-07-30
CWE内容团队
主教法冠
更新Detection_Factors
2015-12-07
CWE内容团队
主教法冠
更新的关系
2017-11-08
CWE内容团队
主教法冠
更新Affected_Resources、Applicable_Platforms Likelihood_of_Exploit Modes_of_Introduction,引用关系,Weakness_Ordinalities
2019-01-03
CWE内容团队
主教法冠
更新引用关系,Taxonomy_Mappings
2019-06-20
CWE内容团队
主教法冠
更新Related_Attack_Patterns
2019-09-19
CWE内容团队
主教法冠
更新的关系
2020-02-24
CWE内容团队
主教法冠
更新Applicable_Platforms Potential_Mitigations
2020-06-25
CWE内容团队
主教法冠
更新Potential_Mitigations Relationship_Notes
2020-08-20
CWE内容团队
主教法冠
更新的关系
2020-12-10
CWE内容团队
主教法冠
更新的关系
2021-03-15
CWE内容团队
主教法冠
更新Demonstrative_Examples
2021-07-20
CWE内容团队
主教法冠
更新的关系
2021-10-28
CWE内容团队
主教法冠
更新的关系
2022-04-28
CWE内容团队
主教法冠
更新Research_Gaps
2022-06-28
CWE内容团队
主教法冠
更新的关系
2022-10-13
CWE内容团队
主教法冠
更新的引用
2023-01-31
CWE内容团队
主教法冠
更新Alternate_Terms、描述
以前的条目名称
改变日期
以前的条目名称
2010-02-16
不受限制的文件上传