Copy Fail — une vulnérabilité dans le noyau Linux permettant d'obtenir les droits root dans la plupart des distributions

Les chercheurs de Xint ont découvert une vulnérabilité dans le noyau Linux (CVE-2026-31431) permettant à un utilisateur non privilégié d'obtenir un accès root au système. Le problème a reçu le nom de code Copy Fail. Un prototype d'exploit est disponible. La possibilité d'exploitation de la vulnérabilité a été démontrée sur Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 et SUSE 16, mais il est à noter que les paquets du noyau d'autres distributions, y compris Debian, Arch, Fedora, Rocky et Alma, sont également affectés, bien qu'ils n'aient pas été testés séparément.

La vulnérabilité est due à une erreur logique dans l'API crypto (AF_ALG) du noyau Linux, introduite lors d'une optimisation en 2017 visant à éliminer le buffering excessif grâce à des opérations de chiffrement par blocs AEAD (Authenticated Encryption with Associated Data) en place. Le problème est survenu à cause d'une utilisation imprudente de la fonction splice(), qui transfère des données entre des descripteurs de fichiers et des tubes sans copie, en passant des références aux éléments dans le cache de pages. Après l'optimisation, lors du transfert d'un fichier vers un socket AF_ALG pour le déchiffrement, une référence directe aux éléments du cache de pages du noyau contenant les données du fichier était écrite dans la structure scatterlist, au lieu de référencer un tampon séparé.

Par la suite, lors du déchiffrement AEAD, les données d'authentification liées par référence (« authentication tag ») étaient mélangées avec des données authentifiables copiées dans le tampon RX (AAD, Associated Authenticated Data) et le texte chiffré, tandis que le décalage pour l'opération d'écriture dans le tag d'authentification était calculé par rapport aux données copiées sans vérification adéquate, ce qui permettait d'écraser des zones arbitraires dans le cache de pages.

La vulnérabilité permet de réécrire 4 octets à un décalage choisi à chaque requête, ce qui permet à un attaquant, en envoyant une série de requêtes, de modifier dans le cache de pages le contenu de tout fichier dans le système accessible en lecture, après avoir réussi à le placer dans le cache. Étant donné que lors de toute opération de lecture à partir de fichiers, le contenu est d'abord fourni à partir du cache de pages, après avoir remplacé les informations dans le cache de pages, le noyau ou le processus, lors de la lecture des données à partir du fichier, recevra non pas des données réelles, mais des données falsifiées, ce qui peut être utilisé pour injecter du code dans les fichiers exécutables ou les bibliothèques partagées chargées.

Pour exécuter du code avec des droits root, il suffit de modifier le cache de page pour tout fichier exécutable avec le drapeau suid root.
L'exploit proposé lit le fichier exécutable /usr/bin/su et modifie le contenu de ce fichier chargé dans le cache de page pour y injecter son propre code. Lors de l'exécution ultérieure de l'outil « su », c'est une copie modifiée du fichier qui sera chargée en mémoire au lieu de l'original depuis le stockage.

L'exploit est universel, ne nécessite pas d'adaptation aux distributions ou aux versions du noyau, et peut être utilisé avec n'importe quelle distribution. Étant donné que l'isolement des conteneurs utilise un cache de page commun pour tous les conteneurs, la vulnérabilité peut être exploitée pour obtenir un accès à l'environnement hôte depuis un conteneur (un exploit pour contourner l'isolement dans Kubernetes sera publié ultérieurement).

La vulnérabilité a été identifiée grâce à l'IA après environ une heure d'expérimentations en analysant le code de la sous-système cryptographique du noyau. Le problème apparaît à partir du noyau Linux 4.14, publié en 2017, et a été corrigé dans les noyaux 6.18.22, 6.19.12 et 7.0. L'état de correction des vulnérabilités dans les distributions peut être évalué sur ces pages : Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.

Comme solution de contournement, il est possible de désactiver le module du noyau algif_aead, qui est utilisé dans OpenSSL lorsque le moteur afalg est explicitement activé et dans certaines applications (pour vérifier la présence de telles applications exécutées, utilisez la commande « lsof | grep AF_ALG ») :

    echo « install algif_aead /bin/false » > /etc/modprobe.d/disable-algif.conf
    rmmod algif_aead

    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