File Disclosure: Spring 文件泄露(Spring框架)
Abstract
若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件) 或者查看受保护的目录下的任意文件。
Explanation
在以下情况下,会发生文件泄露:
- 数据从一个不可信赖的数据源进入程序。
- 数据用于动态地构造一个路径。
例 1: 下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径。
...
String returnURL = request.getParameter("returnURL");
return new ModelAndView(returnURL);
...
如果攻击者使用请求参数提供与某个敏感文件位置相匹配的 URL,他们将能够查看该文件。 例如,使用"http://www.yourcorp.com/webApp/logic?returnURL=WEB-INF/applicationContext.xml" 将能够查看该应用程序的 applicationContext.xml 文件。 一旦攻击者掌握了 applicationContext.xml 的信息,他们便能够定位和下载 applicationContext.xml 中引用的其他配置文件,甚至类文件或 jar 文件。 这样一来,攻击者将能够获得与应用程序有关的敏感信息,并以之为目标发动其他类型的攻击。
Recommendation
请不要要使用不可信赖的数据请求服务器端资源。 而应使用介于位置与路径之间的间接方法。 请不要使用:
<a href="http://www.yourcorp.com/webApp/logic?nextPage=WEB-INF/signup.jsp">New Customer</a>
而应使用:
<a href="http://www.yourcorp.com/webApp/logic?nextPage=newCustomer">New Customer</a>
服务器端逻辑应具有逻辑名称与服务器端路径的映射(以逻辑名称为键),在上例中,键 "newCustomer" 中存储的路径应为 "/WEB-INF/signup.jsp"。