1. 개요
Apache Struts2는 JAVA 기반 웹 어플리케이션 개발 프레임워크로, 해당 프레임워크를 사용한 웹 어플리케이션에서 발생할 수 있는 원격 코드 실행(RCE; Remote Code Execution) 취약점에 대한 분석 결과를 정리하였습니다.
2. 공격 유형
다양한 Apache Struts2 RCE 취약점 중에서 4개의 CVE에 대한 공격 유형 분석입니다.
1) CVE-2017-9805
Apache Struts2의 REST 플러그인에서는 XML 요청을 XStream 플러그인을 활용해서 직렬화/역직렬화 과정을 수행합니다. 이때 사용자 입력 값에 대해서 아무런 검증 절차 없이 역직렬화를 수행하기 때문에, 공격자는 이를 악용하여 직렬화된 악성코드를 REST 플러그인이 수행되는 임의 API로 전송하여 공격을 수행할 수 있습니다.
2) CVE-2017-12611
Apache Struts2에서는 FreeMarker라는 오픈소스 HTML 템플릿 엔진으로 HTML을 동적으로 생성합니다. 이때 FreeMarker에서 고정된(Literal) 값을 표현하거나 강제적인 값을 표현한 태그를 이용한 페이지가 있다면, 그 태그 내 변수를 요청 파라미터로 접근하여 OGNL 표현식을 삽입 후 전송하여 악성코드를 실행할 수 있습니다.
3) CVE-2018-11776
Apache Struts2에는 namespace라는 어플리케이션 내부 동작 그룹이 존재하는데, 웹 어플리케이션에서 namespace를 지정하지 않고 작업을 하거나 /* 와 같은 와일드카드 namespace를 사용한다고 가정할 때, 만약 Struts가 요청한 namespace를 찾을 수 없다면 사용자 지정 namespace로 인식하여 OGNL 표현식으로 평가하게 되고 이를 악용하여 악성코드를 실행할 수 있습니다.
4) CVE-2020-17530
CVE-2019-0230과 유사한 공격으로 JSP 페이지에서 개발자가 태그 속성에 %{} 구문으로 강제 OGNL 평가를 진행하는 경우에 발생합니다. Apache Struts2에서는 CVE-2019-0230 취약점에 대해 블랙리스트 필터링에 OGNL 실행 관련 패키지를 추가하는 방법으로 보안 패치를 진행했는데, CVE-2020-17530에서는 org.apache.tomcat 패키지의 인스턴스를 이용해 블랙리스트를 초기화하여 OGNL 코드를 실행할 수 있습니다.
3. 대응
1) CVE-2017-9805
Apache Struts를 2.5.13 / 2.3.34 버전 이상으로 업데이트하여 대응합니다. 업데이트가 어려운 경우에는 공식 Struts에서는 struts-plugin.xml 데이터 내용을 수정하여 취약점이 발생하는 XML 대신 JSON만 사용할 수 있도록 설정하도록 권고하고 있습니다.
저희 AIWAF 제품에서는 <Apache Struts2 REST plugin Remote Code Execution Vulnerability> 패턴으로 해당 취약점을 악용한 공격 구문을 탐지합니다.
2) CVE-2017-12611
Apache Struts 2.5.12 / 2.3.35 버전 이상으로 업데이트하여 대응합니다. 업데이트가 어려운 경우에는 읽기만 가능한 속성인 getter 속성에 한하여 value 값을 초기화하거나 FreeMarker 자체를 사용하지 않아야 합니다.
저희 AIWAF 제품에서는 <Apache Struts2 Remote Code Execution Vulnerability - 2> 패턴으로 해당 취약점을 악용한 공격 구문을 탐지합니다.
3) CVE-2018-11776
Apache Struts 2.3.35 / 2.5.17 버전 이상으로 업데이트하여 대응합니다.
저희 AIWAF 제품에서는 <Apache Struts2 Remote Code Execution Vulnerability - 3> 패턴으로 해당 취약점을 악용한 공격 구문을 탐지합니다.
4) CVE-2020-17530
Apache Struts 2.5.26 버전 이상으로 업데이트하여 대응합니다.
저희 AIWAF 제품에서는 <Apache Struts2 Remote Code Execution - OGNL expression injection> 패턴으로 해당 취약점을 악용한 공격 구문을 탐지합니다.
4. 결론
Apache Struts2에 대한 취약점들이 많이 발견되고 있으며, 이에 따른 업데이트도 계속 나오기 때문에 주기적으로 점검 및 업데이트가 필요합니다.
저희 AIWAF 제품에서는 Apahce Struts2에서 발생하는 취약점들에 대해 패턴을 다수 개발하여 대응하고 있으며, 앞으로도 발견되는 Apache Struts2 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.