version corrective avec correction d'une issue critique (), qui dans la configuration par défaut peut permettre l'exécution de code à distance par un attaquant avec des droits root. Le problème se manifeste uniquement lorsque le support TLS est activé et est exploité via l'envoi d'un certificat client spécialement formé ou d'une valeur modifiée dans le SNI. La vulnérabilité a été signalée par Qualys.
Le problème dans le gestionnaire d'échappement des caractères spéciaux dans la chaîne ( depuis string.c) et est causée par le fait que le caractère ‘\’ à la fin de la chaîne est interprété avant le caractère nul (‘\0’) et l’échappe. Lors de l'échappement, la séquence ‘\’ et le code nul suivant à la fin de la chaîne sont traités comme un seul caractère et le pointeur est déplacé vers des données en dehors de la chaîne, qui sont traitées comme sa continuation.
Le code appelant string_interpret_escape() alloue un tampon sous le flux, basé sur la taille réelle, et le pointeur se retrouve dans une zone en dehors des limites du tampon. Par conséquent, lors du traitement de la chaîne d'entrée, une situation de lecture de données en dehors des limites du tampon alloué se produit, et la tentative d'écriture de la chaîne déséchappée peut entraîner une écriture au-delà du tampon.
Dans la configuration par défaut, la vulnérabilité peut être exploitée via l'envoi de données spécialement formées dans le SNI lors de l'établissement d'une connexion sécurisée au serveur. Le problème peut également être exploité en modifiant les valeurs peerdn dans les configurations réglées pour l'authentification par certificat client, ou lors de l'importation de certificats. L'attaque via SNI et peerdn est possible à partir de la version , où la fonction string_unprinting() a été utilisée pour déséchapper le contenu de peerdn et SNI.
Un prototype d'exploit pour l'attaque via SNI a été préparé, fonctionnant sur des architectures i386 et amd64 dans des systèmes Linux avec Glibc. L'exploit utilise le chevauchement de données sur la zone de tas, entraînant la réécriture de la mémoire où est stocké le nom du fichier journal. Le nom du fichier est remplacé par «/..../..../..../..../..../..../..../..../etc/passwd». Ensuite, la variable avec l'adresse de l'expéditeur, qui est d'abord enregistrée dans le journal, est réécrite, permettant d'ajouter un nouvel utilisateur au système.
Des mises à jour de paquets corrigeant la vulnérabilité ont été publiées par les distributions , , , et . RHEL et CentOS concernant ce problème. , car Exim n'est pas inclus dans leur dépôt de packages standard (dans une mise à jour , mais pour l'instant dans le dépôt public). Dans le code d'Exim, le problème est corrigé par une ligne de code , qui désactive l'effet d'échappement du backslash s'il se trouve à la fin de la ligne.
Comme solution de contournement pour bloquer la vulnérabilité, il est possible de désactiver la prise en charge de TLS ou d'ajouter à
la section ACL «acl_smtp_mail»:
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_sni}}}}
deny condition = ${if eq{\\}{${substr{-1}{1}{$tls_in_peerdn}}}}
Source : opennet.ru
