Apache Tomcat CVE-2025-24813 탐지 및 방어

Akamai 블루 웨이브

에 의해 작성

Akamai Security Intelligence Group

March 20, 2025

악용은 RCE, 심각한 정보 유출, 악성 콘텐츠 주입으로 이어질 수 있습니다.
악용은 RCE, 심각한 정보 유출, 악성 콘텐츠 주입으로 이어질 수 있습니다.

요약 보고서

  • 2025년 3월 10일, Apache Tomcat의 경로 동등성 취약점 (CVE-2025-24813)이 패치와 함께 공개되었습니다. 

  • 이 취약점은 RCE를 허용할 수 있지만, 이를 악용하려면 기본값이 아닌 특정 전제 조건이 필요하기 때문에 Apache에서는 중간 수준의 심각도 취약점으로 간주합니다.

  • 이 취약점이 공개된 직후, Akamai는 취약점이 있을 만한 서버를 조사하는 초기 악용 시도를 목격하기 시작했습니다.

  • 이 블로그 게시물에서 Akamai 연구원들은 취약점, 악용 기법, 탐지 전략에 대한 심층적인 세부 정보를 제공합니다.

  • Akamai Adaptive Security Engine Rapid Rule은 Akamai App & API Protector 고객을 자동으로 보호합니다

  • 또한 탐지를 위해 Akamai Guardicore Segmentation Insight 쿼리를 제공합니다

  • 영향을 받은 Akamai Hunt 고객은 이미 취약한 자산에 대한 자세한 매핑을 받았습니다.

CVE-2025-24813이란 무엇일까요?

2025년 3월 10일, Java 기반 애플리케이션을 호스팅하는 데 일반적으로 사용되는 인기 있는 오픈 소스 웹 서버이자 Java 서블릿 컨테이너인 Apache Tomcat의 경로 동등성 취약점(CVE-2025-24813)이 패치와 함께 발표되었습니다. 이 취약점은 특히 서버가 내부적으로 파일 경로를 처리하는 방식에 영향을 미칩니다. 악용에 걸리는 시간이 계속 짧아지고 있는 심각한 최근 트렌드에 따라 공개 개념 증명(PoC)이 공개된 지 며칠 만에 공격자의 악용 시도가 드러났습니다.

Apache는 악용에 필요한 요구사항 때문에 CVE-2025-24813을 중간 심각도로 분류했습니다. 취약한 서버가 특정 전제 조건을 충족해야 하므로 이 문제가 악용될 가능성은 적습니다. 그러나 이러한 전제 조건과 관계없이 이 취약점이 악용될 경우 인증되지 않은 RCE(Remote Code Execution)로 이어질 수 있으므로 즉시 패치해야 합니다.

취약점은 Apache Tomcat 버전 11.0.3, 10.1.35, 9.0.99에서 수정되었지만 11.0.0-M1~11.0.2, 10.1.0-M1~10.1.34, 9.0.0-M1~9.0.98 버전을 실행하는 서버는 여전히 취약할 수 있습니다.

CVE-2025-24813이란 무엇일까요?

Apache Tomcat의 기본 서블릿이 기본적으로 비활성화되어 있는 쓰기 기능을 활성화하도록 설정된 경우, 공격자는 CVE-2025-24813을 사용해 상당한 영향을 미칠 수 있습니다. 부분 PUT 요청을 허용하는 기본 동작과 결합하면 공격자는 특수하게 조작된 직렬화된 세션 파일을, 예를 들자면 쓰기 가능한 디렉토리에 업로드할 수 있습니다. 파일이 업로드되면 후속 HTTP 요청이 Tomcat에 해당 내용을 역직렬화하도록 강제해 임베디드 페이로드의 실행을 트리거합니다.

악용은 RCE, 심각한 정보 유출, 악성 콘텐츠 주입으로 이어져 중요한 서버 설정 파일을 손상시킬 수 있습니다. 영향을 받는 Apache Tomcat 버전에는 11.0.0‑M1~11.0.2, 10.1.0‑M1~10.1.34 및 9.0.0‑M1~9.0.98이 있습니다.

CVE-2025-24813 악용

악용의 최종 결과는 매우 심각하지만 취약점을 통해 RCE를 달성하려면 다음과 같은 강력한 전제 조건이 필요합니다.

  • 기본 서블릿에는 쓰기 기능이 명시적으로 활성화되어 있어야 합니다.

  • 부분 PUT 요청이 허용되어야 합니다.

  • 웹 애플리케이션은 기본 저장 위치와 함께 파일 기반 세션 지속성을 사용해야 합니다(이는 악성 직렬화된 페이로드를 위해 쓰기 가능한 표적 디렉토리를 제공).

  • 역직렬화 취약점이 있는 라이브러리가 존재하거나 애플리케이션에서 사용되고 있어야 합니다(이는 역직렬화 공격을 통해 페이로드 실행이 가능하도록 허용).

  • 또한 공격자는 애플리케이션에서 사용하는 내부 파일 명명 규칙과 표적 파일 시스템의 디렉토리 구조에 대한 지식이 있어야 합니다.

대부분의 전제 조건이 충족될 수 있지만 가장 중요한 전제 조건인 기본 서블릿 쓰기 기능은 기본적으로 비활성화되어 있습니다.

관찰된 공격 트래픽

Akamai SIG(Security Intelligence Group)는 취약점이 공개된 직후 공격 트래픽을 탐지했습니다. 관찰된 공격 페이로드의 대부분은 표적 서버가 취약한지 여부를 공격자가 판단하는 데 도움이 되도록 설계된 취약점 프로브입니다. 일반적인 유형의 공격은 특히 임의의 이름 지정 체계(6자 기본 이름에 .session 파일 확장자를 추가하는 방식)를 따르는 .session 파일 경로를 표적으로 합니다(그림 1).

A common attack variant specifically targets .session file paths, which follow a randomized naming scheme — a six-character base appended with the .session file extension (Figure 1). Fig. 1: Examples of .session attack variant

가장 널리 사용된 페이로드에는 요청 본문에 악성 Java 직렬화 오브젝트로 구성된 .session 파일이 포함되어 있습니다. 대부분의 경우, 악성 오브젝트는 업로드된 세션 파일이 Apache Tomcat에 의해 역직렬화되면 java.net.URL 오브젝트를 사용해 “콜 홈(call home)”을 시도합니다(그림 2).

In most cases, the malicious object will use the java.net.URL object to “call home” once this uploaded session file is deserialized by Apache Tomcat (Figure 2). Fig. 2: Attempted .session payload in request body

취약한 애플리케이션 탐지

네트워크 전체에서 취약한 Apache Tomcat 인스턴스를 모두 파악하는 것은 쉽지 않습니다. Apache Tomcat은 여러 곳에 통합되어 있고 여기에는 보안팀 직원이 인식하지 못하는 라이브러리를 사용 중인 애플리케이션이 포함되어 있으므로 보안팀은 광범위한 자산을 평가해야 합니다.

최근 Apache Camel 취약점 과 유사하게, 이 라이브러리는 간접적인 의존성으로 존재할 수 있습니다. 즉, 소스 코드에 명시적으로 포함되어 있지 않고 다른 소프트웨어 패키지를 통해 도입됩니다. 따라서 탐지 및 방어 작업의 복잡성이 커집니다.

Apache Tomcat은 Windows와 Linux에 모두 단독으로 설치될 수 있으며 Kava 애플리케이션에 포함될 수도 있습니다. 이는 tomcat-api.jar라는 JAR(Java Archive) 파일이 있는지 디렉토리를 재귀적으로 스캔해 탐지할 수 있습니다. Tomcat 관련 JAR 파일이 발견되면 해당 매니페스트 파일을 검사해 사용 중인 버전을 확인할 수 있습니다.

추출된 버전을 통해 보안팀은 Apache의 보안 권고 와 상호 참조해 잠재적인 취약점을 평가할 수 있습니다. 영향을 받는 버전은 다음과 같습니다.

  • Apache Tomcat 11.0.0-M1~11.0.2
  • Apache Tomcat 10.1.0-M1~10.1.34
  • Apache Tomcat 9.0.0.-M1~9.0.98

탐지 자동화

Akamai는 Akamai Guardicore Segmentation 고객들을 위해 취약한 자산을 식별할 수 있는 Insight 쿼리를 구축했습니다. 쿼리는 tomcat-api.jar에 대해 모든 이용 가능한 경로와 해시를 반환합니다. 반환된 JAR은 해시를 통해 VirusTotal에서 확인하거나 JAR 내부의 매니페스트 파일을 통해 확인하고 올바른 버전을 얻을 수 있습니다.

Windows — 애플리케이션 내의 Apache Tomcat

  WITH relevant_cwds as (
    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    mmap.path AS mmap_path
    FROM process_memory_map AS mmap
    LEFT JOIN processes AS proc USING(pid)
    WHERE mmap_path LIKE "%jvm%"

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE LOWER(proc.name) LIKE "%tomcat%"
),

RELEVANT_JAR_PATHS AS (
    SELECT file.path as lib_path, cwd, cwd || '..\%\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '..\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '%\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
  )

SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS

Linux — 애플리케이션 내의 Apache Tomcat

  WITH relevant_cwds as (
    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    mmap.path AS mmap_path
    FROM process_memory_map AS mmap
    LEFT JOIN processes AS proc USING(pid)
    WHERE mmap_path LIKE "%jvm%"

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE LOWER(proc.name) LIKE "%tomcat%"
),

RELEVANT_JAR_PATHS AS (
    SELECT file.path as lib_path, cwd, cwd || '../%/%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '../%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '%/%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
  )

SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS

Windows — Apache Tomcat 설치됨

  SELECT name, version
  FROM programs
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))

Linux — Apache Tomcat 설치됨

  SELECT name, version
  FROM deb_packages
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))
  UNION
  SELECT name, version
  FROM rpm_packages
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))

Akamai App & API Protector를 통한 방어

많은 악용 시도는 Java 역직렬화 시도를 탐지하는 룰을 포함해 기존의 Adaptive Security Engine 룰에 의해 방어됩니다(그림 3).

  • 3000072 - 역직렬화 공격 탐지됨

Many exploit attempts are mitigated by existing Adaptive Security Engine rules, including those that detect Java deserialization attempts (Figure 3). Fig. 3: Adaptive Security Engine rule 3000072 detecting CVE-2025-24813 exploit attempt

2025년 3월 19일, Akamai의 위협 연구팀은 App & API Protector 고객을 위해 Adaptive Security Engine Rapid Rule을 배포해 완전한 보호를 제공했습니다(그림 4).

  • 3000957 — Apache Tomcat 원격 코드 실행 공격 탐지됨(CVE-2025-24813)

On March 19, 2025, Akamai’s Threat Research Team also deployed Adaptive Security Engine Rapid Rule for App & API Protector customers to provide full coverage (Figure 4). Fig. 4: Adaptive Security Engine Rapid Rule provides full coverage

Rapid Rule의 버전 1에서는 기본 동작이 알림으로 설정되어 있습니다. 공격 시도를 차단하기 원하는 고객은 오탐률을 제거하기 위해 트리거를 검토한 후 룰 동작을 거절로 설정하는 것이 좋습니다.

요약

Akamai SIG는 고객과 보안 커뮤니티 전체를 위해 이와 같은 위협에 대한 모니터링, 보고, 방어를 계속할 것입니다. Akamai Security Intelligence Group의 최신 뉴스를 확인하려면 리서치 홈페이지 를 방문하거나 소셜 미디어를 팔로우하세요.



Akamai 블루 웨이브

에 의해 작성

Akamai Security Intelligence Group

March 20, 2025