
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;
}