Chercheurs en sécurité de Qualys occasion vulnérabilités du serveur de messagerie qmail, 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 des paquets qmail ont pris en compte la remarque de Bernstein et ont limité la mémoire disponible lors du démarrage du processus qmail-smtpd (par exemple, dans Debian La version 10 fixe une limite de 7 Mo. Cependant, les ingénieurs de Qualys ont découvert que cette limite était insuffisante et qu'en plus de qmail-smtpd, une attaque à distance pouvait être menée sur le processus qmail-local, dont la taille restait illimitée dans tous les paquets testés. À titre de preuve, un prototype d'exploit a été préparé, permettant d'attaquer le paquet fourni dans Debian paquet avec qmail en 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 est inclus dans le package pour Debian. Première vulnérabilité () vous permet de contourner la vérification de l'adresse e-mail, et le second () 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 , inclus dans les dépôts DebianUn ensemble de correctifs a été préparé pour ce paquet, éliminant à la fois d'anciennes vulnérabilités datant de 2005 (en ajoutant des limites de mémoire strictes au code de la fonction alloc()) et de nouveaux problèmes dans qmail-verify. Par ailleurs, version mise à jour du correctif qmail-verify. Développeurs 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
