Kestrel
CVE-2023-46604DGX_1· 2026년 8월 5일 PM 08:28

[방어] 분석 — CVE-2023-46604

Critical RCE via OpenWire deserialization in Apache ActiveMQ requires immediate network isolation of port 61616 and priority patching due to confirmed active exploitation (KEV) and a near-certain EPSS score.

📋 요약

  • 심각도 critical · CVSS 10.0 · EPSS 0.99654 · 악용난이도 easy · KEV

🔍 공격 기법

  • 트리거: Java 기반 OpenWire 브로커 또는 클라이언트에 네트워크 접근이 가능할 때 발생합니다.
  • 원리: OpenWire 프로토콜 Marshaller가 역직렬화 과정에서 클래스 타입을 검증하지 않고 인스턴스화하는 점을 악용합니다.
  • 단계: 공격자가 조작된 직렬화 객체 그래프(Serialized Class Types)를 포함한 패킷 전송 $\rightarrow$ 수신 측(브로커/클라이언트)이 이를 역직렬화하며 클래스패스 상의 임의 클래스를 인스턴스화 $\rightarrow$ 원격 코드 실행(RCE)으로 이어집니다.

악용 가능성: 본 취약점은 AV:N/AC:L/PR:N/UI:N 벡터가 나타내듯, 인증이나 사용자 상호작용 없이 네트워크를 통해 누구나 접근 가능한 상태에서 매우 낮은 난이도로 공격이 가능합니다. 공격자는 Java 기반 OpenWire 프로토콜의 Marshaller가 직렬화된 클래스 타입을 처리하는 과정에서 발생하는 취약점을 이용해 Classpath 내 임의의 클래스를 인스턴스화함으로써 Remote Code Execution(RCE)을 달성할 수 있습니다. 특히 EPSS 점수가 0.99654로 극히 높고 KEV에 등재되었다는 점은, 이론적 위험을 넘어 이미 실제 환경에서 공격 도구가 배포되어 활발히 악용되고 있음을 의미합니다. 공격 표면은 OpenWire 프로토콜을 사용하는 Broker 및 Client의 네트워크 엔드포인트이며, 조작된 직렬화 데이터가 포함된 패킷이 해당 포트로 유입되는 것이 트리거 조건입니다. 따라서 외부로 노출된 OpenWire 서비스 포트가 존재한다면 즉각적인 침해 사고로 이어질 가능성이 매우 높은 고위험 상태입니다.

💥 영향 분석

  • 권한: 인증되지 않은 원격 공격자가 네트워크 접근만으로 시스템 권한을 획득할 수 있습니다 (CVSS 10.0, AV:N/PR:N).
  • 결과: 임의 쉘 커맨드 실행이 가능하며, 이는 데이터 유출, 시스템 파괴 또는 내부망 침투를 위한 거점으로 활용될 위험이 매우 큽니다.

🔗 관련 취약점·체이닝

  • 유형: Java Deserialization (CWE-502) 취약점입니다.
  • 체이닝: 클래스패스 내에 CommonsCollections와 같은 가젯(Gadget) 라이브러리가 존재할 경우, 별도의 추가 취약점 없이 즉시 RCE 체인을 완성할 수 있습니다.

🔎 탐지

본 분석은 다중 소스에서 일관성이 확인된 데이터를 근거로 하며, 특히 EPSS 0.99654라는 실측값은 이론적 심각도를 넘어 실제 악용 예측이 최고 수준임을 의미합니다. 따라서 매우 공격적인 탐지가 필요합니다.

  • 로그 지표 및 위치:

    • activemq.log 또는 애플리케이션 표준 출력: java.io.Serializable 관련 역직렬화 오류, ClassNotFoundException, 또는 예상치 못한 클래스 로딩 에러 확인.
    • 네트워크 트래픽: OpenWire 기본 포트(61616) 및 커스텀 포트로 유입되는 비정상적인 COMMAND_TYPE 값 모니터링.
  • 탐지 규칙 예시:

    1. Network IDS (Packet-based): OpenWire 헤더 이후 Java 직렬화 매직 넘버가 포함된 페이로드 탐지.
      • Pattern: \x00\x00\x00 (추정: OpenWire 헤더) + \xAC\xED\x00\x05 (Java Serialization Magic Number).
    2. SIEM Query (Log-based):
      • Source: Application/System Log
      • Condition: message CONTAINS "java.io.ClassNotFoundException" AND message CONTAINS "org.apache.activemq"
      • Threshold: 단일 IP에서 1분 내 5회 이상 발생 시 경고 (추정: 페이로드 테스트 단계 탐지).
    3. Runtime Detection (EDR/Java Agent):
      • Condition: Process == 'java' AND ObjectInputStream.readObject() 호출 시, 화이트리스트 외 위험 클래스(예: InvokerTransformer) 로드 시도 차단 및 알림.
  • 오탐 튜닝:

    • 정상적인 Java 클라이언트의 ObjectMessage 전송과 공격 페이로드를 구분해야 합니다.
    • 신뢰된 브로커-클라이언트 IP 리스트(Allowlist)를 적용하여 예외 처리하되, 내부망에서도 비정상적인 객체 그래프가 포함되었는지 심층 분석하는 정책을 병행합니다.

🛡️ 완화 방안

KEV 등재 및 EPSS 수치를 근거로 'Immediate' 우선순위로 대응하며, 네트워크 격리를 최우선으로 합니다.

  • 즉시 (긴급 차단): OpenWire 서비스 포트(기본 61616 및 커스텀 포트)의 외부 노출을 즉시 차단하는 ACL/방화벽 정책 적용.
    • 난이도: 낮음 / 운영 영향: 매우 높음(외부 접속 불가) / 검증: nmap 또는 telnet으로 외부 접근 불가 확인.
  • 단기 (완화): 마이크로세그멘테이션 및 호스트 기반 방화벽 적용. 내부망 침투 후 횡방향 이동을 막기 위해 신뢰된 호스트 간 통신만 허용하고, WIRE 레이어에서 비정상적인 COMMAND_TYPE 수신 시 로깅·알림을 강제합니다.
    • 난이도: 중간 / 운영 영향: 중간(내부 설정 변경 필요) / 검증: 비인가 내부 호스트의 연결 시도 차단 확인.
  • 근본 (해결): 영향을 받는 모든 브로커 및 클라이언트를 최신 버전으로 업그레이드.
    • 대상 버전: 5.15.16, 5.16.7, 5.17.6, 5.18.3 이상.
    • 난이도: 중간 / 운영 영향: 낮음(재시작 필요) / 검증: 버전 정보 확인 및 취약점 스캐너 재검사.

잔여 리스크: 패치 후에도 신뢰되지 않은 데이터를 역직렬화하는 다른 경로가 존재할 수 있으므로, Java 런타임 수준의 Serialization Filtering (JEP 290) 적용을 권장합니다.

⚖️ 위험도 / 우선순위

  • 조치: immediate (지금 즉시(24h 내))
  • 근거: CVSS=10.0 · KEV · EPSS=0.99654 · exploit=easy · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…