Wins blog

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

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보(추가)[CVE-2017-9805] Apache Struts2 REST 플러그인 취약점
작성일 2017-09-14 조회 1971
※ 해당 내역은 9월 14일 시큐어캐스트에 공개한 보고서(AE17-0031)를 기반으로 외부 공개용으로 작성
 
 
개요
Apache Struts 2 REST Plugin 의 XStreamHandler.toObject() 함수에서 역 직렬화 취약점이 존재한다. 이 취약점은 XStreamHandler 가 신뢰할 수 없는 데이터를 역 직렬화하여 발생한다.
 
원격 공격자는 조작 된 요청을 대상 서버에 보내 취약점을 악용 할 수 있다. 악용에 성공하면 침입자는 서버의 권한으로 임의의 코드를 실행할 수 있다.
 
본 보고서에서는 취약점에 대한 정보를 분석하고 고객에게 근본적인 대응방안과 자사의 장비를 활용하여 악성 트래픽에 대한 탐지/차단이 가능한 정규 패턴을 제공한다.
 
 
취약점 정보
▶ CVE-ID
CVE-2017-9805
 
▶ 취약점 종류
원격 코드 실행(Remote Code Execution)
 
▶ CVSS Score
8.1 (CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
 
▶ 영향 받는 제품
Apache Software Foundation Struts 2.1.2 - 2.3.33
Apache Software Foundation Struts 2.5 - 2.5.12
 
 
원인 분석
Apache Struts는 RESTful 리소스 처리를 지원하는 REST Plugin 을 제공 한다.
 
REST Plugin 은 메소드에 URI 를 매핑하는 기능과  다양한 형식(XHTML, XML, JSON, YAML) 의 데이터를 처리 할 수 있게 하는데, PUT 또는 POST 요청에서 XStream 이라는 타사 라이브러리를 사용하면서 취약점이 발생한다.
- Content-Type을 text/xml 또는 application/xml로 설정된 요청을 받으면 XStream API를 호출하여 데이터를 역 직렬화하여 XML에서 Java 객체를 빌드
 
공격 상황을 종합해서 확인하면 아래와 같다.
 
1. Apache Struts의 REST 플러그인에 안전하지 않은 역 직렬화 취약점이 존재
2. Struts 웹 애플리케이션이 REST 플러그인을 사용할 때, 플러그인은 RESTful URI 중 하나에서 수신 된 XML 데이터를 역 직렬화하려고 시도
3. ContentTypeInterceptor.intercept() 메서드는 XStreamHandler 클래스의 toObject() 메서드를 호출
4. 이 메소드는 먼저 XStream 객체를 생성 한 다음 XML 객체를 Java 객체로 역 직렬화 하기 위해 XML 객체에서 fromXML() 을 호출
5. 여러 개의 클래스와 메소드 호출을 함께 연결하는 XML 문서를 생성하여 역 직렬화 중에 임의의 코드가 실행되도록 시도
6. 원격의 인증되지 않은 공격자는 특수하게 조작 및 직렬화 된 개체를 포함하는 HTTP 요청을 XStream 호환 XML 문서로 대상 서버에 보내 취약점을 악용
7. 성공적인 악용으로 인해 서버의 권한으로 임의 코드가 실행
 
소스코드 내역 : src/plugins/rest/src/main/java/org/apache/struts2/rest/handler/XStreamHandler.java
 
[그림 1. 소스코드 확인 내역]
 
 
해당 취약점에 대한 POC는 Metasploit 모듈과 Python 형태로 공개 되어 있다.
 
[그림 2. POC 내역]
 
실제 발생되는 패킷을 확인 해 보면 XStream API 호출을 위해 Content-Type 이 application/xml 로 설정 되어 있으며, XStream 기반의 역 직렬화를 위해 4개의 Java 클래스를 사용한 것을 확인 할 수 있다.
 
[그림 3. Java 클래스 내역]
 
 
 
* 패킷의 경우 보고서에서 확인 가능
 
 
대응방안
1. Apache 에서 해당 취약점에 대한 패치가 완료되었으므로, 최신 버전으로 패치를 권고 한다.
http://struts.apache.org/announce.html#a20170907
https://struts.apache.org/download.cgi#struts2513
 
2. 패치가 불가능 할 경우 아래와 같이 설정 한다.
2-1) Struts REST 플러그인을 사용하지 않을경우 삭제
 
2-2) configuration 파일에 다음 코드를 추가하여 플러그인을 서버 일반 페이지나 JSON으로 제한
<constant name="struts.action.extension" value="xhtml,,json" />
 
WSEC 에서는 벤더사의 보안패치를 적용하여 원격 코드 실행이 발생하는 근본 위협 제거를 권장하며
POC 에 기반한 악성트래픽을 탐지/차단할 수 있는 정규 패턴을 제공한다.
 
 
대응방안
윈스의 자사 SNIPER 제품 군에서 해당 공격에 대해 아래의 패턴으로 대응 가능하다.
 
ㆍIPS(패턴블럭) : [3676] Apache Struts2 XStreamHandler RCE
                       [3687] Apache Struts2 XStreamHandler RCE.A
                       [3688] Apache Struts2 XStreamHandler RCE.B
                       [3689] Apache Struts2 XStreamHandler RCE.C
                       [3690] Apache Struts2 XStreamHandler RCE.D
                       [3691] Apache Struts2 XStreamHandler RCE.E
                       [3692] Apache Struts2 XStreamHandler RCE.F
                       [3693] Apache Struts2 XStreamHandler RCE.G
                       [3694] Apache Struts2 XStreamHandler RCE.H
                       [3695] Apache Struts2 XStreamHandler RCE.I
 
ㆍUTM(exploit) : [805374208] Apache Struts2 XStreamHandler RCE
                       [805374214] Apache Struts2 XStreamHandler RCE.A
                       [805374215] Apache Struts2 XStreamHandler RCE.B
                       [805374216] Apache Struts2 XStreamHandler RCE.C
                       [805374217] Apache Struts2 XStreamHandler RCE.D
                       [805374218] Apache Struts2 XStreamHandler RCE.E
 
ㆍATPX(취약점) : [2866] Apache Struts2 XStreamHandler RCE
                       [2879] Apache Struts2 XStreamHandler RCE.A
                       [2880] Apache Struts2 XStreamHandler RCE.B
                       [2881] Apache Struts2 XStreamHandler RCE.C
                       [2882] Apache Struts2 XStreamHandler RCE.D
                       [2883] Apache Struts2 XStreamHandler RCE.E
                       [2884] Apache Struts2 XStreamHandler RCE.F
                       [2885] Apache Struts2 XStreamHandler RCE.G
                       [2886] Apache Struts2 XStreamHandler RCE.H
                       [2887] Apache Struts2 XStreamHandler RCE.I
 
참고
https://github.com/rapid7/metasploit-framework/pull/8924/commits
https://github.com/mazen160/struts-pwn_CVE-2017-9805
https://github.com/mbechler/marshalsec/tree/master/src/main/java/marshalsec
https://struts.apache.org/docs/s2-052.html
 
첨부파일 첨부파일이 없습니다.
태그 CVE-2017-9805  XStreamHandler   toObject()  REST 플러그인