Apache Tomcat RCE 취약점(CVE-2025-24813)

지난 2월, Apache Tomcat 에서 서버 내 민감한 정보를 누출시키고, 원격 코드 실행이 가능한 취약점이 발견되었다. NIST 에서는 아직 해당 취약점에 대해 점수를 부여하지 않았지만, Apache Tomcat 의 대중성과 RCE 공격이 가능한 취약점이라는 점에서 높은 점수를 부여할 것으로 예상된다.

2025년 3월 21일 NIST 에서 CVE-2025-24813 에 관한 정보를 업데이트하면서 위험도 점수가 추가되었다. Apache 서버가 널리 사용된다는 점, 공격 난이도가 낮은 점, RCE 취약점이라는 점을 고려하여 예상대로 10점 만점에 9.8 점이라는 높은 위험도가 부여되었다.

해외 보안 회사 wallarm 은 CVE-2025-24813 에 대해 "실행하기 매우 쉽고, 인증을 필요로 하지 않는 공격"이라 평하며, 이후 partial PUT 기능을 악용한 추가 공격으로 이어질 것을 우려했다.
이 취약점은 공개된 지 30시간만에 Github 에 관련 취약점을 공격하는 PoC 스크립트가 업로드되어 누구나 쉽게 공격을 시도할 수 있는 만큼 Tomcat 서버 관리자들은 발 빠른 대응이 필요하다.
1. 취약점의 영향을 받는 버전 및 조건 & 해결책
Apache 측에서는 모든 사용자가 CVE-2025-24813 취약점에 대해 패치가 된 아래 목록 이상의 버전으로 업데이트할 것을 권고하고 있다.
- 9.0.99
- 10.1.35
- 11.0.3
또한 Apache 서버는 다음과 같은 조건을 모두 만족해야 공격이 가능하다.
- default servlet 에 대해 쓰기 기능이 활성화되어 있어야 한다.(기본적으로 비활성화)
- partial PUT 기능을 지원해야 한다.(기본적으로 활성화)
- 보안과 관련된 민감한 파일이 public 업로드 디렉토리의 하위 디렉토리에 업로드되어야 한다.
- 공격자는 업로드된 파일 중 보안과 관련된 민감한 파일의 이름을 알고 있어야 한다.
- 보안과 관련된 민감한 파일이 partial PUT 으로 업로드되었어야 한다.
Apache Tomcat 은 기본적으로 현재 버전을 업그레이드하는 바이너리 파일을 제공하지 않기 때문에 공식 홈페이지의 Upgrading 문서와 Migration Guide 문서를 참고하여 현재 버전과 시스템 환경에 맞게 패치를 진행해야 한다.
2. PoC 동작 과정
앞서 설명한 취약점 발생 조건과 Github 에 업로드된 PoC 코드를 분석하면 대략적인 취약점 발생 원인을 분석할 수 있다.
먼저, PoC 코드는 공격 대상 Apache 서버에 쓰기 권한이 있는지 확인하기 위해 check.txt
파일에 대해 PUT 메서드 패킷을 보내고 응답을 확인한다.

check.txt
파일에 대한 쓰기 권한 테스트이후 공격에 사용할 payload 를 생성한다. payload 는 지정한 command 를 실행하는 Java 실행 파일이거나, Java 역직렬화 취약점을 exploit 하는 툴 ysoserial 을 이용하여 생성한다.

최종적으로 {target_url}/uploads/../sessions/{session_id}.session
경로에 payload 파일을 업로드 후, 해당 파일에 접근하여 지정한 command 를 실행한다.
