Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Test de DirtyFrag et d'un contournement

Première rédaction de cet article le 8 mai 2026
Dernière mise à jour le 9 mai 2026


Aujourd'hui, vous avez probablement entendu parler de la faille de sécurité du noyau Linux nommée CopyFail. Une nouvelle faille a été publiée hier, DirtyFrag (CVE-2026-43284 et CVE-2026-43500) et elle est aussi dangereuse et facile à exploiter que CopyFail.

Comme avec CopyFail, testons sur une machine sacrifiable, en l'occurrence une VM chez xTom. On crée la VM, sous Debian 13 (la dernière version stable). Par souci de complétude, on commence par tester CopyFail :

toto@s55827:~$ python copyfail
Password: 
  

Ouf, CopyFail échoue ; comme avec tous les hébergeurs sérieux, les VM sont créées avec un noyau insensible à cette faille, et ce bien que le module qui était bogué soit chargé :

toto@s55827:~$ lsmod|grep aea
algif_aead             12288  0
af_alg                 36864  1 algif_aead

toto@s55827:~$ uname -a
Linux s55827 6.12.85+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.85-1 (2026-04-30) x86_64 GNU/Linux
  

Maintenant, essayons DirtyFrag :

toto@s55827:~$ git clone https://github.com/V4bel/dirtyfrag.git
…
toto@s55827:~$ cd dirtyfrag/

toto@s55827:~/dirtyfrag$ more exp.c
  

On regarde le code C, il est difficilement compréhensible, c'est bien pour cela qu'il ne faut le tester que sur une machine sacrifiable. Compilons-le :

toto@s55827:~/dirtyfrag$ gcc -O0 -Wall -o exp exp.c

toto@s55827:~/dirtyfrag$ ./exp 
#
# id
uid=0(root) gid=0(root) groups=0(root)

# touch /P0wned
# ls -l /P0wned
-rw-rw-r-- 1 root root 0 May  8 08:53 /P0wned
# 
  

Aussi simple et aussi efficace que CopyFail. Comme lui, il marche à tous les coups et tourne sur de très nombreux systèmes. su a été modifié en mémoire (pas sur le disque et cela ne survivra donc pas au démarrage) :

toto@s55827:~/dirtyfrag$ ls -l /usr/bin/su
-rwsr-xr-x 1 root root 84360 May  9  2025 /usr/bin/su

toto@s55827:~/dirtyfrag$ su
# 
  

La page officielle propose un contournement, en attendant une vraie correction (qui existe déjà chez Debian, pour les autres systèmes, voir ici) :

root@s55827 ~ # 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"    

root@s55827 ~ # cat /etc/modprobe.d/dirtyfrag.conf
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
  

Et une fois ce contournement appliqué (et la machine redémarrée pour annuler l'effet du test précédent) :

toto@s55827:~/dirtyfrag$ ./exp
dirtyfrag: failed (rc=1)

toto@s55827:~/dirtyfrag$ su
Password: 

 

Ouf, on est en sécurité (jusqu'à la prochaine faille). Si vous avez plusieurs machines où appliquer ce contournement, vous pouvez utiliser Ansible (sur Ansible, voir aussi cet article). Attention, ce contournement empêche apparemment d'utiliser IPsec (mais ce n'est pas grave, tout le monde utilise Wireguard, de toute façon). Si c'est un problème, une autre solution (que je n'ai pas testée) est sysctl -w kernel.unprivileged_userns_clone=0.

Un autre contournement possible est d'utiliser eBPF pour empêcher l'attaque (je n'ai pas testé). Voyez copyfail-dirtyfrag-blocker. Et une solution encore plus radicale (et qui crée probablement pas mal d'inconvénients) est de suspendre le chargement des modules après le démarrage.

Évidemment, la meilleure solution est quand même l'installation d'un noyau corrigé et la redémarrage. Ici, sur une Debian 13 (l'actuelle version stable) :

toto@s55827:~/dirtyfrag$ uname -a
Linux s55827 6.12.86+deb13-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.86-1 (2026-05-08) x86_64 GNU/Linux

toto@s55827:~/dirtyfrag$ ./exp 
dirtyfrag: failed (rc=1)

toto@s55827:~/dirtyfrag$ lsmod |grep esp
esp4                   28672  0
xfrm_algo              16384  2 esp4,xfrm_user
  

Malgré le chargement du module, on est en sécurité.

Si vous voulez tous les détails techniques sur DirtyFrag, outre la page officielle, vous avez cet article en anglais et celui-ci en français (et un autre en français mais moins détaillé).

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)