Chercheurs en sécurité de Qualys
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é (
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
Source: opennet.ru