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

Des chercheurs en sécurité de l'entreprise Qualys montré la possibilité d'exploitation ont découvert des vulnérabilités dans le serveur de messagerie qmail, bien connu depuis 2005 (CVE-2005-1513), mais restée non corrigée, car l'auteur de qmail soutenait qu'il était irréaliste de créer un exploit fonctionnel pouvant être utilisé pour attaquer des systèmes dans une configuration par défaut. Qualys a réussi à préparer un exploit qui contredit cette hypothèse et permet d'initier une exécution de code à distance sur le serveur en envoyant un message spécialement formaté.

Le problème est causé par un dépassement d'entier dans la fonction stralloc_readyplus(), qui peut survenir lors du traitement d'un message très volumineux. Un système 64 bits avec plus de 4 Go de mémoire virtuelle était nécessaire pour l'exploiter. Lors de l'analyse initiale de la vulnérabilité en 2005, Daniel Bernstein avait déclaré que l'hypothèse présente dans le code selon laquelle la taille du tableau alloué tiendrait toujours dans une valeur 32 bits était fondée sur le fait que personne ne fournirait 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, avec un volume de mémoire fourni considérablement augmenté et une bande passante réseau très accrue.

Les paquets accompagnant qmail ont pris en compte l'observation de Bernstein et, lors du lancement du processus qmail-smtpd, ont limité la mémoire disponible (par exemple, dans Debian 10, une limite de 7 Mo est fixée). Cependant, les ingénieurs de Qualys ont découvert que cela ne suffisait pas et qu'en plus de qmail-smtpd, une attaque à distance pouvait être réalisée sur le processus qmail-local, qui, dans tous les paquets vérifiés, est resté illimité. Comme preuve, un prototype d'exploit adapté pour attaquer le paquet qmail fourni avec Debian dans la configuration par défaut a été préparé.
Pour organiser l'exécution de code à distance lors de l'attaque, il est nécessaire d'avoir 4 Go d'espace libre sur le disque et 8 Go de RAM sur le serveur.
L'exploit permet d'exécuter n'importe quelle commande shell avec les droits de n'importe quel utilisateur dans le système, à l'exception des utilisateurs root et systèmes n'ayant pas leur propre sous-dossier dans le répertoire «/home» (le processus qmail-local s'exécute avec les droits de l'utilisateur local à qui la livraison est effectuée).

L'attaque est réalisée
par l'envoi d'un très grand message électronique comprenant plusieurs lignes dans l'en-tête, d'une taille d'environ 4 Go et 576 Mo. Le traitement d'une telle ligne dans qmail-local conduit à un dépassement d'entier lors de la tentative de livraison du message à un utilisateur local. Le dépassement d'entier entraîne alors un débordement de tampon lors de la copie des données et la possibilité d'écraser des zones de mémoire avec du code libc. Grâce à des manipulations de la mise en page des données transmises, il est possible d'écraser l'adresse de la fonction «open()», la remplaçant par l'adresse de la fonction «system()».

Ensuite, lors de l'appel de qmesearch() dans qmail-local, le fichier «.qmail-extension» est ouvert via la fonction open(), ce qui entraîne l'exécution effective de la fonction
system(«.qmail-extension»). Cependant, comme une partie du fichier «extension» est formée sur la base de l'adresse du destinataire (par exemple, «localuser-extension@localdomain»), les attaquants peuvent organiser l'envoi d'une commande à 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 patch supplémentaire qmail-verify, qui fait partie du package pour Debian. La première vulnérabilité (CVE-2020-3811) permet de contourner la vérification de l'adresse e-mail, et la seconde (CVE-2020-3812) conduit à une fuite d'informations locales. En particulier, la première vulnérabilité permet de contourner la vérification de la validité de l'adresse utilisée dans l'exploit pour envoyer une commande (la vérification ne s'active pas pour les adresses sans domaine, telles que «localuser-;command;»). La seconde vulnérabilité peut être utilisée pour vérifier la présence de fichiers et de répertoires dans le système, y compris ceux accessibles uniquement par root (qmail-verify s'exécute avec les privilèges root), via un appel direct au gestionnaire local.

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

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

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