PinTheft — la sixième vulnérabilité de la classe Copy Fail, offrant des droits root sous Linux

Des informations ont été révélées concernant la sixième vulnérabilité (1, 2-3, 4, 5), permettant à un utilisateur local non privilégié d'obtenir des droits root en réécrivant des données dans le cache de la page. La vulnérabilité a été nommée PinTheft. Un prototype d'exploit est disponible. L'identifiant CVE n'a pas encore été attribué. Le correctif est pour l'instant disponible uniquement sous forme de patch, qui a été publié le 5 mai et a été accepté dans la branche netdev le 11 mai, mais n'a pas été intégré dans les versions correctrices du noyau.

La vulnérabilité est présente dans l'implémentation du protocole réseau RDS (Reliable Datagram Sockets), conçu pour un échange de messages à haute vitesse entre les nœuds d'un cluster, avec une latence minimale et une livraison garantie. Une attaque est possible sur des systèmes avec le sous-système io_uring activé (io_uring_disabled=0) et un noyau compilé avec les options CONFIG_RDS, CONFIG_RDS_TCP et CONFIG_IO_URING. Pour que l'exploit fonctionne, un fichier exécutable avec le drapeau SUID-root doit être accessible en lecture sur le système.

Pour charger automatiquement le module du noyau rds_tcp, l'exploit demande l'envoi de données via RDS en utilisant le transport SO_RDS_TRANSPORT=2. Il est à noter que parmi les distributions Linux testées, le module du noyau rds est uniquement fourni dans la configuration par défaut d'Arch Linux. Pour bloquer la vulnérabilité par un contournement, il est possible de désactiver le chargement automatique des modules du noyau rds et rds_tcp : rmmod rds_tcp rds printf ‘install rds /bin/false\ninstall rds_tcp /bin/false\n’ > /etc/modprobe.d/pintheft.conf

La vulnérabilité est due à une erreur dans l'implémentation du mécanisme zerocopy dans la fonction rds_message_zcopy_from_user(), qui effectue une modification directe des données dans le cache de la page pour éviter une mise en mémoire tampon inutile. En cas d'échec, le champ rm->data.op_nents n'était pas nettoyé, ce qui entraînait une double libération de la mémoire (double-free). L'apparition d'une valeur incorrecte dans le compteur de références a pu être exploitée pour réécrire des données dans le cache de la page grâce à une manipulation du pointeur sur un tampon fixe io_uring.

Dans le reste, le mécanisme d'exploitation est typique de toutes les vulnérabilités de cette classe : l'attaquant parvient à faire en sorte qu'un fichier de programme avec le drapeau suid root se retrouve dans le cache de pages, puis insère du code dans l'en-tête ELF pour exécuter /usr/bin/sh. Après cette manipulation, l'exécution du programme entraîne le chargement en mémoire non du fichier exécutable original depuis le support, mais d'une copie modifiée du cache de pages. Contrairement aux exploitations précédentes, cette nouvelle version est adaptée uniquement pour une attaque contre l'outil « su », mais peut également être utilisée en présence de programmes avec suid dans le système, tels que mount, passwd, chsh, newgrp, umount et pkexec.

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