CVE-2017-5638: Apache Struts 2 취약점으로 인한 원격 코드 실행 발견

게시일: 2017-03-09 l 작성자: Trend Micro

Apache Struts는 Java 웹 애플리케이션을 작성하는데 사용되는 무료 오프소스 프레임워크입니다. Apache Struts에서 보고된 과거의 여러 가지 RCE (Remote Control Execution. 원격 코드 실행) 취약점을 조사한 결과 공격자는 대부분 OGNL (Object Graph Navigation Language) expression을 사용함을 확인했습니다. OGNL을 사용하면 Apache Struts가 대부분의 프로세스에서 원격 코드를 사용하기 때문에 원격으로 임의의 코드를 쉽게 실행할 수 있습니다.

연구원이 OGNL을 사용하여 CVE-2017-5638로 지정된 Apache Struts 2에 새로운 원격 코드 실행 취약점을 발견하였습니다. 익스플로잇 공격은 이미 퍼져있으며, 트렌드마이크로의 연구 및 모니터링에 따르면 해당 취약점을 이용한 공격은 이미 발견되었습니다.

공격 시나리오

공격자가 Jakarta 기반 플러그인을 사용하여 업로드 요청을 처리하는 취약한 서버에 파일을 업로드하기 위해 조작된 요청을 보내는 경우 해당 취약점을 이용할 수 있습니다.

그런 다음 공격자는 Content-Type 헤더에 악성코드를 전송하여 취약한 서버에서 명령을 실행할 수 있습니다. 공격 시나리오를 보여주는 개념 증명 (Proof of concept)은 현재 공개된 상태입니다.


취약점 분석

트렌드마이크로는 취약점을 더 잘 이해하기 위해 패치를 자세히 살펴본 결과, 공급업체가 FileUploadInterceptor.java에서 “LocalizedTextUtil” 클래스의 사용을 제거했음을 발견했습니다. 이는 멀티 파트 HTTP 요청을 사용하여 파일 업로드가 성공적이지 않은 경우 사용자에게 오류 메시지를 제공하기 위한 것입니다.



그림 1. 패치 diff 코드


사용자에게 적절한 오류 메시지를 제공하기 위해 LocalizedTextUtil에 정의된 “findtext” 함수를 사용하여 오류 키 메시지를 구문 분석하고 이에 정의된 오류 메시지는 아래와 같습니다.


그림 2. Apache Struts의 파일 업로드 기능에서 정의된 오류 메시지


Findtext의 정의는 아래와 같습니다:

public static String findText(Class aClass, String aTextName,
Locale locale, String defaultMessage, Object[] args )


이 함수는 변수 “aTextName:에 전달된 주어진 오류 키에 대해 로컬로 저장된 텍스트 메시지를 찾습니다. 매개 변수는 아래와 같습니다:

aClass : FileUploadInterceptor 는 오류 클래스를 전달하여 오류 메시지 검색의 시작점으로 사용합니다.

aTextName : 오류 메시지를 찾는 데 사용 된 오류 키

Locale : 각 오류 키에 대해 메시지가 저장되는 로케일

defaultMessage : 자원 번들로 텍스트 메세지가 발견되지 않는 경우에 돌려 주어지는 메세지

args : 오류 인수의 자원 번들

메시지가 발견되면 OGNL expression으로 간주되어 평가됩니다. 따라서 공격자가 “multipart / form-data”로 Content-Type 헤더에서 OGNL expression을 전달하면 평가되어 공격자가 원격으로 임의의 코드를 실행할 수 있습니다.

이 문제를 해결하기 위해 공급업체는 RCE 결과를 공격자가 출력하는데 사용할 수 있는 “java.io.File”과 “LocalizedTextUtil” 클래스의 사용을 제거하였습니다.

Apache Struts의 Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10 버전이 해당 취약점의 영향을 받는 것으로 보고되었습니다. Jakarta 기반 파일 업로드 Mulipart parser를 사용하는 경우 Apache Struts 2.3.32 버전 또는 2.5.10.1 버전으로 업그레이드하거나 Multipart parser의 다른 버전으로 교체할 수 있습니다.


트렌드마이크로 솔루션

Trend Micro™ Deep Security™는 취약점을 이용한 위협으로부터 엔드포인트를 보호합니다. Trend Micro™ Deep Discovery™는 사용자 맞춤형 샌드박스 및 전체 공격 주기의 완벽한 상관관계를 통해 엔진 및 패턴 업데이트 없이도 익스플로잇 공격 및 기타 유사한 위협에 대한 탐지, 심층 분석, 선제적 대응을 제공합니다.

Deep SecurityTM는 아래의 DPI 룰을 통해 해당 취약점을 악용한 공격으로부터 고객을 보호합니다.

  • 1008207 - Apache Struts2 원격 코드 실행 취약점 (CVE-2017-5638)

Deep Discovery Inspector는 아래의 DDI 룰을 통해 해당 취약점을 악용한 공격으로부터 고객을 보호합니다.

  • 2348 – CVE-2017-5638 – APACHE STRUTS EXPLOIT – HTTP (Request)
  • 2352 – CVE-2017-5638 – APACHE STRUTS EXPLOIT – HTTP (Request) – Variant 2

TippingPoint의 고객은 아래의 Custom Shield Writer (CSW) 및 MainlineDV 필터를 통해 해당 취약점을 악용한 공격으로부터 고객을 보호합니다.

  • CSW : HTTP : Apache Struts 콘텐츠 형식 명령 주입 취약점 (CVE-2017-5638)
  • 27410 : HTTP : Apache Struts 콘텐츠 형식 명령 주입 취약점 (CVE-2017-5638)

[원문: CVE-2017-5638: Apache Struts 2 Vulnerability Leads to Remote Code Execution]