RDF攻击=Reflected File Download
攻击者可以将某些输入内容植入到响应中,并且可以控制下载文件的文件名,然后让响应被下载到用户本地,然后用户启动了这些有问题的文件,形成了攻击。并且这些攻击可以在一定范围内传播。
主要的攻击方式来自于URI中关于以 “;” 间隔的部分参数中。
最新的攻击是用户将攻击内容放到了参数jsessionId的内容中。
近期SpringFramework又爆出了新的RDF攻击的漏洞,查看其修复源码。
SpringFramework在两次攻击中,其处理方式如下:
1、在url中,屏蔽所有;间隔以后的代码,具体见:
public class UrlPathHelper {
private String removeSemicolonContentInternal(String requestUri) {
int semicolonIndex = requestUri.indexOf(';');
while (semicolonIndex != -1) {
int slashIndex = requestUri.indexOf('/', semicolonIndex);
String start = requestUri.substring(0, semicolonIndex);
requestUri = (slashIndex != -1) ? start + requestUri.substring(slashIndex) : start;
semicolonIndex = requestUri.indexOf(';', semicolonIndex);
}
return requestUri;
}
}
第二次处理jsessionId的代码如下:
public abstract class WebUtils {
/**
* Parse the given string with matrix variables. An example string would look
* like this {@code "q1=a;q1=b;q2=a,b,c"}. The resulting map would contain
* keys {@code "q1"} and {@code "q2"} with values {@code ["a","b"]} and
* {@code ["a","b","c"]} respectively.
* @param matrixVariables the unparsed matrix variables string
* @return a map with matrix variable names and values (never {@code null})
* @since 3.2
*/
public static MultiValueMap<String, String> parseMatrixVariables(String matrixVariables) {
MultiValueMap<String, String> result = new LinkedMultiValueMap<>();
if (!StringUtils.hasText(matrixVariables)) {
return result;
}
StringTokenizer pairs = new StringTokenizer(matrixVariables, ";");
while (pairs.hasMoreTokens()) {
String pair = pairs.nextToken();
int index = pair.indexOf('=');
if (index != -1) {
String name = pair.substring(0, index);
if (name.equalsIgnoreCase("jsessionid")) {
continue;
}
String rawValue = pair.substring(index + 1);
for (String value : StringUtils.commaDelimitedListToStringArray(rawValue)) {
result.add(name, value);
}
}
else {
result.add(pair, "");
}
}
return result;
}
}
由代码可知,第一次防护,在整合URI中,屏蔽了每一段"/"之间的";"之后的代码。
第二次防护则去掉了jsessionId的参数和值。
因此如果需要解决此类问题,要么可以考虑在接入段进行参数区隔,将参数隔离出容器,不让容器获取异常参数,也可以在响应段将异常对象隔离。均可以达到阻断攻击的效果。
网友评论