
ActiveMQ에 보고된 CVE-2023-46604를 익스플로잇하기 위한 리포지토리
이 저장소는 CVE-2023-46604를 악용하는 방법에 대한 예제가 포함된 가이드입니다.
이 익스플로잇은 리플렉션을 사용하여 Exception 클래스를 인스턴스화하는 악성 명령을 활용합니다. 유효한 명령 대신 예외 클래스로 Bean을 로드하는 Spring 클래스를 보내고, 문자열 생성자 매개변수로는 Spring Bean 정의가 포함된 XML 파일을 다운로드할 URL을 보냅니다.
이 Spring Bean은 사실 java.lang.ProcessBuilder로, Java Active MQ 클라이언트 또는 서버를 실행 중인 사용자와 동일한 권한으로
모든 bash 명령을 실행합니다.
Python 코드로 HTTP 연결을 만들 수 있다면 좋겠지만, 제가 본 바로는 Spring Bean 로더가 어떤 이유로 두 번의 HTTP 호출을 수행하기 때문에, 저는 Java의 멀티스레드 프로그래밍에 더 익숙합니다.
이 익스플로잇은 브로커 서버에 연결하는 ActiveMQ 클라이언트를 대상으로 하며, 그 서버는 이 클라이언트를 원격 코드 실행에 취약하게 만드는 악성 서버입니다.
이 익스플로잇은 두 개의 프로세스로 나뉩니다:
이것은 Python 3.6과 Java 17에서 테스트되었습니다.
Java 프로젝트 컴파일:
cd activemq-exploit
mvn clean package
cd ..로 루트 프로젝트로 돌아가서 python scripts/client_exploit.py를 실행합니다.
다른 터미널에서 Java 코드를 실행합니다:
cd activemq-exploitjava -jar target/activemq-exploit-1.0-SNAPSHOT.jar서버 익스플로잇은 ActiveMQ 서버 브로커에 연결하여 악성 명령을 전송합니다. 이것은 ActiveMQ Artemis 2.18에서만 사용되었으며 취약점을 악용할 수 없었습니다. Artemis에는 Spring이 패키징되어 있지 않기 때문이며, 유일하게 알려진 원격 코드 실행 익스플로잇은 Spring Bean을 로드하는 Spring 클래스를 통한 것입니다.
그러나 scripts/server_exploit.py의 Python 스크립트는 클라이언트 익스플로잇과 동일한 작업을 수행하며, 단지 서버에 연결할 뿐입니다.
인증이 없으므로 Open Wire 핸드셰이크를 조정해야 할 수도 있습니다.