CWE-22:不当限制限制目录的路径名(“路径遍历”)
视图定制的信息:
的用户感兴趣的更多的概念方面的一个弱点。例如:教育者,技术作家和项目/项目经理。
用户关心的实际应用和细节的本质弱点以及如何预防它的发生。例子:工具开发人员、安全人员、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条目。
为用户谁想要定制显示细节。
×
编辑自定义过滤器许多文件操作的目的是发生在一个受限制的目录。通过使用特殊的元素,如“. .”和“/”分隔符,攻击者可以逃避限制以外的位置来访问系统上的其他文件或目录。最常见的一种特殊的元素是“. ./”序列,这在大多数现代操作系统都被解释为父目录的当前位置。这被称为相对路径遍历。路径遍历还包括使用绝对路径名,如“/ usr /地方/ bin”,这也可能是有用的在获得意想不到的文件。这被称为绝对路径遍历。 在许多编程语言,注入一个null字节(0或NUL)可能允许攻击者截断生成的文件名扩大攻击范围。例如,产品可能会增加”。txt”任何路径,从而限制了攻击者文本文件,但是零注入可能有效地去除这种限制。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码可以为社交网络应用程序的每个用户的配置信息存储在一个单独的文件中。所有文件都存储在一个目录中。
(坏的代码)
例如语言:Perl
dataPath公司美元= " /用户/ cwe /配置文件”;
我的$ username =参数(“用户”); 我的profilePath = dataPath公司美元。“/”。美元的用户名; 开放(我跳频美元," < ",$ profilePath) | | ExitError(“配置文件读取错误:$ profilePath”); 打印“< ul > \ n”; 而(< $ fh >) {
打印”<李> $ _ < /李> \ n”; }打印”< / ul > \ n”; 而程序员打算访问文件,如“/用户/ cwe / profiles /爱丽丝”或“/用户/ cwe / profiles / bob”,没有验证传入的用户参数。攻击者可以提供一个字符串,例如:
(攻击代码)
. . / . . / . . / etc / passwd
程序将生成一个配置文件路径名是这样的:
(结果)
/用户/ cwe / profiles / . . / . . / . . / etc / passwd
文件打开时,操作系统解决了”。/”在路径规范化和访问这个文件:
(结果)
/ etc / passwd
因此,攻击者可以读取整个密码的文本文件。 注意,这段代码还包含一个错误消息信息泄漏cwe - 209)如果用户参数不会产生一个存在的文件:提供完整的路径名。由于缺乏检索输出编码的文件,也可能是一个跨站点脚本问题(cwe - 79)如果概要文件包含任何HTML,但是其他代码需要检查。 示例2 在下面的示例中,一个字典文件的路径从一个系统属性读取并用来初始化一个文件对象。
(坏的代码)
例如语言:Java
字符串文件名= System.getProperty (“com.domain.application.dictionaryFile”);
文件dictionaryFile =新文件(文件名); 然而,道路并不确认或修改,以防止它包含相对或绝对路径序列之前创建File对象。这允许任何人可以控制系统属性来确定使用什么文件。理想情况下,路径应相对于解决一些应用程序或用户的主目录。 示例3 下面的代码将不受信任的输入,并使用一个正则表达式来过滤”. .从输入/”。然后将这个结果/home/user/目录并试图读取文件最后生成的路径。
(坏的代码)
例如语言:Perl
我的用户名=美元GetUntrustedInput ();
用户名= ~ s / \美元。\ \ / / /; 我的$ filename =“/ home / user /”。美元的用户名; ReadAndSendFile ($ filename); 自正则表达式没有/ g全球匹配修饰符,它只删除第一个实例“. ./“遇到。所以一个输入值,例如:
(攻击代码)
. . / . . / . . / etc / passwd
将第一个“. ./“剥夺,导致:
(结果)
. . / . . / etc / passwd
这个值然后连接/home/user/目录:
(结果)
/home/user/../../etc/passwd
导致检索/ etc / passwd文件一旦操作系统解决了. .在路径名/序列。这导致相对路径遍历(CWE-23)。 示例4 下面的代码尝试验证给定输入路径通过检查它对一个allowlist一旦删除给定的文件进行验证。在这个特定的例子中,被认为是有效的路径字符串开头“safe_dir /”。
(坏的代码)
例如语言:Java
字符串路径= getInputPath ();
如果(path.startsWith (" / safe_dir / ")) {
文件f =新文件(路径); }f.delete () 攻击者可以提供这样的一个输入:
(攻击代码)
/ safe_dir / . . / important.dat
软件假设路径是有效的,因为它始于“safe_path /”序列,但“. ./”将导致程序删除重要的序列。dat文件的父目录 示例5 下面的代码演示了无限制上传文件的Java servlet和路径遍历的脆弱性。HTML表单的动作属性是上传文件将请求发送给Java servlet。
(好的代码)
例如语言:HTML
<形式action = " FileUploadServlet " method = " post " enctype = "多部分/格式" >
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / > > < /形式 当提交的Java servlet的doPost方法将接收请求,从Http请求中提取文件的名称标题,读取文件内容从请求和输出文件到本地上传目录。
(坏的代码)
例如语言:Java
公开课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){ }/ / for循环的结束
bw.write(线); }bw.newLine (); bw.flush (); bw.close (); }捕捉(IOException特异){…} / /输出成功上传响应的HTML页面 / /输出成功上传响应的HTML页面 其他的 {…}
…
这段代码不执行检查上传文件的类型(cwe - 434)。这可能允许攻击者上传任何可执行文件或其他文件与恶意代码。 此外,BufferedWriter对象的创建主题相对路径遍历(CWE-23)。由于代码不提供检查文件名的头,攻击者可以使用“. ./“序列写文件之外的目的目录。根据执行环境中,攻击者可以指定任意文件编写,导致各种各样的后果,从代码执行,XSS (cwe - 79),或者系统崩溃。 例子6 这个脚本将从当前目录读取用户提供的文件。用户输入的相对路径文件和脚本使用Python的os.path.join()函数来将当前工作目录的路径与所提供的指定文件路径。这导致一个绝对路径所需的文件。如果文件不存在时,脚本试图读,一个错误打印给用户。
(坏的代码)
例如语言:Python
进口操作系统
导入系统 def main ():
文件名= sys.argv [1] main ()路径= os.path.join (os.getcwd(),文件名) 试一试:
张开f(路径,“r”): 除了FileNotFoundError e:
file_data = f.read ()
打印(“错误文件未找到”)
然而,如果用户供应绝对路径,os.path.join()函数将丢弃当前工作目录的路径,只使用绝对路径。例如,如果当前工作目录是/home/user/documents,但是用户输入/ etc / passwd, os.path.join()将仅使用/ etc / passwd,因为它被认为是一个绝对路径。在上面的场景中,这将导致脚本访问和读取/ etc / passwd文件。
(好的代码)
例如语言:Python
进口操作系统
导入系统 def main ():
文件名= sys.argv [1] main ()路径= os.path.normpath (f”{os.getcwd ()} {os.sep}{文件名}”) 试一试:
张开f(路径,“r”): 除了FileNotFoundError e:
file_data = f.read ()
打印(“错误文件未找到”)
构建路径字符串使用的操作系统。9月为给定的字符添加适当的分离操作系统(如。“\”或“/”)和调用os.path.normpath()删除任何额外的斜杠,可能已经进入——这尤其可能发生在使用Windows路径。通过将部分路径字符串以这种方式在一起,脚本可以避免调用os.path.join()和任何可能出现的潜在问题如果输入绝对路径。用这个版本的脚本,如果/home/user/documents当前工作目录,/ etc / passwd用户输入,生成的路径将/home/user/documents/etc/passwd.用户因此包含在当前工作目录。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
路径名等价可以被看作是一种规范化的错误。
的关系
一些路径名等价问题并不直接相关目录遍历,而用于绕过安全相关的检查文件/目录是否可以被攻击者访问(例如一个落后于“/”文件名可以绕过末尾不要指望/访问规则,导致服务器提供文件时,通常不会)。
术语 像其他弱点,术语通常是基于使用的操作类型,而不是潜在的弱点。有些人使用“目录遍历”只指注入“. .”和相同的序列,它的具体含义是遍历目录。 其他变体,如“绝对路径”和“驱动器”的影响* *目录遍历,但有些人可能不叫它,因为它不涉及“. .”或等价的。 研究的差距 不完整的诊断或报告的漏洞可以让它很难知道哪些变量影响。例如,研究人员可能会说,“. .\“是脆弱的,但不是测试”。/”,也可能是脆弱的。 目录分隔符的任意组合(“/”、“\”,等等)和数字的“。”(e.g. "....") can produce unique variants; for example, the "//../" variant is not listed (CVE-2004-0325). See this entry's children and lower-level descendants.
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |