Dans le serveur de messagerie Exim
Dans la configuration par défaut, l'attaque peut être effectuée sans complications inutiles par un utilisateur local, puisque l'ACL "verify = destinataire" est appliquée, qui effectue des vérifications supplémentaires pour les adresses externes. Une attaque à distance peut se produire lorsque les paramètres sont modifiés, par exemple en agissant en tant que MX secondaire pour un autre domaine, en supprimant l'ACL "verify=recipient" ou en modifiant certaines modifications apportées à local_part_suffix). Une attaque à distance est également possible si l'attaquant parvient à maintenir la connexion au serveur ouverte pendant 7 jours (par exemple, en envoyant un octet par minute pour contourner un timeout). Dans le même temps, il est possible qu’il existe des vecteurs d’attaque plus simples pour exploiter le problème à distance.
La vulnérabilité est causée par une vérification incorrecte de l'adresse du destinataire dans la fonction Deliver_message() définie dans le fichier /src/deliver.c. En manipulant le formatage de l'adresse, un attaquant peut parvenir à substituer ses données dans les arguments d'une commande appelée via la fonction execv() avec les droits root. Le fonctionnement ne nécessite pas l'utilisation de techniques complexes utilisées pour les débordements de tampon ou la corruption de la mémoire ; une simple substitution de caractères est suffisante.
Le problème est lié à l'utilisation de la construction pour la conversion d'adresse :
Deliver_localpart = expand_string(
string_sprintf("${local_part:%s}", new->address));
livrer_domaine = expand_string(
string_sprintf("${domaine:%s}", nouveau->adresse));
La fonction expand_string() est un combineur trop compliqué, incluant la reconnaissance de la commande « ${run{command arguments} », qui conduit au lancement d'un gestionnaire externe. Ainsi, pour attaquer au sein d'une session SMTP, il suffit à un utilisateur local d'envoyer une commande du type 'RCPT TO “username+${run{...}}@localhost”', où localhost est l'un des hôtes de la liste local_domains, et le nom d'utilisateur est le nom d'un utilisateur local existant.
Si le serveur fonctionne comme un relais de messagerie, il suffit d'envoyer à distance la commande 'RCPT TO "${run{...}}@relaydomain.com"', où relaydomain.com est l'un des hôtes répertoriés dans relay_to_domains. section des paramètres. Étant donné qu'Exim ne supprime pas par défaut le mode privilège (deliver_drop_privilege = false), les commandes passées via "${run{...}}" seront exécutées en tant que root.
Il est à noter que la vulnérabilité était
Un correctif pour les versions précédentes qui continuent à être utilisées dans les distributions n'est actuellement disponible que sous forme de
Source: opennet.ru