
Un POC pour le bug Qualys récemment découvert sur COW avec XFS
Ce dépôt contient une preuve de concept de la vulnérabilité de type course récemment découverte affectant le COW sur XFS, signalée par l'excellente équipe de sécurité Qualys. [1] [2]
Rédigé à la main sur la base de l'excellente analyse de l'avis de Qualys. Réécrit les 4 premiers Ko du fichier /etc/passwd avec ce qu'il contenait à l'origine,
et remplace la ligne de l'utilisateur root : root:x:0:0:root:/root:/bin/bash par root::0:0:root:/root:/bin/bash. Vous voyez la différence ? Maintenant, l'utilisateur root n'a pas de mot de passe et vous pouvez simplement su -.
Étant un PoC bricolé pour mes propres besoins, il a une gestion d'erreurs médiocre et ne fait aucune sauvegarde sophistiquée du fichier d'origine ou autre. Testé sur une machine virtuelle Rocky Linux 9.7 exécutant un montage XFS / avec un noyau de février 2026. Il complète aussi maladroitement l'écriture de /etc/passwd, donc si vous tenez à la machine sur laquelle vous l'exécutez... faites une sauvegarde du fichier avant de l'exécuter. J'ai fait ce PoC pour vérifier mes machines, j'allais le garder un moment mais j'ai vu qu'un autre PoC avait été publié hier alors...
Vous devrez peut-être ajuster la variable CLONE_FILE dans le PoC pour pointer vers un chemin où vous pouvez écrire, si /home est sur une partition différente de /etc/passwd. /var/tmp pourrait vous aider, vous devriez pouvoir
find / -writable pour vous guider en termes d'exposition. Compilez avec gcc refluxfs.c -o refluxfs -lpthread.
Le PoC ne laisse aucun journal ni dmesg, à mon avis la meilleure façon de détecter cela serait de configurer une règle SIEM pour surveiller les appels ioctl avec FICLONE sur les systèmes de fichiers XFS.
Les outils de surveillance de l'intégrité des fichiers pourraient également le détecter.
Mettez à jour le noyau si possible. Sinon, l'atténuation Red Hat utilisant SystemTap fonctionne :
probe begin {
printf("refluxfs mitigation loaded\n")
}
probe module("xfs").function("xfs_file_remap_range").call {
$remap_flags = 0xffff
}
probe module("xfs").function("xfs_file_remap_range").return {
$return = -95
}
probe end {
printf("refluxfs mitigation unloaded\n")
}
$ xfs_info / | grep reflink=1 et mount -l | grep xfs.Un bug dans le code XFS fait que Copy-On-Write peut être demandé pour un fichier et que le COW n'est pas correctement annulé. Lors de l'écriture sur notre fichier copié, le COW devrait être annulé et deux fichiers différents devraient exister sur le disque. En utilisant des threads, vous pouvez simplement... écrire sur les deux fichiers à la fois à cause de la condition de course.
Si vous pouvez lire le fichier cible et faire ioctl(fd, FICLONE) dessus, vous avez une copie avec COW activé. Doit être sur la même partition.

Ensuite, vous pouvez simplement... write() dans votre copie avec O_DIRECT et modifier le fichier d'origine.

1: https://openwall.com/lists/oss-security/2026/07/22/14
Il y a probablement des erreurs dans mon texte, mais je voulais commencer quelque part, surtout en ces mois incroyables.
« Mieux vaut être un chien en des temps de tranquillité qu'un humain en des temps de chaos. »
- Feng Menglong, Histoires pour éveiller le monde