
Détecte la RCE Apache ActiveMQ Classic (CVE-2026-34197) via l'API Jolokia avec des scripts Python et Nmap NSE, en vérifiant l'accès non authentifié et la vulnérabilité de version.
Une vulnérabilité d'exécution de code à distance dans Apache ActiveMQ Classic qui permet à un attaquant d'exécuter du code arbitraire en invoquant l'opération MBean addNetworkConnector(String) via l'API Jolokia (/api/jolokia/). L'attaquant intègre un paramètre brokerConfig malveillant pointant vers un fichier XML Spring distant, qu'ActiveMQ récupère et analyse, instanciant des objets Java arbitraires et parvenant à une exécution de code.
Sur les versions ActiveMQ 6.0.0 à 6.1.1, le point de terminaison Jolokia est totalement non authentifié, ce qui en fait une RCE non authentifiée sans interaction utilisateur.
Cette vulnérabilité est restée cachée dans le code source pendant 13 ans avant d'être découverte avec l'aide de l'IA.
| Champ | Détail |
|---|---|
| ID CVE | CVE-2026-34197 |
| Fournisseur | Apache Software Foundation |
| Produit | Apache ActiveMQ Classic |
| Versions concernées | Toutes les versions antérieures à 5.19.4 et 6.2.3 |
| RCE non authentifiée | Versions 6.0.0 à 6.1.1 (Jolokia sans authentification) |
| CVSS v3.1 | 8.8 (Élevée) |
| CWE | CWE-94 — Contrôle inadéquat de la génération de code |
| Vecteur d'attaque | Réseau |
| Authentification | Requise sur 5.x ; aucune sur 6.0.0 à 6.1.1 |
| Interaction utilisateur | Aucune |
| Maturité de l'exploit | PoC public disponible |
| Corrigé dans | ActiveMQ Classic 5.19.4, 6.2.3 |
| Âge du bug | ~13 ans dans le code source |
| Découverte | Recherche de vulnérabilités assistée par IA |
Apache ActiveMQ Classic est l'un des courtiers de messages open source les plus largement déployés dans l'écosystème Java. Il implémente la spécification Java Message Service (JMS) et sert de colonne vertébrale à la communication asynchrone dans des milliers d'environnements d'entreprise dans le monde entier.
ActiveMQ gère tout, des files d'attente de traitement de commandes et des pipelines de transactions financières aux flux de télémétrie IoT et aux bus d'événements de microservices. Si votre organisation utilise des microservices basés sur Java, une architecture pilotée par les événements ou toute forme de messagerie asynchrone, il y a de fortes chances qu'ActiveMQ soit quelque part dans la pile.``` ActiveMQ Broker ┌───────────────────────┐ │ │ ┌──────────┐ │ ┌───────────────┐ │ ┌──────────┐ │ Producer │───────▶│ │ Message │ │───────▶│ Consumer │ │ (App A) │ send │ │ Queue / │ │ recv │ (App B) │ └──────────┘ │ │ Topic │ │ └──────────┘ │ └───────────────┘ │ ┌──────────┐ │ │ ┌──────────┐ │ Producer │───────▶│ ┌───────────────┐ │───────▶│ Consumer │ │ (App C) │ │ │ Jolokia │ │ │ (App D) │ └──────────┘ │ │ API (:8161) │ │ └──────────┘ │ └───────┬───────┘ │ └───────────┼───────────┘ │ ⚠️ CVE-2026-34197 Attack surface here
Lorsqu'un attaquant compromet ActiveMQ, il n'obtient pas seulement un shell sur un serveur. Il se retrouve au **centre de chaque flux de messages** de l'organisation, capable de lire, modifier, rediriger ou injecter des messages entre les systèmes critiques.
---
## Analyse approfondie de la vulnérabilité
### L'architecture : Jolokia et JMX
**JMX** (Java Management Extensions) est l'interface de gestion standard pour les applications Java. Elle expose des « MBeans » (Managed Beans) qui permettent de surveiller et de contrôler les composants internes de l'application. ActiveMQ expose des MBeans pour gérer les brokers, les files d'attente, les topics, les connexions, et plus encore.
**Jolokia** est un pont JMX-over-HTTP. Il traduit les opérations JMX en une API JSON RESTful, permettant de gérer des applications Java via des requêtes HTTP plutôt que d'exiger un client JMX dédié.
ActiveMQ Classic est livré avec Jolokia intégré, accessible à l'adresse `/api/jolokia/` sur le port de la console web (par défaut : 8161).```
Traditional JMX Access:
┌──────────┐ ┌──────────────┐
│ JConsole │ ────── JMX Protocol ─────────> │ ActiveMQ │
│ │ (requires JMX client) │ MBeans │
└──────────┘ └──────────────┘
Jolokia HTTP Access:
┌──────────┐ ┌──────────────┐
│ curl / │ ── POST /api/jolokia/ ───────> │ ActiveMQ │
│ browser │ (just needs HTTP) │ MBeans │
└──────────┘ └──────────────┘
⬆️
Anyone with HTTP access can
invoke MBean operations
C'est là que les problèmes commencent. Jolokia expose toute la puissance de la gestion JMX via une simple API HTTP. Et l'une des opérations MBean disponibles sur le broker est addNetworkConnector(String).
L'opération addNetworkConnector(String) est conçue pour créer des ponts réseau entre les instances de broker ActiveMQ. Elle accepte une chaîne URI décrivant comment se connecter à un autre broker.
ActiveMQ prend en charge le schéma d'URI vm:// pour les connexions de broker en processus. Ces URI prennent en charge un paramètre brokerConfig qui pointe vers un fichier de configuration Spring XML. Et Spring XML peut instancier des objets Java arbitraires.