Référence des ports
Port 1099 (TCP) – Java RMI Registry
Registre Java Remote Method Invocation — service de noms qui lie les objets Java distants pour la recherche par les clients.
État par défaut
Ouvert sur les applications et middlewares Java (serveurs d'applications, agents JMX) exposant des endpoints RMI, souvent sans authentification.
Attaques courantes
- RCE par désérialisation non sécurisée via chaînes de gadgets (ysoserial)
- Énumération du registre et extraction des objets distants
- Exploitation JMX/RMI pour exécution de code à distance
- Abus du codebase/classloader pour charger des classes malveillantes
Durcissement
- Ne pas exposer RMI/JMX aux réseaux non fiables
- Exiger authentification et TLS sur les endpoints JMX/RMI
- Corriger la JVM et appliquer des filtres/listes blanches de désérialisation
- Désactiver le chargement de codebase distant (java.rmi.server.useCodebaseOnly=true)
- Filtrer le 1099 et les ports dynamiques des objets RMI
Commande nmap
nmap -p1099 --script rmi-dumpregistry,rmi-vuln-classloader <target>Remplacez <target> par l’hôte ou la plage que vous êtes autorisé à scanner.
Ce qui s'exécute sur le port 1099
Le port 1099 est le port par défaut du registre Java RMI, un service de noms du framework Remote Method Invocation de Java. Les clients interrogent le registre pour rechercher des objets distants par leur nom et obtenir des stubs qui relaient les appels de méthode vers une JVM serveur. Il est à la base des applications Java distribuées et est couramment atteint via JMX pour l'administration distante des serveurs d'applications et middlewares.
Pourquoi c'est important pour la sécurité
Le risque central de RMI est la désérialisation non sécurisée. Le protocole désérialise les objets Java fournis par l'appelant, donc si une classe gadget vulnérable se trouve dans le classpath du serveur, un attaquant peut forger une charge utile qui exécute du code arbitraire. Beaucoup d'endpoints RMI et JMX sont exposés sans authentification, transformant une simple recherche dans le registre en RCE pré-auth. Le support hérité du chargement de codebase distant aggrave l'exposition.
Comment il est attaqué
Les attaquants énumèrent le registre pour extraire les objets distants liés, puis livrent une chaîne de gadgets ysoserial sur RMI pour déclencher la désérialisation et exécuter du code. Les services JMX exposés sont frappés de la même manière, et lorsque le chargement de codebase distant est activé, l'attaquant force la JVM à charger des classes malveillantes depuis une URL qu'il contrôle.
Liste de durcissement
Gardez RMI et JMX hors des réseaux non fiables, et exigez authentification et
TLS sur les endpoints d'administration distante. Corrigez la JVM et appliquez
des filtres/listes blanches de désérialisation pour rejeter les classes
dangereuses. Désactivez le chargement de codebase distant avec
java.rmi.server.useCodebaseOnly=true, et filtrez le 1099 ainsi que les ports
dynamiques des objets RMI. Utilisez la commande nmap ci-dessus pour énumérer le
registre et tester l'exposition du classloader sur les hôtes que vous êtes
autorisé à évaluer.
Ports liés
Questions fréquentes
- Pourquoi le registre RMI sur le port 1099 est-il risqué ?
- RMI désérialise des objets contrôlés par l'attaquant. Avec un gadget vulnérable dans le classpath, un seul appel forgé donne une exécution de code à distance, souvent sans authentification.
- Le port 1099 est-il lié à JMX ?
- Oui. JMX utilise couramment RMI pour l'administration distante, avec le registre sur le 1099. Un JMX/RMI exposé est une voie bien connue vers une RCE par désérialisation.