Deux vulnérabilités ont été découvertes dans le noyau Linux. Similaires à la vulnérabilité Copy Fail divulguée il y a quelques jours, elles affectent cependant des sous-systèmes différents : xfrm-ESP et RxRPC. Cette série de vulnérabilités porte le nom de code Dirty Frag (également appelée Copy Fail 2). Elles permettent à un utilisateur non privilégié d'obtenir les privilèges root en écrasant les données du processus dans le cache de pages. Un exploit est disponible et fonctionne sur toutes les distributions Linux actuelles. La vulnérabilité a été divulguée avant la publication des correctifs, mais une solution de contournement existe.
Dirty Frag exploite deux vulnérabilités distinctes : la première concerne le module xfrm-ESP, utilisé pour accélérer les opérations de chiffrement IPsec via le protocole ESP (Encapsulating Security Payload), et la seconde le pilote RxRPC, qui implémente la famille de sockets AF_RXRPC et le protocole RPC du même nom, fonctionnant sur UDP. Prises séparément, chacune de ces vulnérabilités permet d'obtenir les privilèges root. La vulnérabilité xfrm-ESP est présente dans le noyau Linux depuis janvier 2017, et celle de RxRPC depuis juin 2023. Ces deux problèmes sont dus à des optimisations autorisant l'écriture directe dans le cache de pages.
Pour exploiter la vulnérabilité xfrm-ESP, l'utilisateur doit disposer des autorisations nécessaires pour créer des espaces de noms. Pour exploiter la vulnérabilité RxRPC, le module noyau rxrpc.ko doit être chargé. Par exemple, sous Ubuntu, les règles AppArmor empêchent les utilisateurs non privilégiés de créer des espaces de noms, mais le module rxrpc.ko est chargé par défaut. Certaines distributions ne possèdent pas le module rxrpc.ko, mais n'empêchent pas la création d'espaces de noms. Le chercheur ayant découvert cette faille a développé un exploit combiné capable d'attaquer le système via les deux vulnérabilités, rendant ainsi l'exploitation possible sur toutes les principales distributions. Il a été confirmé que l'exploit fonctionne sur Ubuntu 24.04.4 avec le noyau 6.17.0-23, RHEL 10.1 avec le noyau 6.12.0-124.49.1, openSUSE Tumbleweed avec le noyau 7.0.2-1, CentOS Stream 10 avec le noyau 6.12.0-224, AlmaLinux 10 avec le noyau 6.12.0-124.52.3 et Fedora 44 avec le noyau 6.19.14-300.
Comme pour la vulnérabilité Copy Fail, les problèmes rencontrés dans xfrm-ESP et RxRPC sont dus au déchiffrement de données sur place via la fonction `splice()`, qui transfère des données entre descripteurs de fichiers et tubes sans copie, en passant des références à des éléments du cache de pages. Les décalages d'écriture étaient calculés sans vérifications adéquates pour tenir compte de l'utilisation de références directes à des éléments du cache de pages, ce qui permettait à des requêtes spécialement conçues d'écraser 4 octets à un décalage donné et de modifier le contenu de n'importe quel fichier du cache de pages.
Toute opération de lecture de fichier récupère d'abord le contenu du cache de pages. Si des données du cache de pages sont modifiées, les opérations de lecture renverront des données de substitution, et non les informations réellement stockées sur le disque. L'exploitation de cette vulnérabilité consiste à modifier le cache de pages d'un fichier exécutable avec le privilège administrateur (suid). Par exemple, pour obtenir les privilèges administrateur, il est possible de lire le fichier exécutable `/usr/bin/su` afin de le placer dans le cache de pages, puis d'y substituer son propre code. L'exécution ultérieure de l'utilitaire `su` entraînera le chargement en mémoire de la copie modifiée depuis le cache de pages, et non du fichier exécutable original depuis le disque.
La divulgation de la vulnérabilité et la publication coordonnée des correctifs étaient prévues pour le 12 mai, mais une fuite a contraint à la publication anticipée des informations relatives à la vulnérabilité. Fin avril, des correctifs pour rxrpc, ipsec et xfrm ont été publiés sur la liste de diffusion publique netdev sans mentionner leur lien avec la vulnérabilité. Le 5 mai, le responsable du sous-système IPsec a accepté une modification du dépôt Git netdev proposant un correctif pour le module xfrm-esp. La description de cette modification était quasiment identique à celle du problème à l'origine de la vulnérabilité Copy Fail dans le module algif_aead. Un chercheur en sécurité, s'intéressant à ce correctif, a réussi à créer un exploit fonctionnel et l'a publié, ignorant l'embargo imposé sur la divulgation d'informations concernant ce problème jusqu'au 12 mai.
Les mises à jour corrigeant les failles du noyau Linux et des paquets associés dans les distributions n'ont pas encore été publiées, mais des correctifs sont disponibles pour xfrm-esp et rxrpc. Aucun identifiant CVE n'a été attribué, ce qui complique le suivi des mises à jour des paquets dans les distributions. En attendant, vous pouvez bloquer le chargement des modules noyau esp4, esp6 et rxrpc : `sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"`
Source: opennet.ru
