Une vulnérabilité a été identifiée dans le noyau Linux, similaire aux vulnérabilités Copy Fail, Dirty Frag et Fragnesia, permettant à un utilisateur non privilégié d'obtenir des droits root en écrivant des données dans le cache des pages. Cette vulnérabilité a reçu le nom de code DirtyDecrypt (le problème est également mentionné sous le nom de DirtyCBC). Un prototype d'exploit est disponible.
Le numéro CVE n'est pas mentionné dans la note de l'exploit, il est seulement indiqué que les chercheurs ont découvert le problème le 9 mai, après quoi ils en ont informé les développeurs du noyau, qui ont répondu que leur découverte dupliquait un autre rapport concernant une vulnérabilité déjà corrigée. Étant donné que le correctif a déjà été inclus dans le noyau, les chercheurs ont décidé de publier l'exploit qu'ils ont développé. D'après la description à l'intérieur de l'exploit, celui-ci utilise la vulnérabilité CVE-2026-31635, dont le correctif a été intégré au noyau en avril et a été inclus dans la version de la branche 7.0.0 et le build du 18 avril 6.18.23. Le problème se manifeste à partir du noyau 6.16.
Comme dans le cas de la série de vulnérabilités Dirty Frag, la nouvelle vulnérabilité se trouve dans le pilote RxRPC, qui implémente la famille de sockets AF_RXRPC et le protocole RPC éponyme, fonctionnant au-dessus de UDP. Le problème est causé par une erreur dans la vérification de la taille des données dans la fonction rxgk_verify_response() : au lieu de vérifier « if (auth_len > len) », le code contenait « if (auth_len < len) », ce qui entraînait le passage à la fonction rxgk_decrypt_skb() de données de taille supérieure à la taille autorisée. Lors de l'exécution de la fonction rxgk_decrypt_skb(), le déchiffrement des données était effectué en injectant directement les modifications dans le cache des pages pour éviter une mise en mémoire tampon excessive. En raison de la vérification incorrecte de la taille, il était possible de réécrire des données dans le cache des pages à un décalage choisi.
L'exploitation de la vulnérabilité consiste à lire le fichier d'un programme avec le drapeau suid root (pour qu'il soit stocké dans le cache des pages) et à remplacer dans le cache des pages une partie du code du programme par du code pour lancer /usr/bin/sh. Le lancement ultérieur du programme entraînera le chargement en mémoire non pas du fichier exécutable original depuis le support, mais d'une copie modifiée provenant du cache des pages. Parmi les programmes suid prévus dans l'exploit, on trouve « /usr/bin/su », « /bin/su », « /usr/bin/mount », « /usr/bin/passwd » et « /usr/bin/chsh ».
Pour exploiter la vulnérabilité lors de la compilation du noyau, l'option CONFIG_RXGK doit être activée et le module noyau rxrpc.ko doit être disponible pour le démarrage automatique (ce dernier n'est pas compilé dans certains systèmes). L'état de correction des vulnérabilités dans les distributions peut être évalué sur les pages suivantes : Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Comme solution de contournement, il est possible de bloquer le chargement du module noyau rxrpc :
sh -c «printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true»
On peut également noter la publication sur la liste de diffusion des développeurs du noyau Linux de correctifs désactivant complètement les optimisations de l'API crypto (AF_ALG), qui utilisent un accès direct au cache de pages lors du déchiffrement avec les algorithmes «skcipher» et «aead». Les optimisations éliminent le surcroît de mise en mémoire tampon des données, mais créent des risques de vulnérabilités sérieuses. Il est supposé que leur désactivation n'entraînera qu'une légère diminution de la performance en raison de l'apparition d'une opération de copie supplémentaire dans un tampon distinct. Les correctifs ont été acceptés par le responsable du sous-système de l'API crypto et intégrés dans la branche «cryptodev», dans laquelle se développent les possibilités de transmission dans les futures versions principales du noyau Linux.
Source : opennet.ru
