Wins blog

글로벌 정보보안 파트너! Global Security  No.1 윈스는 국가대표 정보보안 기업에서 글로벌 강소기업으로 도약합니다.

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2016-8735] Apache Tomcat Remote CodeExecution
작성일 2016-12-12 조회 1126

1. 개요

아파치 재단에서 Apache Tomcat JMX에서 발생하는 Remote Code Execution 취약점을 발표하였다.

CVE-2016-3427에 대한 패치를 JmxRemoteLifecycleListener에 적용하지 않아서 발생 되었다.

JMX : Java Management Extensions 자바 어플리케이션의 모니터링과 관리 기능을 제공

CVE-2016-3427 : Jmx에서 역 직렬화 할때 해제에 대한 제한이 없어 발생

공격자는 이 취약점을 이용하여 원격에서 자신이 원하는 코드를 실행 시킬 수 있다.

취약버전 : Apache Tomcat 9.0.0.M1 ~ 9.0.0.M11, Apache Tomcat 8.5.0 ~ 8.5.6

Apache Tomcat 8.0.0.RC1 ~ 8.0.38, Apache Tomcat 7.0.0 ~ 7.0.72, Apache Tomcat 6.0.0 ~ 6.0.47

 

2. 패치 내역 확인

JmxRemoteLifecycleListener.java 파일에서, RMI server listener 구성 시 자격증명에 대한 유형을 정의하였다.

 

[그림1. JmxRemoteLifecycleListener.java 패치 내역] 

 

3. Exploit 확인

취약 버전으로 확인 된 apache-tomcat-8.0.36 을 이용하여 Exploit을 진행하였다.

1) 공개된 POC(ysoserial)을 이용하였다.

 

[그림2. 공개된 POC]

 

2) 해당 Exploit은 여러 Java libraries 에서 발생하는 안전하지 않은 직렬화에 대한 공격 도구이다.

2-1) Exploit은 RMIRegistryExploit.java 를 사용하였다.

 

[그림3. RMIRegistryExploit.java 내역]

 

2-2) Payload는 Groovy1.java를 사용하였다.

 

[그림4. Groovy1.java 내역]

 

3) Exploit이 성공하여 Tomcat 서버에서 Command 명령어로 전달한 calc.exe 가 실행되었다.

 

[그림5. Exploit 성공 내역]

 

4. 정리

본 게시글에서 Apache Tomcat JMX에서 발생하는 Remote Code Execution 취약점에 대해 알아보았다.

일반적으로 JMX를 사용하는 경우가 많지 않고, 해당 포트를 외부에 Open 하여 사용하는 경우는 거의 없기 때문에 공격위험이 높은 취약점으로 보기는 어렵다.

하지만 취약한 상태로 사용중인 서버라면 다양한 공격에 이용 될 수 있는 만큼 Tomcat 서버 패치나 방화벽에서 접근제한을 이용하여 대응하여야 한다.

현재 취약점의 경우 패치가 완료되었으며, Tomcat을 최신버전의 상태로 유지 할 수 있도록 해야 한다.

 

5. 대응 방안

Sniper IPS에서는 아래와 같은 패턴으로 대응이 가능하다.

[IPS 패턴 블럭] : 3351, Apache Tomcat Remote Code Execution(CVE-2016-8735)
[IPS 패턴 블럭] : 3352, Apache Tomcat Remote Code Execution.A(CVE-2016-8735)

 

6. 참고

http://www.mottoin.com/93100.html

https://github.com/frohoff/ysoserial

http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/JmxRemoteLifecycleListener.java?r1=1767644&r2=1767643&pathrev=1767644
 

첨부파일 첨부파일이 없습니다.
태그 CVE-2016-8735  Apache Tomcat  Apache Tomcat  CVE-2016-3427  JmxRemoteLifecycleListener.java