치명적 CVE-2025-24813 2026년 3월 · 8분 읽기

CVE-2025-24813: Apache Tomcat Partial PUT RCE

Apache Tomcat에 존재하는 치명적인 취약점으로 인해, 단 2개의 HTTP 요청만으로 인증되지 않은 원격 코드 실행이 가능합니다. 이 공격은 Tomcat의 partial PUT 기능을 악용해 직렬화된 Java 객체를 업로드한 다음, GET 요청을 통해 역직렬화를 트리거합니다. CVSS 9.8. 기본 구성의 Tomcat 9, 10, 11에 영향을 미칩니다.


9.8
치명적
속성
CVE IDCVE-2025-24813
CVSS 벡터AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-502: 신뢰할 수 없는 데이터의 역직렬화
공개일2025년 3월 10일
익스플로잇 현황활발히 악용 중 — 공개 후 30시간 내 PoC 공개

CVE-2025-24813이란?

Apache Tomcat는 대용량 파일을 세그먼트로 나눠 업로드할 수 있게 하는 HTTP 기능인 "partial PUT"을 지원합니다 — Content-Range 헤더를 사용합니다. Tomcat은 이러한 부분 업로드를 작업 디렉터리에 임시 파일로 저장합니다. 이 구현에는 두 가지 결함이 존재합니다:

  1. 임시 파일명은 업로드 URL 경로에서 파생되며, 이는 부분적으로 공격자가 제어할 수 있습니다
  2. Java 세션 지속성 메커니즘이 활성화되어 있는 경우(세션을 파일로 저장), Tomcat은 작업 디렉터리에서 .session 확장자를 가진 모든 파일을 역직렬화할 수 있습니다

공격자는 이러한 결함들을 조합해 부분 업로드로 위장한 악성 직렬화 Java 객체를 업로드한 다음, Tomcat이 세션 조회로 해석하는 URL을 요청해 그 역직렬화를 트리거할 수 있습니다.

🚨 30시간 만에 공개된 PoC

CVE-2025-24813이 공개된 지 약 30시간 만에 작동하는 익스플로잇이 GitHub에 게시되었습니다. 이 2-요청 공격은 자동화하기가 매우 쉬워, 며칠 만에 대규모 악용 캠페인이 관찰되었습니다. 기본 구성을 사용하는 미패치 인터넷 노출 Tomcat 서버는 모두 침해된 것으로 간주해야 합니다.

영향받는 버전

Tomcat 버전영향받는 범위수정된 버전
Apache Tomcat 11.x11.0.0-M1 ~ 11.0.211.0.3+
Apache Tomcat 10.x10.1.0-M1 ~ 10.1.3410.1.35+
Apache Tomcat 9.x9.0.0.M1 ~ 9.0.989.0.99+

RCE를 위한 전제 조건: 두 조건이 모두 충족되어야 합니다:

전제 조건에 대한 참고: 일부 자료는 초기에 전제 조건이 엄격하다고 보고했습니다. 하지만 실제 환경 분석 결과, 일부 일반적인 Tomcat 구성(일부 애플리케이션 서버 배포판 포함)이 두 조건을 모두 충족하는 것으로 나타났습니다. 조건 충족 여부와 관계없이 패치하세요 — CVSS 점수는 최악의 조건을 반영합니다.

2-요청 공격


# 요청 1: 조작된 직렬화 객체를 partial PUT으로 업로드
PUT /.xxxxx HTTP/1.1
Host: target.com
Content-Type: application/octet-stream
Content-Range: bytes 0-1233/1234
Content-Length: 1234

[serialized Java gadget chain payload — e.g., Commons Collections]

# Tomcat은 이를 work 디렉터리에 임시 파일로 저장함
# URL에서 파생된 파일명: .xxxxx → partial upload로 저장됨

# 요청 2: 세션 조회를 통해 역직렬화 트리거
GET /.xxxxx HTTP/1.1
Host: target.com
Cookie: JSESSIONID=.xxxxx

# Tomcat이 세션 ID와 일치하는 세션 파일을 조회함
# 공격자의 파일을 찾음 → 역직렬화 실행 → RCE

Tomcat이 고가치 표적인 이유

Apache Tomcat은 전 세계에서 가장 널리 배포된 Java 애플리케이션 서버 중 하나로, 다음과 같은 곳에서 사용됩니다:

Tomcat에서의 RCE는 흔히 그 위에서 실행되는 애플리케이션이 보유한 데이터베이스 자격 증명, 내부 API, 민감한 비즈니스 데이터에 대한 접근을 의미합니다.

탐지


# Tomcat 버전 확인
/opt/tomcat/bin/version.sh
# 또는 catalina.jar manifest 확인
unzip -p /opt/tomcat/lib/catalina.jar META-INF/MANIFEST.MF | grep Implementation-Version

# 접근 로그에서 의심스러운 partial PUT 업로드 확인
grep 'PUT' /opt/tomcat/logs/localhost_access_log.* | grep -v '200\|201\|204'
grep 'PUT.*Content-Range' /opt/tomcat/logs/localhost_access_log.*

# Tomcat work 디렉터리에서 비정상적인 파일 확인
find /opt/tomcat/work -name "*.session" -newer /opt/tomcat/conf/server.xml
find /opt/tomcat/work -type f -newer /opt/tomcat/conf/server.xml

# 기본 서블릿 쓰기가 활성화되어 있는지 확인
grep -r "readonly" /opt/tomcat/conf/web.xml /opt/tomcat/webapps/

완화 방안

  1. 즉시 패치: Tomcat 9.0.99+, 10.1.35+, 또는 11.0.3+로 업그레이드하세요
  2. 필요하지 않다면 기본 서블릿 쓰기 비활성화:
    <servlet>
      <servlet-name>default</servlet-name>
      <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
      <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>  <!-- 이 값이 true인지 확인하세요 -->
      </init-param>
    </servlet>
  3. 파일 기반 세션 지속성 비활성화: 인메모리 또는 데이터베이스 기반 세션 지속성으로 전환하세요
  4. WAF 규칙 배포: 다음을 포함하는 HTTP PUT 요청 차단: Content-Range 헤더가 불필요한 경우
  5. Java 역직렬화 필터 사용: Java 9+ 직렬화 필터를 구성해 역직렬화 가능한 클래스를 제한하세요

KENSAI 탐지 역량

공격자보다 먼저 노출된 Tomcat 서버를 찾아보세요

KENSAI는 환경 내 모든 Apache Tomcat 인스턴스를 식별하고 CVE-2025-24813을 비롯한 기타 치명적인 Java 애플리케이션 서버 취약점을 테스트합니다.

Tomcat 취약점 스캔하기 →

관련 기사

FortiClient EMS 활발한 공격 진행 중, EU 집행위원회 350GB 침해, 러시아 CTRL 툴킷 노출, 중국 APT 클러스터 동남아시아 집결 CVE-2025-21418: Windows AFD.sys 권한 상승 제로데이 보안 브리핑: FBI 감시 시스템 해킹, Cisco SD-WAN 익스플로잇, EU 피싱 환불 판결 — 2026년 3월 9일