Référence des ports
Port 4369 (TCP) – Erlang Port Mapper Daemon (epmd)
Serveur de noms qui mappe les noms de nœuds Erlang aux ports TCP de leurs listeners de distribution.
État par défaut
Souvent à l'écoute sur toutes les interfaces là où tourne une application Erlang/Elixir (RabbitMQ, CouchDB, ejabberd). epmd lui-même n'exige aucune authentification ; la vraie barrière est le cookie de distribution Erlang.
Attaques courantes
- Énumération des noms de nœuds Erlang et des ports de distribution via epmd
- RCE Erlang distribué via un cookie faible, par défaut ou devinable
- Pivot vers les back-ends RabbitMQ, CouchDB ou ejabberd
- Divulgation d'informations sur les nœuds en cluster et la topologie
Durcissement
- Ne jamais exposer le 4369 ni la plage de ports de distribution à Internet
- Lier epmd à localhost ou à une interface privée (ERL_EPMD_ADDRESS)
- Utiliser un cookie Erlang long et aléatoire et protéger les permissions de ~/.erlang.cookie
- Filtrer epmd et les ports de distribution dynamiques vers les hôtes de cluster de confiance
- Activer le TLS pour la distribution Erlang et garder le runtime BEAM à jour
Commande nmap
nmap -p4369 --script epmd-info <target>Remplacez <target> par l’hôte ou la plage que vous êtes autorisé à scanner.
Ce qui s'exécute sur le port 4369
Le port 4369 est le Erlang Port Mapper Daemon (epmd). Quand un nœud Erlang ou Elixir démarre la distribution, il enregistre son nom de nœud auprès d'epmd, qui indique ensuite aux autres nœuds quel port TCP utiliser pour le joindre. On trouve epmd partout où tourne le runtime BEAM en cluster — notamment RabbitMQ, CouchDB et ejabberd.
Pourquoi c'est important pour la sécurité
epmd n'a aucune authentification propre ; il révèle librement les noms de
nœuds et les ports. La vraie frontière de confiance est le cookie de
distribution Erlang, un secret partagé stocké dans ~/.erlang.cookie. Si ce
cookie est faible, par défaut ou devinable, quiconque atteint le port de
distribution peut rejoindre le cluster et exécuter du code arbitraire — en
pratique une exécution de code à distance sur l'hôte.
Comment c'est attaqué
Les attaquants interrogent epmd (par ex. le script NSE epmd-info) pour
énumérer les noms de nœuds et leurs ports de distribution. Ils tentent
ensuite de se connecter comme nœud pair avec un cookie par défaut ou
brute-forcé. Une poignée de main réussie leur permet d'évaluer de l'Erlang
arbitraire, pivotant directement dans le back-end RabbitMQ, CouchDB ou
ejabberd.
Liste de durcissement
N'exposez jamais le 4369 ni la plage de ports de distribution dynamiques à
Internet. Liez epmd à localhost ou à une interface privée
(ERL_EPMD_ADDRESS) et filtrez epmd et les ports de distribution vers les hôtes
de cluster de confiance. Utilisez un cookie long et aléatoire et verrouillez
les permissions de ~/.erlang.cookie. Activez le TLS pour la distribution
Erlang et gardez le runtime BEAM à jour. Utilisez la commande nmap ci-dessus
pour vérifier l'exposition sur les hôtes que vous êtes autorisé à tester.
Ports liés
Questions fréquentes
- epmd est-il lui-même authentifié ?
- Non. epmd n'est qu'un annuaire nom-vers-port et répond à quiconque se connecte. La sécurité dépend entièrement du cookie de distribution Erlang et du filtrage à la fois du 4369 et des ports de distribution dynamiques.
- Comment le port 4369 mène-t-il à l'exécution de code à distance ?
- Une fois qu'un attaquant connaît un nom de nœud via epmd et connaît ou devine le cookie partagé, il peut rejoindre le cluster Erlang en tant que nœud et évaluer du code arbitraire sur la cible — une RCE complète sur les hôtes RabbitMQ, CouchDB ou ejabberd.