
Récemment, au début de l'été, des appels massifs ont été lancés pour mettre à jour Exim vers la version 4.92 en raison de la vulnérabilité CVE-2019-10149 (). Il a été révélé il y a quelques jours que le malware Sustes a décidé d'exploiter cette vulnérabilité.
Maintenant, tous ceux qui ont mis à jour en urgence peuvent à nouveau « se réjouir » : le 21 juillet 2019, le chercheur Zerons a découvert une vulnérabilité critique dans Exim Mail Transfer agent (MTA) lors de l'utilisation de TLS pour les versions de 4.80 à 4.92.1 inclusivement, permettant à distance d'exécuter du code avec des droits privilégiés ().
Vulnérabilité
La vulnérabilité existe lors de l'utilisation de bibliothÚques comme GnuTLS et OpenSSL lors de l'établissement d'une connexion TLS sécurisée.
Selon le développeur Heiko Schlittermann, le fichier de configuration dans Exim n'utilise pas TLS par défaut, mais de nombreuses distributions créent des certificats nécessaires et incluent une connexion sécurisée lors de l'installation. De plus, les versions plus récentes d'Exim installent l'option tls_advertise_hosts=* et génÚrent les certificats nécessaires.
dépend de la configuration. La plupart des distributions l'activent par défaut, mais Exim a besoin d'un certificat + clé pour fonctionner en tant que serveur TLS. Probablement les distributions créent un certificat lors de la configuration. Les nouvelles versions d'Exim ont l'option tls_advertise_hosts par défaut sur « * » et créent un certificat auto-signé, s'il n'est pas fourni.
La vulnĂ©rabilitĂ© elle-mĂȘme rĂ©side dans le traitement incorrect de SNI (Server Name Indication, une technologie introduite en 2003 dans le RFC 3546 pour demander au client le certificat appropriĂ© pour le nom de domaine, ) lors de l'Ă©change TLS. Il suffit que l'attaquant envoie un SNI se terminant par un antislash (« ") et un symbole nul (» «).
Les chercheurs de la sociĂ©tĂ© Qualys ont dĂ©couvert un bug dans la fonction string_printing(tls_in.sni), qui concerne l'Ă©chappement incorrect de « ". En consĂ©quence, cela entraĂźne l'Ă©criture de l'antislash sous une forme non Ă©chappĂ©e dans le fichier d'en-tĂȘtes print spool. Ensuite, ce fichier avec des droits privilĂ©giĂ©s est lu par la fonction spool_read_header(), ce qui conduit Ă un dĂ©bordement de tas (heap overflow).
Il convient de noter qu'Ă l'heure actuelle, les dĂ©veloppeurs d'Exim ont créé un PoC de la vulnĂ©rabilitĂ© permettant d'exĂ©cuter des commandes sur un serveur vulnĂ©rable Ă distance, mais il n'est pas encore accessible au public. Ătant donnĂ© la simplicitĂ© d'exploitation de ce bug, ce n'est qu'une question de temps, et plutĂŽt court.
Pour une recherche plus détaillée de la société Qualys, vous pouvez consulter .

L'utilisation de SNI dans TLS
Nombre de serveurs publics potentiellement vulnérables
Selon les statistiques d'un grand fournisseur d'hébergement E-Soft Inc au 1er septembre, sur les serveurs loués, la version 4.92 est utilisée dans plus de 70 % des hÎtes.
Version
Nombre de serveurs
Pourcentage
4.92.1
6471
1.28%
4.92
376436
74.22%
4.91
58179
11.47%
4.9
5732
1.13%
4.89
10700
2.11%
4.87
14177
2.80%
4.84
9937
1.96%
Autres versions
25568
5.04%
Statistiques de l'entreprise E-Soft Inc
Si l'on consulte le moteur de recherche , parmi 5 250 000 dans la base de données des serveurs :
- environ 3 500 000 utilisent Exim 4.92 (environ 1 380 000 avec SSL/TLS) ;
- plus de 74 000 utilisent 4.92.1 (environ 25 000 avec SSL/TLS).
Ainsi, le nombre de serveurs Exim connus et accessibles publiquement et potentiellement vulnérables est d'environ 1,5 million.

Recherche des serveurs Exim sur Shodan
Protection
- La méthode la plus simple, mais déconseillée, consiste à ne pas utiliser TLS, ce qui entraßnera l'envoi de courriels en clair.
- La solution préférée pour éviter l'exploitation de la vulnérabilité serait de mettre à jour vers la version .
- En cas d'impossibilité de mise à jour ou d'installation d'une version patchée, il est possible de définir un ACL dans la configuration d'Exim pour l'option acl_smtp_mail avec les rÚgles suivantes :
# to be prepended to your mail acl (the ACL referenced # by the acl_smtp_mail main config option) deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_sni}}}} deny condition = ${if eq{}{${substr{-1}{1}{$tls_in_peerdn}}}}
Source : habr.com
