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

0x00 漏洞简述​

Apache Shiro의 1.5.3 이전에 Spring Dynamic Controller와 함께 Apache Shiro를 사용할 때 신중하게 편집 된 요청은 인증을 우회 할 수 있습니다. 직접 액세스/Shiro/Admin/Page에 액세스하면 로그인으로 302 점프를 반환합니다. Access/;/Shiro/Admin/Page는 Shiro 권한 검증 및 1.5.3 이전에/Admin Route

0x01 漏洞影响​

Apache Shiro에서 Shiro 권한 확인 및 액세스 정보를 직접 우회 할 수 있습니다. Shiro 인증 만 스프링 프레임 워크에서 사용됩니다. 1. 프로젝트를 로컬 https://github.com/l3yx/springboot-shiro2로 다운로드하십시오. 아이디어 편집기를 통해 전쟁 패키지에 컴파일 한 다음 Tomcat 아래의 WebApps 디렉토리에 넣고 실행하십시오. 전쟁 패키지는 여기에 편집되었습니다 : https://github.com/backlion/demo/blob/master/shiro.war

0x02 环境搭建​

1. 권한 구성은 다음과 같습니다.
shirofilterfactorybean shirofilterfactorybean () {
shirofilterfactorybean bean=새로운 shirofilterfactorybean ();
bean.setsecurityManager (securityManager ());
bean.setLoginUrl ( '/login');
bean.setsuccessurl ( '/index');
bean.setunauthorizedUrl ( '/UnauthorizedUrl');
맵 스트링, 문자열지도=새로운 LinkedHashMap ();
map.put ( '/dologin', 'anon');
map.put ( '/admin/*', 'authc');
bean.setfilterchainDefinitionMap (map);
귀환 콩;
}
---
@GetMapping ( '/admin/page')
public String admin () {
'관리자 페이지'를 반환합니다.
} 2.Maven 패키지 프로젝트는 Shiro.war이며 Tomcat에 배포되었습니다. 이 취약점은 성공적으로 이용되었습니다. 응용 프로그램이 루트 디렉토리에 루트 디렉토리를 배포 할 수없는 두 가지 조건이 있습니다. 루트 디렉토리 인 경우 Context-Path가 비어 있고 CVE-2020-1957의 패치에 의해 URL이 형식화됩니다. Shiro 버전이 1.5.2보다 작 으면이 조건이 필요하지 않습니다. 스프링 컨트롤러 3에는 다른 권한 검증 코드가 없습니다. 그러나/;/shiro/admin/page에 액세스하는 경우 Shiro의 권한 검증을 직접 우회하고 Shiro의 권한 검증이 URL 경기를 판단함으로써 Shiro의 권한 검증이 수행되기 때문에/Admin Route
1049983-20201129040357781-2061064872.png

0x03 漏洞复现​

의 정보에 액세스 할 수 있습니다. Shiro가 얻은 URL을 찾을 수 있고 Web Fronworks가 발생한 상황이 발생하는 상황이 발생할 수 있다면 URL 경기를 판단 할 수 있습니다. Shiro의 URL 획득 및 일치는 org.apache.shiro.web.filter.mgt.pathmatchingfilterchainresolver#getchain에서 얻습니다. getPathWithInapplication 함수를 통해 얻은 경로는/
1049983-20201129040358346-1396394566.jpg
org.apache.shiro.web.util.webutils#getPathWithInapplication
1049983-20201129040358965-2085604693.jpg
의 처리 논리를 따르십시오.
1049983-20201129040358965-2085604693.jpg
org.apache.shiro.web.util.webutils#getRequesturi gets/
1049983-20201129040359608-834110665.jpg
여기서 getContextPath () getPathInfo () getPathInfo () 및 splice it get/;/test/page를 볼 수 있습니다. 통과 후, DecodeandcleanUristring은 /, org.apache.shiro.web.util.webutils#decodeandcleanUristring decodendCleanUristring에서 URL Truncation이 59의 ASCII와 함께 캐릭터를 기반으로 수행 될 것입니다. 봄에 들어갑니다. 스프링 처리 URL 기능은 다음과 같습니다. org.springframework.web.util.urlpathhelper#getPathWithInservletmapping
1049983-20201129040400772-1364188888.jpg
1049983-20201129040401248-1065967938.png
appathinpplication 프로세스에서 컨텍스트-경로 및 경로가 정확하게 얻을 수 있습니다. 마지막으로, GetPathWithInservletmapping 함수가 형식화 된 후 최종 경로는 /admin /page이므로 정상적으로 페이지에 액세스 할 수 있습니다. 따라서
1049983-20201129040401715-1588254651.png
따라서 URL이 Tomcat에 들어가면 Tomcat Judges/; Shiro/Admin/Page는 Shiro 응용 프로그램의/admin/page 경로이며 Shiro 응용 프로그램의/admin/page 경로입니다. 시로에 들어갈 때 /로 간주됩니다. 스프링에 들어가면 테스트 응용 프로그램에서 /admin /page 경로로 올바르게 처리되며 결국 Shiro의 권한을 우회하게됩니다.

0x04 漏洞分析​

은 최신 버전으로 업그레이드되었으며 공무원은 새 버전의 취약점을 수정했습니다.

0x05 漏洞修复​

https://l3yx.github.io/2020/06/30/shiro -%E6%9d%83%E99990%90%E7%BB%95%E8%BF%87%BC%8F%E6%B4%9E-CVE-2020-11989/
 
뒤로
상단