CWE

普遍的弱点

社区开发的软件和硬件弱点类型清单

2021 CWE最重要的硬件弱点
CWE前25个最危险的弱点
>CWE列表> CWE-单个字典定义(4.9)
ID

CWE-23:相对路径遍历

弱点ID:23
抽象:根据
结构:简单的
查看自定义信息:
+描述
该软件使用外部输入来构建应在限制目录内的路径名,但是它不能适当地中和序列(例如“ ..”),该序列可以解析到该目录以外的位置。
+扩展描述
这使攻击者可以遍历文件系统以访问限制目录之外的文件或目录。
+替代条款
拉链滑道:
“ Zip Slip”是一种使用文件档案(例如zip,tar,rar等)的攻击[[Ref-1282]。它最常用于相对路径遍历(CWE-23)和链接以下(CWE-59)。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 名称
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 22 路径名的不当限制到限制目录(“路径遍历”)
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 24 路径遍历:'../filedir'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 25 路径遍历:'/../filedir'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 26 路径遍历:'/dir/../filename'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 27 路径遍历:'dir /../../文件名'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 28 路径遍历:'.. \ filedir'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 29 路径遍历:'\ .. \ filename'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 30 路径遍历:'\ dir \ .. \ filename'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 31 路径遍历:'dir \ .. \ .. \ filename'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 32 路径遍历:'...'(三点)
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 33 路径遍历:'....'(多点)
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 34 路径遍历:'.... //'
父母 变体变体 - 与某种类型的产品相关的弱点,通常涉及特定的语言或技术。比基本弱点更具体。变体级别的弱点通常以以下维度的3到5来描述问题:行为,财产,技术,语言和资源。 35 路径遍历:'.../... //
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“软件开发”视图相关(CWE-699)
自然 类型 ID 名称
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1219 文件处理问题
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“ CISQ质量措施(2020)”相关(CWE-1305)
自然 类型 ID 名称
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 22 路径名的不当限制到限制目录(“路径遍历”)
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与“ CISQ数据保护措施”(CWE-1340)有关
自然 类型 ID 名称
Childof 根据基础 - 仍然主要独立于资源或技术的弱点,但有足够的细节来提供特定的检测和预防方法。基本水平的弱点通常用以下维度的2或3来描述问题:行为,财产,技术,语言和资源。 22 路径名的不当限制到限制目录(“路径遍历”)
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
阶段 笔记
执行
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

班级:不是特定语言的(不确定的患病率)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 影响 可能性
正直
保密
可用性

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

攻击者可能能够创建或覆盖用于执行代码的关键文件,例如程序或库。
正直

技术影响:修改文件或目录

攻击者可能能够覆盖或创建关键文件,例如程序,库或重要数据。如果目标文件用于安全机制,则攻击者可能能够绕过该机制。例如,在密码文件末尾附加一个新帐户可以允许攻击者绕过身份验证。
保密

技术影响:读取文件或目录

攻击者可能能够阅读意外文件的内容并揭示敏感数据。如果目标文件用于安全机制,则攻击者可能能够绕过该机制。例如,通过读取密码文件,攻击者可以进行蛮力密码猜测攻击,以分解系统上的帐户。
可用性

技术影响:DOS:崩溃,退出或重新启动

攻击者可能能够覆盖,删除或损坏意外关键文件,例如程序,库或重要数据。这可能会阻止该软件根本无法正常工作,并且在使用诸如身份验证之类的保护机制的情况下,它有可能锁定软件的每个用户。
+示例的例子

示例1

以下URL容易受到此攻击:

(不良代码)
http://example.com.br/get-files.jsp?file=report.pdf
http://example.com.br/get-page.php?home=aaa.html
http://example.com.br/some-page.asp?page=index.html

执行此攻击的一种简单方法就是这样:

(攻击代码)
http://example.com.br/get-files?file=../../../../../somedir/somefile
http://example.com.br/../../../../../../etc/shadow
http://example.com.br/get-files?file=../../../../../../etc/passwd

示例2

以下代码可以用于社交网络应用程序,其中每个用户的配置文件信息都存储在单独的文件中。所有文件都存储在一个目录中。

(不良代码)
示例语言:珀尔
我的$ datapath =“/users/cwe/profiles”;
我的$ username = param(“用户”);
我的$ profilePath = $ datapath。“/”。$ username;

打开(我的$ fh,“ <”,$ profilePath)||exitError(“ profile读取错误:$ profilepath”);
打印“
    \ n”;
    while(<$ fh>){
    打印“
  • $ _
  • \ n”;
    }
    打印“
\ n”;

程序员打算访问诸如“/users/cwe/profiles/alice”或“/users/cwe/profiles/bob”之类的文件,但没有验证传入的用户参数。攻击者可以提供一个字符串,例如:

(攻击代码)
../../../../../etc/passwd

该程序将生成类似的配置文件路径名:

(结果)
/Users/cwe/profiles/../../../../../etc/passwd

打开文件后,操作系统在路径规范化过程中解决“ ../”,并实际访问此文件:

(结果)
/etc/passwd

结果,攻击者可以读取密码文件的整个文本。

注意此代码还包含错误消息信息泄漏(CWE-209)如果用户参数不产生存在的文件:提供完整的路径名。由于缺乏检索文件的输出编码,也可能存在跨站点脚本问题(CWE-79)如果配置文件包含任何HTML,则需要检查其他代码。

示例3

以下代码演示了使用Java Servlet和路径遍历漏洞的文件上载的不受限制上传。HTML表单的操作属性将上传文件请求发送到Java Servlet。

(好代码)
示例语言:html


选择要上传的文件:
<输入type =“ file” name =“ filename”/>




提交后,Java Servlet的Dopost方法将接收请求,请从HTTP请求标头中提取文件名,从请求中读取文件内容,然后将文件输出到本地上载目录。

(不良代码)
示例语言:爪哇
公共类FileUploadServlet扩展了Httpservlet {
...

受保护的void dopost(httpservletrequest请求,httpservletresponse响应)抛出ServletException,ioexception {
response.setContentType(“ text/html”);
printWriter out = response.getWriter();
字符串contentType = request.getContentType();

//边界标头的起始位置
int ind = contentType.indexof(“ boundare =”);
字符串边界= contentType.substring(ind+9);

字符串pline = new String();
字符串uploadLocation = new String(upload_directory_string);//常数值

//验证内容类型是多部分表单数据
if(contentType!= null && contentType.indexof(“ multipart/form -data”)!= -1){
//从HTTP标头提取文件名
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
...
pline = br.readline();
字符串fileName = pline.substring(pline.lastindexof(“ \\”),pline.lastIndexof(“ \''”));
...

//将文件输出到本地上传目录
尝试 {
BufferedWriter BW = new BufferedWriter(new FileWriter(uploadLocation+fileName,true));
for(字符串行;(line = br.readline())!= null;){
if(line.indexof(boundary)== -1){
bw.write(line);
bw.newline();
bw.flush();
}
} //循环结束
bw.close();


} catch(ioexception ex){...}
//输出成功上传响应HTML页面
}
//输出失败上传响应HTML页面
别的
{...}
}
...
}

此代码不对要上传的文件类型执行检查(CWE-434)。这可以允许攻击者上传任何可执行的文件或其他使用恶意代码的文件。

此外,BufferedWriter对象的创建受相对路径遍历的约束(CWE-23)。由于代码未检查标题中提供的文件名,因此攻击者可以使用“ ../”序列来写入预期目录之外的文件。根据执行环境的不同,攻击者可能能够指定任意文件,从而导致各种后果,从代码执行,XSS(CWE-79),或系统崩溃。

+观察到的例子
参考 描述
Python Package Manager无法正确限制内容分配标题中指定的文件名,允许使用诸如“ ../ ../”之类的路径遍历序列读取任意文件。
基于GO的Kubernetes操作员应用程序中的目录遍历允许通过YAML文件中的../序列从控制器的POD文件系统访问数据
用GO编写的Kubernetes软件包管理器允许恶意插件将路径遍历序列注入插件存档(“ zip slip”),以在预期目录之外复制文件
链:云计算虚拟化平台不需要身份验证即可上传tar格式文件(CWE-306),然后使用..路径遍历序列(CWE-23)在文件中访问意外文件,如野外CISA KEV中所利用的。
基于GO的档案库允许将文件提取到目标文件夹外部的位置,并使用“ ../”路径遍历序列序列中的文件名(又称“ zip slip”)中的文件名中的路径遍历序列。
服务器允许远程攻击者通过某些HTTP获取请求拒绝服务,其中包含%2E%2E(编码点点),几个“ /../”序列,或者在URI中几个“ ../”。
“ \”在Web服务器中不在否定者中,在Windows和其他OSS中运行服务器时允许路径遍历攻击。
可以在HTTP请求中通过.. \(DOT DOT)序列读取任意文件。
Web服务器搜索引擎中的目录遍历漏洞允许远程攻击者通过查询中的“ .. \”序列读取任意文件。
FTP服务器中的目录遍历漏洞允许远程攻击者通过get请求中的“ .. \”序列读取任意文件。
Servlet中的目录遍历漏洞允许远程攻击者通过HTTP请求中的“ .. \”序列执行任意命令。
保护机制检查“/..”,但不考虑特定于Windows的“ \ ..”,允许阅读任意文件。
FTP服务器中的目录遍历漏洞允许远程身份验证的攻击者通过LS命令中的“ \ ..”序列列出任意目录。
Access Control Server中的管理功能允许远程攻击者通过a url到port 2002中的URL中的“ .. \ ..”序列读取Web根部外部的HTML,Java类和图像文件。
Web服务器中的“ \ ...”
“ ...”在FTP服务器中的CD命令中
“ ...”在FTP服务器中的CD命令中
“ ...”在FTP服务器中的CD命令中
在基于Windows的FTP服务器中使用GET或CD读取任意文件和目录。
使用“。”读取文件。URL中的Unicode编码“/”或“ \”字符。
使用“ ...”的Web服务器目录列表
三点
通过URL中的“ /......../”读取文件
通过Web服务器中的“ ....”读取文件
通过Web服务器中的“ ......
通过Web服务器中的“ ......
在不同命令中使用“ ..”,“ ...”,“ ...”和“ ....”的多次攻击
聊天服务器中的“ ...”或“ ....”
链:“ .../... //”使用REGEXP删除“ ../”的“ ../”绕过保护机制CWE-182)和由此产生的路径遍历。
“ .../.... ///“绕过删除的Regexp”。/
Mail Server允许远程攻击者通过“ ..”或通过用户提供的参数重命名任意文件来创建任意目录。
+潜在的缓解

阶段:实施

策略:输入验证

假设所有输入都是恶意的。使用“接受已知的好的”输入验证策略,即使用严格符合规格的可接受输入列表。拒绝任何不严格符合规格的输入,或将其转换为可以做的事物。

执行输入验证时,请考虑所有潜在的相关属性,包括长度,输入类型,可接受值的全部范围,缺失或额外的输入,语法,跨相关字段的一致性以及符合业务规则的一致性。作为业务规则逻辑的一个示例,“船”可能在句法上有效,因为它仅包含字母数字字符,但是如果仅预期输入包含诸如“红色”或“蓝色”之类的颜色,则无效。

不要仅仅依靠寻找恶意或畸形的输入。这可能会错过至少一个不良的输入,尤其是如果代码的环境发生变化。这可以为攻击者提供足够的空间来绕过预期的验证。但是,拒绝者对于检测潜在攻击或确定哪些投入是如此畸形以至于应直接拒绝。

验证文件名时,请使用限制要使用的字符集的严格允许清单。如果可行,只允许一个“”。文件名中的角色,以避免弱点CWE-23,并排除目录分离器,例如“/”以避免CWE-36。使用允许文件扩展名的列表,这将有助于避免CWE-434

不要仅仅依靠去除潜在危险字符的过滤机制。这等同于派符者,这可能是不完整的(CWE-184)。例如,如果文件系统还支持使用“ \”作为目录分离器,则过滤“/”是不足的保护。当过滤以仍然产生危险数据的方式应用时,可能会发生另一个可能的错误(CWE-182)。例如,如果“ ../”序列从“ .../... //”字符串中取出,则将两个实例从原始字符串中删除,但其余的字符仍将形成“ ../”字符串。

阶段:实施

策略:输入验证

在经过验证之前CWE-180)。确保应用程序不会解码相同的输入两次(CWE-174)。此类错误可以用来绕过允许列表验证方案,通过检查危险输入后进行检查。

使用内置路径规范化函数(例如C中的realpath())生成PathName的规范版本,该版本有效地删除了“ ..”序列和符号链接(CWE-23,,,,CWE-59)。这包括:

  • c中的realpath()
  • Java中的GetCanonicalPath()
  • asp.net中的getfullpath()
  • perl中的realpath()或abs_path()
  • php中的realpath()
+会员资格
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 名称
成员 看法查看 - CWE条目的子集,提供了一种检查CWE内容的方法。两个主视图结构是切片(平面列表)和图(包含条目之间的关系)。 884 CWE横截面
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 981 SFP次级群集:路径遍历
成员 类别类别 - 包含共享共同特征的其他条目的CWE条目。 1345 OWASP前十2021年A01:2021-损坏的访问控制
+分类映射
映射的分类名称 节点ID 合身 映射的节点名称
plover 相对路径遍历
软件故障模式 SFP16 路径遍历
+参考
[Ref-192] Owasp。“ OWASP攻击列表”。<http://www.owasp.org/index.php/relative_path_traversal>。
[Ref-62] Mark Dowd,John McDonald和Justin Schuh。“软件安全评估的艺术”。第9章,“文件名和路径”,第503页。第一版。艾迪生·卫斯理。2006。
[Ref-1282] Snyk。“拉链滑移脆弱性”。2018-06-05。<https://security.snyk.io/research/zip-slip-vulnerability>。
+内容历史记录
+提交
提交日期 提交者 组织
2006-07-19 plover
+贡献
贡献日期 贡献者 组织
2022-07-11 尼克·约翰斯顿
在perl示例中识别出弱点
+修改
修改日期 修饰符 组织
2008-07-01 埃里克·达奇(Eric Dalci) 雪茄
更新的参考文献,explyative_example,entify_mitigations,time_of_introduction
2008-09-08 CWE内容团队 MITER
更新的关系,参考,分类_mappings
2008-10-14 CWE内容团队 MITER
更新的描述
2009-07-27 CWE内容团队 MITER
更新的势_MINEIGATIONS
2010-02-16 CWE内容团队 MITER
更新了示范_examples
2010-06-21 CWE内容团队 MITER
更新的描述,势_MITIGATIONS
2011-03-29 CWE内容团队 MITER
更新的势_MINEIGATIONS
2011-06-01 CWE内容团队 MITER
更新的common_cconsquences
2012-05-11 CWE内容团队 MITER
更新的common_ccessquences,示例_examples,obsoved_examples,参考,关系
2014-07-30 CWE内容团队 MITER
更新的关系,分类_mappings
2017-01-19 CWE内容团队 MITER
更新相关的_attack_patterns
2017-11-08 CWE内容团队 MITER
更新了适用的_platforms
2019-06-20 CWE内容团队 MITER
更新相关的_attack_patterns
2020-02-24 CWE内容团队 MITER
更新的电势_限制,关系
2020-06-25 CWE内容团队 MITER
更新了观察到的示例
2020-08-20 CWE内容团队 MITER
更新的关系
2020-12-10 CWE内容团队 MITER
更新的关系
2021-03-15 CWE内容团队 MITER
更新了示范_examples
2021-10-28 CWE内容团队 MITER
更新的关系
2022-06-28 CWE内容团队 MITER
更新了观察到的examples
2022-10-13 CWE内容团队 MITER
更新的备用_terms,obsoved_examples,参考
提供更多信息 - 请选择其他过滤器。
页面最后更新:2022年10月13日