Apache Struts2에서 취약점을 이용하여 원격코드 실행이 가능한 CVE-2016-3081(S02-32)와 CVE-2016-3082(S02-31)취약점이 발견되었다.
CVE-2016-3082(S02-31)은 XSLTResult 함수를 통해 XSL 스타일시트에서 악성 파라미터 값을 요청하여 원격코드 실행이 가능한 취약점이고, CVE-2016-3081(S02-32)은 DMI(Dynamic Method Invocation)를 사용하여 공격자가 원격으로 임의의 코드를 실행할 수 있는 취약점으로 DMI기능이 활성화 된 경우에만 영향을 받는다.
2016년 4월 28일 해당 취약점에 대한 보안패치가 제공된 상태이나 공격방식이 쉽고 공격을 받았을 때 시스템에 미치는 영향도가 크기 때문에 이번 호에서는 CVE-2016-3081취약점에 대해서 분석해 보았다.
2. 취약점 요약
CVE
세부 내용
위험도
CVE-2016-3081 (S02-32)
DMI기능을 통해 임의코드를 서버사이드에서 실행할 수 있는 취약점
High
CVE-2016-3082 (S01-31)
XSLTResult 함수를 통해 XSL 스타일시트에서 악성 파라미터값을 요청하여 원격코드실행이 가능한 취약점
Medium
3. 영향 받는 소프트웨어
CVE
영향 받는 버전
보안 패치 버전
CVE-2016-3081
Struts 2.3.20 - Struts 2.3.28 (2.3.20.3 및 2.3.24.3 제외)
Struts 2.3.20.3 Struts 2.3.28.1 Struts 2.3.28.1
CVE-2016-3082
Struts 2.0.0 - Struts 2.3.28 (2.3.20.3 및 2.3.24.3 제외)
4. 취약점 원리
공격이 수행되려면 기본적으로 Struts2 설정 파일(struts.xml)에서 “struts.enable.DynamicMethodInvocation”의 값이 “True”로 설정되어야 한다.
Apache Struts2에서 문제가 된 DMI(Dynamic Method Invocation은 WebWork에 내장된 기능 중 execute() 메소드 대신에 다른 메소드를 호출하는 기능을 가진 “!”문자열을 이용하게 한다.
DMI는 기본적으로 POJO Action이 사용되는 경우 보안문제를 야기시킬 수 있어 DMI기능을 비활성화 시켰으나 이번에 보고된 취약점을 이용하면 Method를 통해 넘긴 값이 DMI를 거쳐 처리되면서 Java 구문으로 흐름을 변경하여 공격자가 원하는 공격명령을 수행할 수 있도록 한다.
수신 된 매개 변수는 ActionMappping의 method 속성에 저장되고 DefaultActionProxyFactory에서 ActionMappping의 method 속성이 ActionProxy의 method 속성으로 설정되는데, 이 때 escapeEcmaScript, escapeHtml4를 통해 필터링하고 있지만 POC 코드를 통해 통과할 수 있다.
그리고 DefaultActionInvocation.java에서 ActionProxy의 method를 추출하고 ognlUtil.getValue()를 통해 OGNL 표현식을 실행한다.
OGNL을 통과하여 표현하는 방식은 ognl.ognlcontext의 DEFAULT_MEMBER_ACCESS 속성을 통하여도 얻을 수 있으며, 얻은 값을 _memberAccess 속성에 덮을 수 있고, 이것은 SecurityMemberAccess를 우회 할 수 있다.
DMI는 기본적으로 2.3.15.2 이후에는 비활성화 되어 있는 상태이나 2.3.20 ~ 2.3.28(2.3.20.3, 2.3.24.3 제외)에서는 취약점의 영향이 존재하기 때문에 업데이트를 권고한다.
'(주)이글루시큐리티'는 (이하 '회사'는) 고객의 개인정보를 중요시하며, "정보통신망 이용촉진 및 정보보호 등에 관한 법률"을 준수하고 있습니다.
회사는 개인정보취급방침을 통하여 고객이 제공하는 개인정보가 어떠한 용도와 방식으로 이용되고 있으며, 개인정보보호를 위해 어떠한 조치가 취해지고 있는지 알려드립니다.
본 방침은 2016년 9월 23일부터 시행됩니다.
수집항목 : 이름, 회사명, 이메일, 연락처
개인정보의 수집 및 이용목적
회사는 수집한 개인정보를 다음의 목적을 위해 활용합니다.
- DEMO 요청 : 사용자와의 신원확인 및 처리사항 전달
개인정보의 보유 및 이용기간
회사는 개인정보 수집 및 이용목적이 달성된 후에는 예외 없이 해당 정보를 바로 파기합니다.
개인정보의 파기
회사는 원칙적으로 개인정보 수집 및 이용목적이 달성된 후에는 해당 정보를 바로 파기합니다. 방법은 다음과 같습니다.
- 파기방법 : 전자적 파일형태로 저장된 개인정보는 기록을 재생할 수 없는 기술적 방법을 사용하여 삭제합니다.
개인정보 제공
회사는 이용자의 개인정보를 원칙적으로 외부에 제공하지 않습니다. 다만, 아래의 경우에는 예외로 합니다.
- 고객이 사전에 동의한 경우
- 법령의 규정에 따르거나, 수사 목적으로 법령에 정해진 절차와 방법에 따라 수사기관의 요구가 있는 경우
수집한 개인정보의 위탁
회사는 고객님의 동의없이 고객님의 정보를 외부 업체에 위탁하지 않습니다.
이용자 및 법정대리인의 권리와 그 행사방법
이용자 및 법정 대리인은 언제든지 등록된 자신 혹은 당해 만 14세 미만 아동의 개인정보를 조회하거나 수정할 수 있으며 가입 해지를 요청할 수도 있습니다. 이용자 혹은 만 14세 미만 아동의 개인정보 조회ㆍ수정을 위해서는 ‘개인정보변경’(또는 ‘회원정보수정’ 등)을 가입해 지(동의철회)를 위해서는 “회원탈퇴”를 클릭하여 본인 확인 절차를 거치신 후 직접 열람, 정정 또는 탈퇴할 수 있습니다. 혹은 개인정보관리책임자에게 서면, 전화 또는 이메일로 연락하시면 바로 조치하겠습니다. 귀하가 개인정보의 오류에 대한 정정을 요청하신 경우에는 정정을 완료하기 전까지 당해 개인정보를 이용 또는 제공하지 않습니다. 또한, 잘못된 개인정보를 제3자에게 이미 제공한 경우에는 정정 처리결과를 제3자에게 바로 통지하여 정정이 이루어지도록 하겠습니다. 이용자 혹은 법정 대리인의 요청으로 해지 또는 삭제된 개인정보는 “회사가 수집하는 개인정보의 보유 및 이용 기간”에 명시된 바에 따라 처리하고 그 외의 용도로 열람 또는 이용할 수 없도록 처리하고 있습니다.
개인정보 자동수집 장치의 설치, 운영 및 그 거부에 관한 사항
쿠키 등 인터넷 서비스 이용 시 자동 생성되는 개인정보를 수집하는 장치를 운영하지 않습니다.
개인정보에 관한 민원서비스
회사는 고객의 개인정보를 보호하고 개인정보와 관련한 불만을 처리하기 위하여 아래와 같이 관련 부서 및 개인정보보호책임자를 지정하고 있습니다.
고지의 의무
정부의 정책 또는 보안기술의 변경, 개인정보 위탁업체 등의 변경에 따라 내용의 추가ㆍ삭제 및 수정이 있을 시에는 개정 전에 홈페이지 “소식” 게시판을 통해 고지합니다.
재화나 서비스의 홍보 및 판매 권유, 기타 이와 관련된 목적으로 개인정보를 이용하여 정보주체에게 연락할 수 있습니다.
고객서비스 담당부서 : 마케팅기획팀
전화번호 : 02-6715-2372
이메일 : mkt@igloosec.com
개인정보보호책임자 성명 : 이정원 (마케팅기획팀 팀장)
전화번호 : 02-6715-2372
이메일 : mkt@igloosec.com
귀하께서는 회사의 서비스를 이용하시며 발생하는 모든 개인정보보호 관련 민원을 개인정보관리책임자 혹은 담당 부서로 신고하실 수 있습니다.
회사는 이용자들의 신고사항에 대해 신속하게 충분한 답변을 드릴 것입니다.
기타 개인정보침해에 대한 신고나 상담이 필요하신 경우에는 아래 기관에 문의하시기 바랍니다.
원하시는 계정으로 로그인 후 댓글을 남겨 주세요.