- Dirty Frag est une vulnérabilité générique d’élévation locale de privilèges permettant d’obtenir les droits root sur les principales distributions Linux ; le calendrier de divulgation responsable et l’embargo ayant été rompus, aucun correctif ni CVE n’est encore disponible
- Extension de la même classe de bugs que Dirty Pipe et Copy Fail, il s’agit d’un bug logique déterministe qui ne nécessite pas de race condition et présente un taux de réussite très élevé
- La durée de vie effective de la vulnérabilité est d’environ 9 ans ; elle a été testée sur les principales distributions comme Ubuntu, RHEL, Fedora et openSUSE
- Même les systèmes ayant appliqué les mesures d’atténuation existantes pour Copy Fail (liste noire
algif_aead) restent vulnérables à Dirty Frag - En mesure d’atténuation temporaire, il est recommandé de supprimer les modules esp4, esp6 et rxrpc impliqués dans la vulnérabilité jusqu’à la publication de correctifs par les distributions
Aperçu
- Classe de bugs qui corrompt le membre
fragde la structuresk_buff, extension de la même classe de bugs que Dirty Pipe et Copy Fail - En chaînant les vulnérabilités xfrm-ESP Page-Cache Write et RxRPC Page-Cache Write, il est possible d’obtenir les droits root sur les principales distributions Linux
- Bug logique déterministe qui ne dépend pas d’une fenêtre de timing, sans nécessité de race condition
- Même en cas d’échec de l’exploit, aucun kernel panic ne se produit, et le taux de réussite est très élevé
Pourquoi chaîner les deux vulnérabilités
- xfrm-ESP Page-Cache Write fournit un puissant primitive de STORE arbitraire de 4 octets similaire à Copy Fail et est inclus dans la plupart des distributions, mais il nécessite l’autorisation de créer des espaces de noms
- Sur Ubuntu, la politique AppArmor peut bloquer la création d’espaces de noms utilisateur non privilégiés ; dans cet environnement, il est donc impossible de déclencher xfrm-ESP Page-Cache Write
- RxRPC Page-Cache Write ne nécessite pas l’autorisation de créer des espaces de noms, mais le module
rxrpc.kolui-même n’est pas inclus dans la plupart des distributions- Toutefois, sur Ubuntu, le module
rxrpc.koest chargé par défaut
- Toutefois, sur Ubuntu, le module
- En chaînant les deux vulnérabilités, leurs angles morts se compensent mutuellement, ce qui permet d’obtenir les droits root sur toutes les grandes distributions
Relation avec Copy Fail
- Copy Fail est la motivation qui a lancé cette recherche
- xfrm-ESP Page-Cache Write partage le même sink que Copy Fail, mais peut être déclenché indépendamment de la disponibilité du module
algif_aead - Même les systèmes ayant appliqué la mesure d’atténuation publiée pour Copy Fail (liste noire
algif_aead) restent vulnérables à Dirty Frag
Portée de l’impact
- xfrm-ESP Page-Cache Write : du commit
cac2661c53f3(2017-01-17) jusqu’à l’upstream actuel - RxRPC Page-Cache Write : du commit
2dc334f1a63a(2023-06) jusqu’à l’upstream actuel - La durée de vie effective de la vulnérabilité est d’environ 9 ans
- Versions de distributions testées :
- Ubuntu 24.04.4 : 6.17.0-23-generic
- RHEL 10.1 : 6.12.0-124.49.1.el10_1.x86_64
- openSUSE Tumbleweed : 7.0.2-1-default
- CentOS Stream 10 : 6.12.0-224.el10.x86_64
- AlmaLinux 10 : 6.12.0-124.52.3.el10_1.x86_64
- Fedora 44 : 6.19.14-300.fc44.x86_64
Mesures d’atténuation
- Le calendrier de divulgation responsable et l’embargo ayant été rompus, aucune distribution ne dispose d’un correctif à ce stade
- Comme mesure d’atténuation temporaire, une commande est fournie pour supprimer les modules où la vulnérabilité se manifeste :
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"- Ajoute les modules
esp4,esp6etrxrpcà la liste noire dans/etc/modprobe.d/dirtyfrag.conf, puis les décharge
- Ajoute les modules
- Il faudra appliquer les mises à jour une fois que chaque distribution aura rétroporté les correctifs
Historique de la divulgation
- Le document sur Dirty Frag a été publié après concertation avec les mainteneurs de linux-distros@vs.openwall.org, à leur demande
- L’embargo a été rompu pour des raisons externes, et il n’existe actuellement ni correctif ni CVE
- Le PoC a été publié en concertation avec linux-distros dans le but de fournir des informations exactes ; son usage sur des systèmes non autorisés est interdit
2 commentaires
Réactions sur Hacker News
La cause racine et la méthode d’exploitation sont très proches de Copy Fail.
À mes yeux, c’est un bon exemple de ce qu’on perd facilement quand on délègue beaucoup de travail à un LLM, à savoir l’exploration. J’ai l’impression que faire de la recherche sur les vulnérabilités avec l’IA bloque pas mal la créativité. Quand on pose une question et qu’on obtient immédiatement une réponse, on ne voit plus ce qu’il y a autour. C’est comme un génie qui ne donne exactement que ce qu’on lui demande, sans rien de plus.
Le chercheur qui a trouvé Copy Fail s’est beaucoup appuyé sur l’IA après avoir remarqué quelque chose de suspect, mais s’il avait fouillé davantage le code lui-même, il aurait sans doute eu plus de chances de tomber sur ce bug jumeau. En même temps, avec des prompts un peu moins directifs, les LLM récents auraient probablement trouvé ces bugs aussi. C’est un cas assez inhabituel de synergie négative : ils ont travaillé ensemble, mais le résultat a été moins bon
Dans copy.fail, c’est autre chose qui a été corrigé, et les gens ont trop vite rejeté la faute sur AF_ALG.
[Édit : oui, c’est bien le même problème authencesn. Dans le code https://github.com/V4bel/dirtyfrag/blob/892d9a31d391b7f0fccb..., authencesn n’apparaît que dans les commentaires, mais c’est quand même le même problème.]
[Édit 2 : le problème RxRPC est distinct ; ici je parle du côté ESP]
Je comprends l’argument sur la créativité. Comme n’importe quel outil, l’IA peut rétrécir le champ de vision. Il est difficile de s’en servir seulement comme assistant sans lui céder entièrement le workflow
Hormis le cas où les deux vulnérabilités auraient été publiées ensemble, je me demande dans quel scénario contrefactuel on dirait qu’elle a « suffisamment bien exploré »
« Il n’existe ni correctif ni CVE pour ces vulnérabilités, car l’embargo a été rompu »
Lien : https://github.com/V4bel/dirtyfrag
Analyse détaillée : https://github.com/V4bel/dirtyfrag/blob/master/assets/write-...
Le point important est celui-ci : « Copy Fail a motivé le lancement de cette recherche. En particulier, l’écriture dans le page cache xfrm-ESP de la chaîne de vulnérabilité Dirty Frag partage le même sink que Copy Fail. Mais elle se déclenche indépendamment de la disponibilité du module algif_aead. Autrement dit, même sur les systèmes où la mesure d’atténuation publique de Copy Fail — la mise en liste noire d’algif_aead — est appliquée, Linux reste vulnérable à Dirty Frag »
L’atténuation proposée est la suivante, même si je ne l’ai ni testée ni vérifiée moi-même : « Comme le calendrier de divulgation responsable et l’embargo ont été rompus, aucune distribution n’a de correctif. Supprimez les modules qui déclenchent la vulnérabilité avec la commande ci-dessous »
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"Dans la discussion sur cette atténuation, il est dit qu’un redémarrage peut être nécessaire, ou que sur une machine déjà exploitée il faut lancer ensuite :
sudo echo 3 > /prox/sys/vm/drop_cachessudo echo 3 > /prox/sys/vm/drop_caches, sudo n’a aucun effet. sudo n’exécute que echo, pas l’écriture réelle.Et si la machine a déjà été exploitée, c’est de toute façon trop tard. N’importe quoi sur le disque a pu être corrompu, donc il faut reconstruire l’image complète du disque
sudo echoavec une redirection comme ça depuis un shell non sudo.echo 3 | sudo tee /proc/sys/vm/drop_cachesou
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'Et j’ai aussi corrigé la faute de frappe sur
/procecho 1 > ...suffit aussi comme atténuation. Pas besoin de tout vider : il suffit de purger le page cache avec1.Testé localement sur Ubuntu 26.04 : j’ai exécuté l’exploit, obtenu root, configuré l’atténuation, puis relancé
susans argument et je suis redevenu root immédiatement sans mot de passe. Après purge du page cache,sua de nouveau demandé un mot de passeIl nous faut un moyen simple de garantir que seuls les modules du noyau présents sur une liste blanche puissent être chargés. J’en ai assez de devoir mettre en liste noire des modules dont personne n’a besoin
Je repose la question : pourquoi est-ce que c’est algif_aead qui prend tous les reproches dans copy.fail ? Le truc stupide, c’est authencesn.
authencesn n’a pas été corrigé, et on en voit maintenant le résultat. Il s’avère qu’on peut atteindre la même écriture hors limites, ou probablement la même, via des sockets réseau ordinaires.
J’aurais aimé y penser, mais ça ne m’est pas venu.
[Édit : je parle du problème via ESP. Le problème RxRPC est, de ce que j’en comprends, totalement distinct]
Si ça fonctionne vraiment sur toutes les grandes distributions, ça me sidère encore de voir à quel point les mainteneurs sont irresponsables. Pourquoi activer par défaut des fonctions optionnelles du noyau qui ne servent probablement même pas à 0,1 % des utilisateurs ?
Ça rappelle les distributions Linux de 1999 qui livraient une installation par défaut avec des dizaines de services réseau exposés sur Internet. Sauf qu’on n’est plus en 1999
Je me souviens de l’époque des débuts de Linux, quand on lançait
make menuconfigpour ne sélectionner dans le noyau que les fonctions exactes qu’on voulait. Honnêtement, je n’ai pas envie d’y revenir.Cela dit, une cible facile d’amélioration ici, c’est RHEL. RHEL a tendance à intégrer directement beaucoup de choses dans le noyau au lieu de les laisser comme modules chargeables, ce qui rendait impossible une atténuation comme celle de copy fail. Peut-être qu’on pourrait réduire un peu ça
Les mainteneurs de distributions Linux sont parmi les mainteneurs logiciels les plus responsables au monde. Leurs pratiques de sécurité sont bien meilleures que celles des gestionnaires de paquets des langages de programmation idiots ; ils maintiennent une sélection de paquets curée, examinent les changements, corrigent les bugs, résolvent des problèmes de packaging complexes, rétroporent les correctifs, utilisent des releases progressives, distribuent les fichiers via des miroirs dans le monde entier et vérifient cryptographiquement tous les fichiers. Sans oublier qu’ils font tout ça gratuitement
Si l’attaquant en est déjà là, la situation est déjà mauvaise. L’élévation de privilèges vers root est alors l’un des moindres soucis.
Comme quelqu’un l’a mis plus bas : https://xkcd.com/1200/
Avant de paniquer, il faut comprendre ce qu’est réellement cette vulnérabilité
Après toutes ces années, on a enfin atteint l’état « avec assez d’yeux, tous les bugs sont superficiels », et c’est plutôt nul. Va-t-il falloir faire des mises à jour du noyau plusieurs fois par semaine maintenant ?
Je me demande comment l’embargo a été rompu. Est-ce qu’il y a eu fuite, ou bien est-ce qu’un tiers l’a trouvé indépendamment ?
Linux est open source, donc tous les correctifs de bugs de sécurité sont visibles immédiatement par tout le monde. Vu le mode de développement du noyau, il n’y a aucun moyen d’y échapper. Ce que les gens appellent « embargo », c’est l’idée assez stupide selon laquelle, tant qu’on n’écrit pas noir sur blanc « THIS IS A LPE » dans la description du patch et qu’on garde le silence, on peut faire comme si la vulnérabilité n’avait pas fuité jusqu’au message « officiel » sur la mailing list.
Cette approche était peut-être encore défendable autrefois, mais à l’ère des LLM, où l’on peut brancher automatiquement les diffs des mailing lists sur les derniers modèles pour leur faire identifier les patches qui corrigent des problèmes de sécurité, ce n’est plus seulement stupide, c’est dangereux
https://x.com/encrypted_past/status/2052409822998392962
Quelqu’un sait si Debian est vulnérable ? J’ai essayé l’exploit sur des machines Debian 12 et Debian 13, mais je n’ai pas réussi à le reproduire moi-même
Pour ceux qui n’utilisent pas le flux de sécurité des paquets Debian sur Bookworm, le noyau 6.1.0-42-amd64 semble en fait immunisé contre copy.fail. C’est surprenant qu’il paraisse aussi immunisé contre dirtyfrag. Si le flux de sécurité ne l’a pas encore patché, on peut choisir une version du noyau qui conserve le commit 2b8bbc64b5c2. Je soupçonne que ce même commit rende aussi, par accident, certaines versions du noyau Debian 12 sûres face à dirtyfrag
Exécuté dans un conteneur
ubuntu:latestavec un nouvel utilisateur par défautgit clone https://github.com/V4bel/dirtyfrag.git && cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil && ./expRésultat :
dirtyfrag: failed (rc=3)Bonne nouvelle !
copy fail peut servir à s’échapper d’un conteneur (https://github.com/Percivalll/Copy-Fail-CVE-2026-31431-Kuber...), donc je suppose qu’il ne faudrait que quelques petites modifications à l’exploit
Avis sur Lobste.rs
Quelle sacrée semaine pour administrer des serveurs Linux partagés. Cela dit, j’apprécie que cette divulgation aille droit au but
En revanche, je ne comprends pas pourquoi tout le monde masque
stderrdans les consignes d’atténuationÉdit : si ça a été signalé le 30 avril après avoir été « inspiré » par copy.fail, ça a donc été découvert en moins d’une journée ? Impressionnant
Comme j’ai les droits sudo sur un serveur partagé assez important, je me demande aussi si compiler le noyau soi-même en n’incluant qu’un minimum de modules ne serait pas une bonne idée. Je n’ai pas étudié les avantages et inconvénients en profondeur, mais j’ai l’impression que cela aurait pu éviter les deux vulnérabilités d’élévation locale de privilèges de cette semaine
Édit 2 :
Oh, ça ne nécessite même pas de
setuid. Bien vu de l’avoir inclusSerait-il possible et raisonnable de récupérer la liste des modules du noyau chargés sur un système en fonctionnement, puis de l’utiliser comme liste d’autorisation
modprobepour ce système ?CopyFail et DirtyFrag semblent tous deux exploiter des modules du noyau qui n’étaient chargés sur aucun des systèmes que j’ai vérifiés. Dans ce cas, bloquer les modules manifestement inutiles ne permettrait-il pas d’atténuer préventivement certaines attaques ?
2026-05-07: Detailed information and the exploit for this vulnerability were published publicly by an unrelated third party, breaking the embargo.Je ne comprends pas comment ce genre de chose peut être toléré. Que des informations de cette ampleur circulent dans un environnement aussi peu fiable me paraît franchement aberrant
N’importe quel tiers surveillant les commits Linux aurait pu suivre les mêmes indices et produire un exploit
Ici, l’« environnement peu fiable », c’est l’ensemble d’Internet, et il n’existe pas grand-chose qui ressemble à une véritable isolation. C’était déjà le cas avant, c’est simplement encore plus clair aujourd’hui. Voir aussi le billet récent de Stefan Eissing expliquant qu’un bug Apache httpd a été redécouvert deux fois avant sa correction
Existe-t-il un moyen de tester si les modules affectés ne peuvent vraiment pas être chargés ?
Lors de CopyFail, j’ai fait une erreur en appliquant les premières mesures d’atténuation. Le nom du fichier dans
/etc/modprobe.d/ne se terminait pas par.conf, et je ne m’en suis rendu compte qu’après avoir exécuté la commande de test de https://news.ycombinator.com/item?id=47954159. Y a-t-il une commande similaire pour les modulesesp4/esp6/rxrpc?modprobe, et j’ai obtenu la même erreur que la dernière foisIl y a aussi le code de preuve de concept joint, mais je ne l’ai pas encore essayé