Vulnérabilités dans OpenSMTPD permettant d'obtenir des droits root à distance et localement

La société Qualys a détecté une autre vulnérabilité critique à distance (CVE-2020-8794) dans le serveur de messagerie OpenSMTPD, développé par le projet OpenBSD. Comme celle identifiée fin janvier CVE-2020-10174, ce nouveau problème permet d'exécuter à distance des commandes shell arbitraires sur un serveur avec les droits de l'utilisateur root. La vulnérabilité a été corrigée dans la version OpenSMTPD 6.6.4p1.

Le problème est causé par une erreur dans le code gérant la livraison des e-mails vers un serveur de messagerie distant (et non dans le code traitant les connexions entrantes). L'attaque peut se produire côté client ou côté serveur. Côté client, l'attaque peut se produire dans la configuration par défaut d'OpenSMTPD, où OpenSMTPD accepte les requêtes uniquement sur l'interface réseau interne (localhost) et envoie des messages sur des serveurs externes. Pour exploiter la vulnérabilité, il suffit qu'au cours de la livraison d'un e-mail, OpenSMTPD établisse une session avec un serveur de messagerie contrôlé par l'attaquant, ou que l'attaquant puisse intercepter la connexion du client (MITM ou redirection dans le cadre d'attaques via DNS ou BGP).

Pour attaquer côté serveur, il est nécessaire qu'OpenSMTPD soit configuré pour accepter des requêtes réseau externes d'autres serveurs de messagerie ou qu'il gère des services tiers permettant d'envoyer des demandes à un e-mail arbitraire (par exemple, des formulaires de confirmation d'adresse sur des sites). Par exemple, un attaquant peut se connecter au serveur OpenSMTPD et envoyer un e-mail incorrect (à un utilisateur inexistant), ce qui entraînera l'envoi d'une réponse avec un code d'erreur (bounce) vers le serveur de l'attaquant. L'attaquant peut exploiter la vulnérabilité au moment où OpenSMTPD se connecte pour livrer un avis sur le serveur de l'attaquant. Les commandes shell injectées lors de l'attaque sont placées dans un fichier qui est exécuté avec des droits root lors du redémarrage d'OpenSMTPD, c'est pourquoi l'attaquant doit attendre le redémarrage d'OpenSMTPD ou provoquer un crash d'OpenSMTPD.

Le problème se trouve dans la fonction mta_io() du code qui analyse la réponse multiligne renvoyée par le serveur distant après l'établissement de la connexion (par exemple, «250-ENHANCEDSTATUSCODES» et «250 HELP»). Dans OpenSMTPD, il est prévu que la première ligne contienne un nombre à trois chiffres et un texte, séparés par le caractère «-», et que la seconde ligne contienne un nombre à trois chiffres et un texte, séparés par un espace. Si la seconde ligne ne suit pas d'un espace et d'un texte après le nombre à trois chiffres, le pointeur utilisé pour déterminer le texte est réglé sur le byte suivant le caractère ‘\0’, et une tentative de copie dans le tampon de données, suivant la fin de la ligne, est effectuée.

À la demande du projet OpenBSD, la publication des détails sur l'exploitation de la vulnérabilité est reportée au 26 février, afin de donner aux utilisateurs le temps de mettre à jour leurs systèmes. Le problème est présent dans la base de code depuis décembre 2015, mais l'exploitation permettant l'exécution de code avec des droits root est possible depuis mai 2018. Des chercheurs ont préparé un prototype fonctionnel de l'exploitat, qui a été testé avec succès sur les versions OpenSMTPD pour OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (testing) et Fedora 31.

Dans OpenSMTPD, il y a aussi une vulnérabilité a été identifiée une autre vulnérabilité (CVE-2020-8793) qui permet à un utilisateur local de lire la première ligne de tout fichier dans le système. Par exemple, il est possible de lire la première ligne de /etc/master.passwd, qui contient le hachage du mot de passe de l'utilisateur root. Cette vulnérabilité permet également de lire l'intégralité du contenu d'un fichier appartenant à un autre utilisateur, si ce fichier se trouve dans le même système de fichiers que le répertoire /var/spool/smtpd/. Le problème n'est pas exploitable dans de nombreuses distributions Linux, où la valeur /proc/sys/fs/protected_hardlinks est fixée à 1.

Le problème est le résultat d'une élimination incomplète des problèmes, soulevés lors de l'audit effectué par Qualys en 2015. Un attaquant peut obtenir l'exécution de son code avec les droits du groupe «_smtpq», en définissant la variable «PATH=.» et en plaçant un script nommé makemap dans le répertoire courant (l'utilitaire smtpctl exécute makemap sans mentionner explicitement le chemin). Ayant accès au groupe «_smtpq», l'attaquant peut ensuite provoquer une condition de course (créer un grand fichier dans le répertoire offline et envoyer un signal SIGSTOP) et, avant que le traitement ne soit terminé, remplacer le fichier dans le répertoire offline par un lien symbolique rigide pointant vers le fichier cible dont le contenu doit être lu.

Il est remarquable qu'avec Fedora 31, la vulnérabilité permet d'obtenir immédiatement des privilèges de groupe root, car le processus smtpctl est doté du drapeau setgid root, au lieu de setgid smtpq. En accédant au groupe root, il est possible de réécrire le contenu de /var/lib/sss/mc/passwd et d'obtenir un accès root complet au système.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster