ActiveMQ OpenWire 역직렬화 취약점 Flag
취약점 요약 (CVE‑2023‑46604)
| 항목 | 내용 |
| 개요 | OpenWire ObjectMessage body 역직렬화 시 RCE 정보 유출 |
| 영향 대상 | ActiveMQ <= 5.18.0 JAVA 클라이언트 기본 설정 |
| 원리 | AC ED 00 05 매직 헤더 뒤 TC_CLASSDESC→가젯클래스→TC_STRING 필드 로드 |
| 공격 시나리오 | 1) JMS CONNECT/PRODUCER 2) ObjectMessage.body에 URL+플래그 삽입 3) 브로커가 XML GET → 응답 수신 |
| 완화 방안 | - ActiveMQ 5.18.3 이상 업그레이드 - serializationPlugin에서 trustedPackages 화이트리스트 설정 |
| 참고 자료 | Apache Advisory (CVE‑2023‑46604) |
| 네트워크 특징 | tcp.port == 6161 |
ActiveMQ OpenWire 프로토콜의 ObjectMessage 페이로드를 검증 없이 역직렬화하여 악성 xml을 로드하거나 임의 코드를 실행할 수 있는 취약점이다.
영향 대상
Apache ActiveMQ 브로커 5.18.0이전 5.17.x 이전 등
취약점 원리
OpenWire 메세지의 ObjectMessage body에 Java 직렬화 스트림을 삽입
flag 값 w*n의 형식
우선 첫번째로 패킷에 openwire프로토콜의 페이로드에 역직렬화하여 원격 코드를 실행하는 페이로들 삽입하지 않을까? 해서 openwire 프로토콜에서는 flag 값을 찾을 수가 없었다.

현재 victim ip는 192.168.235.128이고 activeMQ 브로커 Spring이라고 생각하면 된다.
그래서 해당 페이로드를 삽입을 할 수있는 곳이 어디 있을까 생각을 한결과 tcp.port == 8000의 포트에서 http 통신을 했을 때 해당 악성 페이로드를 요청하는 흐름을 볼수 있고 아래와 같다.

해당 이미지의 Flow
attack.xml을 불러오기 위해 HTTP GET요청을 보냅니다.
즉, Spring ClassPathXmlApplicationContext가 원격 리소스를 가져오는 클라이언트 역할
192.168.235.129 (공격자: XML 호스트)
GET 요청을 받아서
…touch /tmp/w{…}가 담긴 XML을 200 OK로 응답해 줍니다.
시사점 및 완화 방안
업데이트: ActiveMQ 5.18.3 이상으로 패치
<serializationPlugin>
<trustedPackages>
<trustedPackage>org.example.safe</trustedPackage>
<!-- 기타 신뢰된 패키지만 허용 -->
</trustedPackages>
</serializationPlugin>
네트워크 레벨: OpenWire(61616) 접근 제어, HTTP egress 제한