Tomcat의 취약점에 대해서 조사해봅시다


Tomcat 취약점

Tomcat은 대부분의 사람이 아는것처럼 웹서버를 돌릴 때 사용된다.

아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너만 있는 웹 애플리케이션 서버라고 한다.

[ 고양이 디자인 무엇;;;]



일단 대표적인 Tomcat 취약점에 대해서 설명해보겠다.


먼저 tomcat에는 서블릿 클래스를 등록하는 web.xml이 존재한다. 해당 문서에는 다음과 같이 PUT과 DELETE 메소드에 대해서의 거절유무를 설정하는


'readonly' 속성이 존재한다. 해당부분이 'false'로 되어있다면 취약점이 발생한다. (거절하시겠습니까 ? 아니요 = put,delete메소드 찬성!)



default는 true인데 개발자가 false로 변경하고 건들지 않았을수도 있음.


아무튼 간에 이후에 공격자는 위조된 요청을 보내서 PUT방식으로 업로드가 가능해짐


여기서 jsp파일을 업로드를 했을 때 확장자 필터링이 없을 시에는 당연히 PUT 요청이가서 취약점이 발생할 것.


하지만 대부분 확장자 필터링을 거치게되는데 어떠한 필터링 검증로직이냐에 따라서 다양한 우회 기법이 있을 수 있음.


기본적으로 공백이나 '\'같은 문자들은 치환되어 있는데 여기서 jsp파일 확장자 필터링을 우회하는 취약점이


CVE-2017-12615 이다.


이렇게 취약점이 세분화가 되는거 같은 느낌적인 느낌

12615 같은 경우에는 NTFS file stream개념을 이용하여 업로드하는 취약점이다 (띠용;;)

NTFS 볼륨 파일의 구조
-> <파일이름> : <스트림 이름> : <스트림 유형>
ex) "test.jsp"는 "test.jsp :: $DATA
이런식으로 서버에 원격 코드를 실행할 수 있는 RCE 취약점이 존재했었다.

CVE-2017-12616은 가상 디렉토리를 이용해 CVE-2017-12615와 같이 이용하는 취약점 공격이다
tomcat의 context.xml에 다음과 같이 추가한다.

<Resources className="org.apache.naming.resouces.VirtualDirContext" extraResourcePaths="/temp=C:\tomcat\webapps\ROOT" />

이렇게 추가하면 <URL>/temp로 접속하게되면 index.jsp에 접속한 것과 똑같은 효과를 가지게 된다.
여기에 12615를 이용하여 다음과 같이 이용한다.

ex) <URL>/temp/index.jsp::$DATA

이렇게된다면 소스코드 열람이 가능해지게 되는것이다. [출처]

CVE-12617은 12515와 같이 readonly=false환경에서 jsp확장자 검증의 취약한 로직을 이용한다.
확장자 검사를 우회할 수 있는 패턴인 '/'를 붙여 요청하면 정상적으로 파일이 업로드 되는 취약점이다.

=> PUT 방식 요청에 정상적인 업로드 파일을 변조하면 가능


'보안' 카테고리의 다른 글

Tomcat,JCE 취약점 ppt  (0) 2019.03.29
[보안] CPU 범용 레지스터  (0) 2019.03.27
[보안] 티스토리 블로그 취약점 문의  (0) 2019.03.25
[보안] 리버싱 입문기  (0) 2019.03.25
이번 주 해야할 것  (0) 2019.03.25

+ Recent posts