제목 : Apache Shiro 인증 우회 취약성 재발 (CVE-2020-13933)

0x00 漏洞描述​

Apache Shiro는 인증, 인증, 암호 및 세션 관리를 수행하는 강력하고 사용하기 쉬운 Java 보안 프레임 워크입니다. Apache Shiro 인증 우회 취약성 CVE-2020-11989의 이전 수정 패치에 결함이있었습니다. 1.5.3과 그 이전에는 Shiro가 URL을 처리 할 때 봄과 여전히 차이가 있기 때문에 여전히 신원 확인 우회 취약성이 있습니다. 인증 요청 처리의 오류로 인해 원격 공격자는 특별히 제작 된 HTTP 요청을 보내고 인증 프로세스를 우회하고 응용 프로그램에 대한 무단 액세스를 얻을 수 있습니다.

0x01 漏洞影响​

Apache Shiro 1.6.0

0x02 环境搭建​

1. 프로젝트를 로컬 https://github.com/l3yx/springboot-shiro2로 다운로드하십시오. pom.xml에서 1.5.2를 1.5.3으로 바꾸고/admin/page와 함께/admin/page와 함께 src/main/java/syclover/srpingbootshirologintroller에서 배경 검증을 교체하십시오. 아이디어 편집기를 재건하고 실행하십시오. 컴파일 된 전쟁 패키지를 Tomcat 아래의 Webapps 디렉토리에 넣고 실행하십시오. https://github.com/backlion/demo/blob/master/srpingboot-shiro-0.1-snapshot.war

0x03 代码说明​

1. shiroconfig.java (pringboot-shiro-master \ src \ main \ java \ org \ syclover \ srpingbootshiro \ shiroconfig.java) 권한 구성. /admin/* 리소스를 요청할 때 302는 신분증 인증에 대한 로그인 페이지로 점프합니다. 리소스 명명 된 이름 (ID 인증 트리거링)
1049983-20201129040428999-1101944912.png

0x04 漏洞复现​

1. 요청 경로에 리소스 이름이 지정되지 않은 경우 인증이 트리거되지 않으며 리소스가 반환되지 않습니다.
qhhe0out52215974.png
http://192.168.1.9:8080/srpingboot-shiro-0.0.1-snapshot/admin
1049983-20201129040429828-1775851797.png
2. 요청 경로에서 리소스 이름을 지정할 때 302는 인증 페이지로 점프합니다. 특정 POC 요청을 구축 할 때 지정된 리소스를 구축 할 때 인증이 트리거되지 않고 권한이 우회되어 ( %3B로 우회) http://192.168.1.9:8080/SRPingBOOT-SHIRO-0.0.1-SNAPSHOT/ADMIR/;PAGE
1049983-20201129040431055-942501932.png
010-6509

0x05 漏洞分析​

문제가 org.apache.shiro.web.util.webutils에 있음을 알 수 있습니다. 여기에 중단 점을 놓은 다음 디버깅하십시오.
1049983-20201129040431878-1254629939.png
은 URL을 얻기 위해 GetServletPath 및 GetPathInfo를 사용하도록 업데이트되었습니다. 그러나 실제 취약점은 여기에 없습니다.
1049983-20201129040432474-1895311208.png
스 플린트 후 URL이 괜찮다는 것을 알 수 있습니다. 세미콜론 가공
1049983-20201129040433327-937398851.png
를 제거한 후 /admin /* 만 유지되는 것을 볼 수 있습니다. 테스트를 위해 컨트롤러에/admin/* 경로를 추가 할 수 있습니다. @getMapping ( '/admin*').
공개 문자열 admin2 () {
'로그인, 관리자'를 반환합니다.
} http://192.168.1.9:8080/srpingboot-shiro-0.0.1-snapshot/admin/*
1049983-20201129040433923-1159712392.png
1049983-20201129040434507-452562273.png
액세스를 확인할 권한이 없습니다. 물론, 나중에 매개 변수를 추가하면 권한이 필요합니다.
후속 조치를 제거합니다
1049983-20201129040435006-1073404813.png

마찬가지로, 이후의 내용; 다음을 포함하여 잘린다;
스프링이 어떻게 처리하는지 봅시다
1049983-20201129040435555-539162384.png

Spring은 문제가 없습니다. 귀하가 얻는 것은 /admin /; page입니다. 그런 다음 /admin /{name} 경로와 일치하는 전체 문자열로 페이지를 사용하여 권한을 우선합니다.
URL을 처리하는 방법을 봅시다
`org.springframework.web.util.urlpathhelper#decodeandcleanuristring
1049983-20201129040436147-1903544345.png

제거 세미 콜론 턴트 # 제거; 그리고 나중에
decoderequestString # urldecode 디코딩
getSanitizedPath # 대체 ////shiro가 반대입니다.
//라인 111
public static string getPathWithInApplication (httpservletRequest 요청) {
return normalize (removeSemicolon (getServletPath (요청) + getPathInfo (요청)));
} pring-web-5.2.5.release.jar //org.springframework.web.util.urlpathhelper.java
//라인 459
개인 문자열 decodeandcleanUristring (httpservletrequest 요청, String uri) {
uri=제거 세미 콜론 턴 (URI);
uri=decoderequestString (요청, uri);
uri=getSanitizedPath (uri);
반환 URI;
}

0x06 漏洞修复​

현재, 공식 취약성 수정 버전이 출시되었고, 업데이트 된 Apache Shiro=1.6.0

0x07 参考文献​

 
뒤로
상단