
Un POC para el bug de Qualys descubierto recientemente en COW con XFS.
Este repositorio contiene un PoC de la recientemente descubierta vulnerabilidad de condición de carrera que afecta a COW en XFS, reportada por el excelente equipo de seguridad de Qualys. [1] [2]
Escrito a mano basado en el excelente análisis del aviso de Qualys. Reescribe los primeros 4KB del archivo /etc/passwd con lo que contenía originalmente,
y reemplaza la línea del usuario root: root:x:0:0:root:/root:/bin/bash con root::0:0:root:/root:/bin/bash. ¿Notas la diferencia? Ahora el usuario root no tiene contraseña y puedes simplemente su -.
Al ser un PoC chapucero para mis propias necesidades, tiene un manejo de errores malo y no hace copias de seguridad elegantes del archivo original ni nada parecido. Probado en una máquina virtual Rocky Linux 9.7 con un montaje XFS / y un kernel de febrero de 2026. También rellena chapuceramente la escritura de /etc/passwd, así que si te importa la máquina en la que lo ejecutas... haz una copia de seguridad del archivo antes de ejecutarlo. Hice el PoC para revisar mis máquinas, iba a guardarlo por un tiempo, pero vi que otro PoC fue publicado ayer, así que...
Puede que tengas que ajustar la variable CLONE_FILE en el PoC para que apunte a una ruta en la que puedas escribir, si /home está en una partición diferente a /etc/passwd. /var/tmp podría ayudarte; deberías poder usar
find / -writable para guiarte en la exposición. Compila con gcc refluxfs.c -o refluxfs -lpthread.
El PoC no deja ningún registro ni dmesg. En mi opinión, la mejor forma de detectar esto sería configurar una regla SIEM para monitorear llamadas ioctl con FICLONE en sistemas de archivos XFS.
Las herramientas de monitoreo de integridad de archivos también podrían detectarlo.
Actualiza el kernel si puedes. Alternativamente, la mitigación de Red Hat usando SystemTap funciona:
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 y mount -l | grep xfs.Un bug en el código de XFS hace que Copy-On-Write pueda solicitarse para un archivo y COW no se deshaga correctamente. Al escribir en nuestro archivo copiado, COW debería deshacerse y dos archivos diferentes deberían existir en el disco. Usando hilos puedes simplemente... escribir en ambos archivos a la vez debido a la condición de carrera.
Si puedes leer el archivo objetivo y hacer ioctl(fd, FICLONE) sobre él, tienes una copia con COW habilitado. Debe estar en la misma partición.

Entonces, puedes simplemente... escribir con write() en tu copia con O_DIRECT y modificar el archivo original.

1: https://openwall.com/lists/oss-security/2026/07/22/14
Probablemente hay cosas incorrectas en mi escrito, pero quería empezar en alguna parte, especialmente en estos increíbles par de meses.
"Mejor ser un perro en tiempos de tranquilidad que un humano en tiempos de caos."
- Feng Menglong, Relatos para despertar al mundo