Apache Struts 2 취약점 (CVE-2023-50164) 분석 및 대응

개요

2023년 12월 7일, Apache Struts 2에서 CVSS 3 기준으로 심각도가 9.8인 치명적인 취약점이 발견되었습니다. 이 취약점은 원격 코드 실행(RCE)을 허용하는 것으로, 공격자가 파일 업로드 매개변수를 조작해 임의의 파일 경로에 원격으로 실행 가능한 악성 코드를 업로드할 수 있어 악의적인 목적으로 이용될 수 있습니다.

취약점 분석

이 취약점은 Apache Struts의 ActionSupport 클래스와 관련된 파일 업로드 매개변수를 대문자로 사용하고 내부 파일 이름 변수를 재정의하는 매개변수를 추가하여 임의의 서버 경로에 파일을 업로드 할 수 있는 취약점입니다.

파일 업로드 매개변수 name에 대문자를 섞어 Upload로 변경하고 Content-Disposition 헤더로 uploadFileName 매개변수를 추가하여 아래 [그림1] 같이 파일을 업로드합니다.

파일 업로드 매개변수 조작

그림 1. 파일 업로드 매개변수 조작

파일이 취약한 서버에 올라가면 [그림2] 와 같이 webshell 디렉터리가 웹앱 디렉토리에 배포됩니다.

서버에 업로드 된 war 파일

그림 2. 서버에 업로드 된 war 파일

공격자는 [그림 3] 같이 공격에 성공하며 취약한 서버에 웹쉘을 통해 원격 접속 가능한 상태가 됩니다.

취약한 서버 접속에 성공

그림3. 취약한 서버 접속에 성공

Apache Struts 2 최신 버전에서는 위와 같은 공격을 방지하기 위해 HTTP 매개변수 처리 시 대소문자 혼용을 고려하도록 보안 패치가 적용되었습니다.

좌측은 해당 취약점 패치 전, 우측은 패치 후의 코드를 비교한 내용입니다.

CVE-2023-50164 패치 코드 비교 1

CVE-2023-50164 패치 코드 비교 2

CVE-2023-50164 패치 코드 비교 3

CVE-2023-50164 패치 코드 비교 3

영향을 받는 플랫폼

영향을 받는 플랫폼은 다음과 같습니다.

  • Apache Struts 2.0.0 ~ 2.5.32
  • Apache Struts 6.0.0 ~ 6.3.0.1
  • Apache Struts 2.0.0 ~ 2.3.37(지원 종료)

대응

기존 파일 업로드 코드에 파일 검증 및 검사 기능이 이미 적용되어 있는 경우, 현재까지 알려진 해당 취약점을 이용한 공격의 성공 가능성은 제한적입니다. 하지만, 공격 성공 시 원격 코드 실행(RCE) 취약점으로 인한 피해와 영향도는 높다고 할 수 있습니다.

Apache Struts 2의 CVE-2023-50164 취약점에 대응하려면, Apache Struts 2를 버전 2.5.33 또는 6.3.0.2 이상으로 업그레이드해야 합니다.

참고

  1. NIST CVE-2023-50164 Detail
  2. GitHub jakabakos/CVE-2023-50164-Apache-Struts-RCE
  3. Apache Struts2 文件上传漏洞分析(CVE-2023-50164)
  4. GitHub gh0x0st/RCE_Web_Shell_Python
  5. vsociety Apache Struts RCE (CVE-2023-50164)
  6. [ANN] Apache Struts 6.3.0.2 & 2.5.33

둘러보기

더보기

로그프레소 CTI 월간 리포트_2024년 2월호

해당 콘텐츠는 인터넷에서 공개적으로 접근 가능한 모든 위치(딥웹, 다크웹, 서피스웹)에서 2024년 1월 1일부터 31일까지 수집된 데이터를 기반으로 작성되었습니다.

2024-02-20

로그프레소 CTI 월간 리포트_2024년 3월호

해당 콘텐츠는 인터넷에서 공개적으로 접근 가능한 모든 위치(딥웹, 다크웹, 서피스웹)에서 2024년 2월 1일부터 29일까지 수집된 데이터를 기반으로 작성되었습니다.

2024-03-23

로그프레소 CTI 월간 리포트_2024년 1월호

해당 콘텐츠는 인터넷에서 공개적으로 접근 가능한 모든 위치(딥웹, 다크웹, 서피스웹)에서 2023년 12월 1일부터 31일까지 수집된 데이터를 기반으로 작성되었습니다.

2024-01-10