Connexion Premium

Copy fail : depuis 2017, une faille dans le noyau Linux permettait à un utilisateur de passer root

Une optimisation trop rapide

Copy fail : depuis 2017, une faille dans le noyau Linux permettait à un utilisateur de passer root

Illustration : Flock

Depuis 2017, une vulnérabilité dans le module cryptographique authencesn du noyau Linux laissait à un compte d’un simple utilisateur la possibilité de passer en root. Elle concerne la plupart des grandes distributions jusqu’au déploiement du patch, qui est déjà en cours.

C’est l’entreprise de sécurité Xint.io qui a révélé, ce mercredi 29 avril, cette vulnérabilité (CVE-2026-31431, d’une sévérité élevée de 7,8/10) permettant une élévation des privilèges en local.

Le score n’est « que » de 7,8 car le vecteur d’attaque est local (AV:L) : il faut déjà avoir un accès local sur la machine, ici un compte utilisateur. La même avec une attaque depuis le réseau (AV:N) se serait approchée de 10.

N’importe qui peut devenir root

Appelée « Copy Fail », celle-ci permet (sans accès au réseau, sans utiliser de fonctionnalités de débogage du noyau et sans avoir installé quoi que ce soit avant) à toute personne possédant un simple compte utilisateur sur quasiment n’importe quelle distribution Linux d’obtenir les privilèges root et donc d’y faire tout ce qu’elle veut.

Comme l’explique l’entreprise sur le site dédié à la faille, « un utilisateur local sans privilèges peut écrire quatre octets contrôlés dans le page cache de n’importe quel fichier accessible en lecture sur un système Linux, et s’en servir pour obtenir les privilèges root ».

Les responsables des distributions ont commencé à mettre à jour le paquet de leur noyau Linux pour bloquer l’utilisation d’une faille de sécurité qui se situait directement dans le noyau. Le danger concerne les systèmes partagés entre plusieurs utilisateurs, les clusters de conteneurs (Kubernetes, Docker…), etc. Un utilisateur lambda pourrait ainsi accéder aux données des autres utilisateurs.

Une faille dans le module cryptographique authencesn du noyau

Xint.io explique que cette faille a été découverte par le chercheur de l’entreprise Theori, Taeyang Lee, en étant assisté par l’IA de son outil Xint Code alors qu’il étudiait la manière dont le sous-système de cryptographie de Linux interagit avec les données stockées dans le page cache. C’est un système de cache qui permet au noyau d’avoir un accès plus rapide à certaines informations.

De fait, c’est un bug dans le module cryptographique authencesn du noyau Linux qui est en cause, accessible via l’interface de socket AF_ALG, en combinaison avec l’appel système splice(). « Un utilisateur peut ouvrir un socket, le lier à n’importe quel modèle AEAD (chiffrement authentifié avec données associées) et lancer le chiffrement ou le déchiffrement de données arbitraires. Aucun privilège n’est requis », explique Xint. De son côté, la fonction splice() transfère des données entre les descripteurs de fichiers et les pipes sans les copier, en renvoyant simplement les page caches par référence.

En utilisant un script Python très court (732 octets) qui ne fait appel qu’à des bibliothèques standard et ciblant le page cache du noyau, il est possible d’accéder au binaire qui permet d’être superutilisateur : /usr/bin/su. La modification se fait en mémoire, pas directement sur le périphérique de stockage.

Une ligne de commande suffit…

Nous l’avons testé sur un de nos VPS avec Ubuntu 24.04 LTS, nous sommes bien passés en root avec une seule ligne de commande en utilisant le script Python :

Les chercheurs ont constaté la faille sur les distributions Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 ou encore SUSE 16 et expliquent logiquement que « les autres distributions utilisant les noyaux concernés — Debian, Arch, Fedora, Rocky, Alma, Oracle, ainsi que les distributions embarquées — présentent le même comportement ».

Un patch pour le noyau a déjà été proposé et accepté. Celui-ci supprime une optimisation des opérations AEAD qui avait été ajoutée en 2017. « Mettez à jour le paquet du noyau de votre distribution avec une version incluant le commit a664bf3d603d de la branche principale », expliquent les chercheurs, « la plupart des principales distributions proposent désormais ce correctif », comme Debian (Forky et Sid), Ubuntu, par exemple mais la mise en place est encore en cours chez Red Hat et Suse.

Commentaires (48)

votre avatar
moche
votre avatar
la plupart des principales distributions proposent désormais ce correctif », comme Debian, Ubuntu, Suse, ou encore chez Red Hat, par exemple.

--> Non, pas Debian en tout cas.

J'ai patché toutes les workstations avec le correctif proposé :

echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
votre avatar
Sur mes debian, le module n'a jamais été activé :


rmmod: ERROR: Module algif_aead is not currently loaded
votre avatar
De mon côté j'ai testé le script python, et j'ai pu passer root tranquillou sur une Debian 13 T_T

Donc patch en urgences des workstations :)
votre avatar
C’est pas parce qu’il est pas activé qu’il est pas activable. Or, faire appel à ce module même sans privilège l’active automatiquement.
La modification du fichier /etc/modprobe.d/disable-algif-aead.conf est indispensable pour s’assurer que quand un programme provoque son activation, ça échoue, le désactiver ne suffit pas.
Suffit de lancer le PoC sur une machine sur laquelle le module est désactivé et de voir qu’il passe quand même pour voir le problème… (s’il marche pas ça garantie pas que c’est safe, il peut échouer pour d’autres raisons, dans le doute mettre à jour le kernel et/ou appliquer cette configuration est préférable dans tous les cas).
votre avatar
Oui, effectivement. J'ai rajouté en précision " (Forky et Sid)"
votre avatar
Il aurait mieux valu écrire que les versions stables sont sans correctifs et que seules les versions unstable et testing sont corrigées.
Ces chercheurs qui divulguent des failles avant que les versions de toutes les distributions majeurs soient corrigées sont irresponsables.
C'est dommage de ne pas vérifier leurs dires avant de tranquilliser à tort les utilisateurs.

Par contre, le patch du noyau date du 31 mars. C'est surprenant que Debian ne l'ait pas encore intégré.
Il y a probablement eu un manque de communication sur le fait que c'est une vulnérabilité du noyau. Le commentaire du commit n'aide pas à être alerté sur l'importance de la correction.

Remarque : sur ma Debian 12, le script python ne fonctionne pas : il me demande un mot de passe (de root, je suppose) et échoue donc. Je n'ai pas creusé plus que cela.
votre avatar
Y'a eu un GROS GROS bug dans la gestion de cette vuln.
Le timing est ultra clair:


  • 2026-03-23 : Reported to Linux kernel security team

  • 2026-03-24 : Initial acknowledgment

  • 2026-03-25 : Patches proposed and reviewed

  • 2026-04-01 : Patch committed to mainline

  • 2026-04-22 : CVE-2026-31431 assigned

  • 2026-04-29 :Public disclosure

votre avatar
J'ai l'impression que quelqu'un a raté la communication sous NDA auprès des distributions pour backporter le patch.... 🫣
votre avatar
Pour tous ceux lisant cela après 2024-04-30T21:30+0200 et s'inquiétant de Debian stable, cf. ce commentaire
votre avatar
La bonne nouvelle c'est qu'une ribambelle de matos non mis à jour par les fabricants, va pouvoir être rooté et modifiés.
On peut se demander s'il va être possible de rooter sur Android des appareils dont le bootloader est verrouillé ?
votre avatar
Grâce au confinement selinux et/ou le filtrage seccomp, probablement pas. Et encore heureux.
votre avatar
Actuellement, je ne vois aucun correctif sur les pages indiquées, ni pour Debian, ni pour Ubuntu, ni pour Suse, ni pour Red Hat. Il y a bien une page à propos de la CVE qui indique les versions affectées, mais pas encore de paquet correctif.
votre avatar
Si linux fait comme windows, ça va devenir de plus en plus facile de migrer ! :mrgreen::pastaper:
votre avatar
Aucune distrib n'est encore à jour.
Cette vuln est un fail magistral des process de patching sous NDA des équipes upstream.
2026-03-23 : Reported to Linux kernel security team
2026-03-24 : Initial acknowledgment
2026-03-25 : Patches proposed and reviewed
2026-04-01 : Patch committed to mainline
2026-04-22 : CVE-2026-31431 assigned
2026-04-29 :Public disclosure
=> Et donc pourquoi c'est pas dans les downstream de TOUTES LES DISTRO §§§§

Et il faudra sérieusement se poser la question de QUI a introduit ce commit en 2017.

side node:
les désactivations du module marchent sur les distrib à module.

Sur les EL & dérivés, il faut modifier le bootloader grub pour désactiver la feature qui est kernel native.

La bonne nouvelle c'est qu'on peut le faire assez rapidement avec grubby:
grubby --update-kernel ALL --args='initcall_blacklist=algif_aead_init'

puis juste un reboot suffit.

side note bis:
la fonctionnalité "kernel native" semble assez proche de zéro en terme d'utilité. Ca se voit avec les effets de la désactivation (proche de zéro). On peut donc vraiment se demander POURQUOI ce truc a été injecté dans le kernel ...
votre avatar
mise à jour de la procédure pour les RHEL & dérivés:
grubby --update-kernel ALL --args='initcall_blacklist=algif_aead_init'

puis juste un reboot suffit.
votre avatar
j'allais le dire, testé sur mon ordi de dev ce matin, je suis bien passé en root sans mdp. Ceci dis, la "mode" d’exécuter du code chargé depuis internet me fait un peu flipper, niveau sécurité c'est n'importe quoi.
votre avatar
Oui, avec cette sale mode de balancer des tutos / install à coup de curl | bash, la vigilance s'endort.

M'enfin, entre ça et les tutos qui disent de désactiver les mécanismes de sécurité par facilité... (j'en pouvais plus de ceux qui disaient de désactiver SELinux à la moindre contrariété)

On a le darwinisme qu'on mérite.
votre avatar
PermissionError: [Errno 13] Permission denied: '/bin/su' (pas de /usr, c’est le bon chemin sous Gentoo).

Bon ben pas besoin de patch. :8
votre avatar
N’importe quel fichier suid peut être utilisé à la place, su n’est que l’exemple utilisé dans le PoC parce que présent de base sur de nombreuses distributions.
votre avatar
Je précisais juste parce que j’ai dû modifier le chemin dans le script python (après l’avoir reformaté et analysé—la création d’un binaire ELF n’est pas très subtile) donc ce n’est pas celui cité dans l’article.
votre avatar
S'il n'y a qu'un compte utilisateur, pas/peu de problème alors ? C'est surtout risqué sur un appareil partagé ?
votre avatar
Si tu laisses ta session ouverte sans surveillance, ça peut être un problème.
votre avatar
Après, c’est un moyen d’escalader d’autres failles. Une supplychain attack sur un module NPM que t’utilises en dépendance dans ton dev (par exemple), et hop, ça passe de « exécution de code arbitraire » à « exécution de code arbitraire en root ».
Ça permet aussi de sortir des containers (pas encore de PoC sur ce point cela dit).
Donc bon, oui, moins critique sur les postes personnels mono-utilisateurs (c’est d’ailleurs indiqué dans la description de la CVE), mais… pas anodin pour autant.
votre avatar
si c'est ton ordi, peu de risque, de toute façon tu devient sudo en rentrant ton mot de passe. Si c'est un ordi avec des accès limité par des personnes potentiellement malveillante -> aie aie aie !!!! :eeek2:
votre avatar
J'essayais de comprendre la portée du problème, pas de chercher une explication pour mon cas personnel. Autour de moi personne ne sait ce qu'est un terminal de commande, donc je suis assez tranquille (et je verrouille la session dès que je m'éloigne 5s, par réflexe de sécurité mais surtout pour mettre en veille l'écran et la conso).
votre avatar
Je vois plein de gens qui ont lancé le PoC «pour vérifier». S'il vous plaît, ne le faites pas. Vous êtes en train d'exécuter un script python dont vous ne savez rien. Et les mecs qui ont écrit ce truc sont cintrés : le code est illisible et semble sortir d'une compétition pour produire le code le plus court possible. NE LANCEZ PAS DES TRUCS QUE VOUS NE COMPRENEZ PAS. Ce ne serait pas la première fois qu'un PoC ou un exploit se révèle être malicieux.

Je partage en tout cas l'avis d'autres sur le timing absolument irresponsable sur la révélation de cette vuln. Et quand je vois à quoi ressemble le PoC, j'en conclus que ces gens ne vivent pas dans la réalité (en tout cas pas la mienne).
votre avatar
Certes.
Sauf que le code en question te rend bien la main en tant que root.

Donc une fois que tu as jaugé que ça marche, pas besoin de le faire sur 50 machines...
votre avatar
Sauf que le code en question te rend bien la main en tant que root.
Sauf que tu ne sais pas ce qu'il a fait entre temps et il a pu facilement passer des instructions cachés à ton insu.
Par exemple en passant à curl une version différente de celle que ton navigateur t'as montré comme bien expliqué sur
https://tferdinand.net/pourquoi-curl-bash-est-une-mauvaise-habitude-dangereuse/
votre avatar
Je ne dis pas autre chose!

J'indique uniquement qu'à partir du moment où tu l'a proofé dans une sandbox, tu peux conclure que l'intégralité de ton parc ayant les mêmes specs que ta sandbox sera vulnérable.

le POC n'a pas besoin d'être executé sur tout ton parc pour démontrer son efficacité.
A l'inverse, les mitigation factors, une fois identifiés peuvent eux être executés PARTOUT.

Et à date, la désactivation du module inline/déchargement de la feature via grub semblent des mesures de contournement/blocage assez efficace, et avec un risque/impact faible.
votre avatar
Merci Irestoux !!!
J'en peux plus de toute cette précipitation.

J'ai l'impression que tout le monde deviens fou et fait n'importe quoi.
votre avatar
Tu peux le lancer sur une machine de test pour constater que toutes tes machines de prod avec la même conf sont touchées… ou au pire t’appliques le correctif (màj kernel ou workaround) sans tester. Ça risque rien et au moins t’es peinard ensuite.
votre avatar
Absolument ! J'ai juste désactivé le module (qui n'était visiblement pas utilisé) avec les commandes que je comprends ci-dessus, tapées à la main. Ca permettra d'attendre la patch de ma vieille 20.04 en ESM plus sereinement !
votre avatar
NE LANCEZ PAS DES TRUCS QUE VOUS NE COMPRENEZ PAS. Ce ne serait pas la première fois qu'un PoC ou un exploit se révèle être malicieux.
Je plussoie. Même combat que pour ceux qui téléchargent des ISO Windows "optimisées". Vous n'avez aucune idée de ce qu'il y a dedans.

En plus, ce bug est l'illustration qu'on pouvait cacher (et on le peut certainement encore) en une seule ligne des petits "cadeaux", même si on pensait être en sécurité.

Quand je vois le nombre procédures d'install qui demandent de copier une ligne qui fait un curl pour récupérer un script qui contient parfois du binaire et l'exécuter en sudo ... Sous Windows on passe des charges de travail de virus en powershell comme ça (powershell, exe encodé base 64 + chiffrement, monté en RAM et exécution: ça passe plein d'antivirus).

Vu l'essor de Linux ce derniers temps, attendez-vous à avoir de plus en plus d'attaques et à avoir besoin de payer un antivirus.

On a déjà eu crackarmor, le sproblèmes de IO Uring qui passaient outre la sécu, sudo, ... Il y a encore certainement beaucoup d'autres candidats aux failles, il ne faut pas se croire plus malin qu'un autre et tester les exploits sur des machines (sauf si vous en avez une dédiée physique).
votre avatar
Visiblement chez Infomaniak, ils ont arrosés tous leurs clients avec un mail précisant qu'il faut mettre à jour :)
votre avatar
en effet, je viens de recevoir un mail pour mon petit VPS... on patchera ca tranquillement la semaine prochaine, on va pas s’énerver juste avant un beau WE à 3 jours !! :dors: :kimouss:
votre avatar
Exactement, je verrai ca semaine prochaine, quand j'aurai juste à lancer un petit update. Sachant qu'il faut un accès à la machine rien de si urgent que ca !
votre avatar
Yep, je l'ai reçu. C'est pour le cas de clients utilisant des ressources Cloud chez eux.
votre avatar
pareil chez Hostinger
votre avatar
Il y a déjà des versions compilées en C pour la majorité des archi : github.com GitHub

RedHat (et Alma) n'ont pas encore de patch et le workaround n'est pas fonctionnel car AF_ALG est directement dans le noyau et non en module.

Ca va être sympa pour ceux qui sont d'astreinte ce long weekend.
votre avatar
j'ai donné le "fix" pour rhel (et donc toutes les rpm based ou s'est built-in)
grubby --update-kernel ALL --args='initcall_blacklist=algif_aead_init'
puis reboot

(grubby permet de maj grub et de disabler le module built-in au niveau du bootloader)

Et je suis très énervé contre Redhat qui n'arrive pas à publier ce workaround :censored:
Surtout qu'en l'état, je vois pas comment on aura un nouveau kernel avant plusieurs heures/jours
votre avatar
Ils se sont enfin sortis les doigts du cul chez Red Hat et ont au moins publié la mesure d'atténuation que tout le monde a mise en place ce matin, et encore c'est très sommaire et ils ne fournissent aucune commande, juste les options de boot pour bloquer soit les fonctions (algif_aead_init), soit l'interface (af_alg_init), soit l'algo affecté (crypto_authenc_esn_module_init)...
votre avatar
Oui, c'est pas faute de leur avoir tiré les oreilles.

Mais sinon, grubby est la bonne commande a utiliser (cf mes posts).
Tu peux être encore plus sélectif en ciblant juste l'interface ou juste l'algo. Moi j'ai ete un peu bourrin mais au moins depuis 14h y'a un fix...
(You read it here first!)
votre avatar
Cela a la potentialité de toucher l'intégralité des distributions en fait.
votre avatar
moche :embarassed:

Je viens d'essayer sur Arch (7.0.2-1-cachyos) que j'avais mis à jours hier ou avant-hier et ça me demande le mdp.
votre avatar
Oui, le commit a664bf3d603d de correction mentionné dans l'article a été livré avec la 7.0.2 :
github.com GitHub
votre avatar
Il semble que la mise à jour soit sortie pour debian : https://security-tracker.debian.org/tracker/DSA-6238-1
votre avatar
Tout à fait; correctif vérifié fonctionnel avant/après sur une distribution dérivée de Debian stable grâce au script mentionné.

Soit des gens ont appliqué le correctif après 21h30 sur leur infrastructure un 30/04, soit en France il faudra attendre lundi. À moins que l'exploitation soit qualifiée, évidemment.