Vulnérabilité exploitable à distance dans le serveur de messagerie qmail

Chercheurs en sécurité de Qualys montré occasion Exploitation vulnérabilités du serveur de messagerie qmail, célèbre en 2005 (CVE-2005-1513), mais n'a pas été corrigé car l'auteur de qmail a fait valoir qu'il était irréaliste de créer un exploit fonctionnel qui pourrait être utilisé pour attaquer des systèmes dans la configuration par défaut. Qualys a pu préparer un exploit qui réfute cette hypothèse et permet de lancer l'exécution de code à distance sur le serveur en envoyant un message spécialement conçu.

Le problème est dû à un dépassement d'entier dans la fonction stralloc_readyplus(), qui peut se produire lors du traitement d'un message très volumineux. Le fonctionnement nécessitait un système 64 bits avec plus de 4 Go de mémoire virtuelle. Lorsque la vulnérabilité a été analysée pour la première fois en 2005, Daniel J. Bernstein a fait valoir que l'hypothèse du code selon laquelle la taille du tableau alloué est toujours inférieure à 32 bits était basée sur le fait que personne ne fournit des gigaoctets de mémoire à chaque processus. Au cours des 15 dernières années, les systèmes 64 bits sur les serveurs ont remplacé les systèmes 32 bits, et la quantité de mémoire fournie et la bande passante réseau ont considérablement augmenté.

Les responsables du paquet qmail ont pris en compte la note de Bernstein et ont limité la mémoire disponible lors du démarrage du processus qmail-smtpd (par exemple, dans Debian 10, la limite est fixée à 7 Mo). Mais les ingénieurs de Qualys ont constaté que cela ne suffisait pas et, en plus de qmail-smtpd, une attaque à distance peut être menée sur le processus qmail-local, qui est resté illimité dans tous les packages testés. Pour preuve, un prototype d'exploit a été préparé, adapté pour attaquer le paquet Debian avec qmail dans la configuration par défaut.
Pour organiser l'exécution de code à distance lors d'une attaque, le serveur nécessite 4 Go d'espace disque libre et 8 Go de RAM.
L'exploit vous permet d'exécuter n'importe quelle commande shell avec les droits de n'importe quel utilisateur du système, à l'exception des utilisateurs root et système qui n'ont pas leur propre sous-répertoire dans le répertoire « /home » (le processus qmail-local est lancé avec les droits de l'utilisateur local auquel la livraison est effectuée).

L'attaque est menée
en envoyant un message électronique très volumineux, comprenant plusieurs lignes d'en-tête, mesurant environ 4 Go et 576 Mo. Le traitement d'une telle chaîne dans qmail-local entraîne un débordement d'entier lors de la tentative de remise d'un message à l'utilisateur local. Un débordement d'entier entraîne alors un débordement de buffer lors de la copie des données et la possibilité d'écraser des pages mémoire avec du code libc. En manipulant la disposition des données transmises, il est également possible de réécrire l'adresse de la fonction « open() », en la remplaçant par l'adresse de la fonction « system() ».

Ensuite, lors du processus d'appel de qmesearch() dans qmail-local, le fichier « .qmail-extension » est ouvert via la fonction open(), ce qui conduit à l'exécution réelle de la fonction.
système(".qmail-extension"). Mais comme la partie « extension » du fichier est générée en fonction de l'adresse du destinataire (par exemple, « localuser-extension@localdomain »), les attaquants peuvent faire en sorte que la commande soit envoyée pour s'exécuter en spécifiant l'utilisateur « localuser-;command ;@localdomain » comme destinataire du message.

Lors de l'analyse du code, deux vulnérabilités ont également été identifiées dans le correctif supplémentaire qmail-verify, qui fait partie du paquet pour Debian. Première vulnérabilité (CVE-2020-3811) vous permet de contourner la vérification de l'adresse e-mail, et le second (CVE-2020-3812) conduit à une fuite d’informations locales. En particulier, la première vulnérabilité permet de contourner la vérification de l'exactitude de l'adresse utilisée dans l'exploit pour envoyer une commande (la vérification ne fonctionne pas pour les adresses sans domaine, comme « localuser-;command; »). La deuxième vulnérabilité peut être utilisée pour vérifier la présence de fichiers et de répertoires sur le système, y compris ceux accessibles uniquement par root (qmail-verify s'exécute avec les droits root), via un appel direct au gestionnaire local.

Pour contourner le problème, Bernstein a recommandé d'exécuter des processus qmail avec une limite totale de mémoire disponible (« softlimit -m12345678 »), auquel cas le problème est bloqué. Comme méthode alternative de protection, la limitation de la taille maximale du message traité via le fichier « control/databytes » est également mentionnée (par défaut il n'est pas créé avec les paramètres par défaut, qmail reste vulnérable). De plus, "control/databytes" ne protège pas contre les attaques locales des utilisateurs du système, puisque la limite n'est prise en compte que par qmail-smtpd.

Le problème affecte le package netqmail, inclus dans les dépôts Debian. Un ensemble de correctifs a été préparé pour ce paquet, éliminant à la fois les anciennes vulnérabilités de 2005 (en ajoutant des limites de mémoire strictes au code de la fonction alloc()) et les nouveaux problèmes dans qmail-verify. Séparément préparé version mise à jour du correctif qmail-verify. Développeurs branches notqmail ont préparé leurs propres correctifs pour bloquer les anciens problèmes et ont également commencé à travailler pour éliminer tous les débordements d'entiers possibles dans le code.

Source: opennet.ru

Ajouter un commentaire