Skip to content

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.

tcpRegisteredSouvent attaqué

É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.