Fortify漏洞之Path Manipulation(路径篡改)

  继续对Fortify的漏洞进行总结,本篇主要针对 Path Manipulation(路径篡改)的漏洞进行总结,以下:程序员

一、Path Manipulation(路径篡改)                        

1.一、产生缘由:

当知足如下两个条件时,就会产生 path manipulation 错误:tomcat

1. 攻击者能够指定某一文件系统操做中所使用的路径。spa

2. 攻击者能够经过指定特定资源来获取某种权限,而这种权限在通常状况下是不可能得到的。server

 

例如,在某一程序中,攻击者能够得到特定的权限,以重写指定的文件或是在其控制的配置环境下运行程序。xml

例 1: 下面的代码使用来自于 HTTP 请求的输入来建立一个文件名。程序员没有考虑到攻击者可能使用像“../../tomcat/conf/server.xml”同样的文件名,从而致使应用程序删除它本身的配置文件。blog

String rName = request.getParameter("reportName");ip

File rFile = new File("/usr/local/apfr/reports/" + rName);资源

...get

rFile.delete()io

 

例 2: 下面的代码使用来自于配置文件的输入来决定打开哪一个文件,并返回给用户。若是程序在必定的权限下运行,且恶意用户可以篡改配置文件,那么他们能够经过程序读取系统中以 .txt 扩展名结尾的全部文件。

fis = new FileInputStream(cfg.getProperty("sub")+".txt");
amt = fis.read(arr);
out.println(arr);

1.二、修复方案:

方案一:建立一份合法资源名的列表,而且规定用户只能选择其中的文件名。经过这种方法,用户就不能直接由本身来指定资源的名称了。 

但在某些状况下,这种方法并不可行,由于这样一份合法资源名的列表过于庞大、难以跟踪。所以,程序员一般在这种状况下采用方案二,黑名单+白名单 双重过滤路径的办法。

 

方案二:在输入以前,黑名单会有选择地拒绝或避免潜在的危险字符(例以下面例子过滤了..字符)。同时建立一份白名单,容许其中的字符出如今资源名称中,且只接受彻底由这些被承认的字符组成的输入。

 图1.2.1:合法路径的白名单字符

 

 

图1.2.2:过滤路径的非法字符公共方法

相关文章
相关标签/搜索