Wins blog

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

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2017-12611] ApacheStruts2 Freemarker tags RCE
작성일 2017-09-12 조회 1706

 

※ 해당 내역은 9월 12일 시큐어캐스트에 공개한 보고서(AE17-0030)를 기반으로 외부 공개용으로 작성

 

 
개요
Apache Struts 2 에서 Freemarker 태그를 잘못된 적절하지 못한 구성으로 사용 할 때 발생 한다.
- Value 값에 Freemarker 표현 방식인 ${} 을 이용하여 표현하는 경우
 
원격 공격자는 조작 된 요청을 대상 서버에 보내 취약점을 악용 할 수 있다. 악용에 성공하면 침입자는 서버의 권한으로 임의의 코드를 실행할 수 있다.
 
본 보고서에서는 취약점에 대한 정보를 분석하고 고객에게 근본적인 대응방안과 자사의 장비를 활용하여 악성 트래픽에 대한 탐지/차단이 가능한 정규 패턴을 제공한다.
 
 
취약점 정보
▶ CVE-ID
CVE-2017-12611
 
▶ 취약점 종류
원격 코드 실행(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.10
 
 
원인 분석
FreeMarker 는 Apache Struts 및 기타 Java 기반 프로젝트에서 일반적으로 사용되는 템플릿 언어이다.
해당 언어를 통해 개발자는 사용자의 입력 값을 내부 변수에 바인딩이 가능해 진다. 사용자의 입력은 OGNL (Object Graph Navigation Language) 표현 식으로 전송 할 수 있다.
 
[그림 1. FreeMarker 도식화, 참조 : http://freemarker.org/]
 
Freemarker태그의 표현식을 Value 값으로 사용 되게 되면 원격에서 요청된 Value 값이 OGNL 표현 양식으로 전송 되면 내부 변수에 바인딩이 되고 실행 된다. (Rewrite 가 되도록 %{ 구문을 사용)
 
적절하지 못한 구성인Freemarker태그의 표현식을 Value 값으로 사용 되는 경우는 아래와 같다.
 
<@s.hidden name="redirectUri" value="${redirectUri}" />
<@s.hidden name="${redirectUri}"/>
 
위와 같은 방식으로 사용하는 경우 redirectUri 매개 변수에 일반적인 값에 대해서는 영향이 없다.
 
redirectUri 매개 변수에 Rewrite 가 되도록 %{ 구문을 사용하여 전송 하는 경우에 해당 구문이 실행되게 된다.
 
 Ex) redirectUri=21 → value=21
 Ex) redirectUri=%{21-17} → value=4
 
해당 취약점에 대한 POC는 Python 형태로 공개 되어 있다.
 
[그림 2. POC 내역]
 
실제 발생되는 POC의 패킷을 확인 해보면 Rewrite 구문과OGNL 표현식을 이용하여 원격 코드를 실행하는 것을 확인 할 수 있다.
 
* 패킷의 경우 보고서에서 확인 가능
 
 
대응방안
1. Apache 에서 해당 취약점에 대한 패치가 완료되었으므로, 최신 버전으로 패치를 권고 한다.
http://struts.apache.org/announce.html#a20170907
https://struts.apache.org/download.cgi#struts2513
 
2. 패치가 불가능 할 경우 아래와 같이 설정 한다.
2-1) Freemarker 미사용
 
2-2) getter 속성의 경우 읽기 속성을 이용하여 value값 초기화
 
 
WSEC 에서는 벤더사의 보안패치를 적용하여 원격 코드 실행이 발생하는 근본 위협 제거를 권장하며
POC 에 기반한 악성트래픽을 탐지/차단할 수 있는 정규 패턴을 제공한다.
 
 
대응방안
윈스의 자사 SNIPER 제품 군에서 해당 공격에 대해 아래의 패턴으로 대응 가능하다.
 
ㆍIPS(패턴블럭) : [3591] Apache Struts2 SaveGangster RCE   
                       [3592] Apache Struts2 SaveGangster RCE.A 
                       [3593] Apache Struts2 SaveGangster RCE.B 
                       [3594] Apache Struts2 SaveGangster RCE.C 
 
ㆍUTM(exploit) : [805374161] Apache Struts2 SaveGangster RCE  
                      [805374162] Apache Struts2 SaveGangster RCE.A
                      [805374163] Apache Struts2 SaveGangster RCE.B
                      [805374164] Apache Struts2 SaveGangster RCE.C
 
ㆍATPX(취약점) : [2844] Apache Struts2 SaveGangster RCE  
                       [2843] Apache Struts2 SaveGangster RCE.A
                       [2842] Apache Struts2 SaveGangster RCE.B
                       [2841] Apache Struts2 SaveGangster RCE.C
 
 
참고
http://freemarker.org/
https://github.com/brianwrf/S2-053-CVE-2017-12611/blob/master/exploit.py
https://cwiki.apache.org/confluence/display/WW/S2-053
https://mp.weixin.qq.com/s/4CiKgVn7Y-hWUKRjgECsuA
 
첨부파일 첨부파일이 없습니다.
태그 Freemarker   CVE-2017-12611  OGNL