
xfs kernel LPE (CVE-2026-64600), divulgado por Qualys el 22 de julio de 2026
(originalmente RefluXFS o CVE-2026-64600)
El nombre describe el mecanismo:
Sin embargo, los créditos oficiales pertenecen a Qualys y su RefluXFS (CVE-2026-64600),
divulgado a través de oss-security.
COWSlip fue elaborado de forma independiente a partir del parche incluido en la rama
for-next de xfs. El RefluXFS de Qualys se encontró una semana antes y se corrigió como un null-day.
COWSlip es un PoC de un día basado en la corrección de XFS incluida en el aviso de Red Hat
RHBA-2026:39332, que fue
marcado como [Exploits (KEV)] (inicialmente).
Tras inspeccionar kernel.spec y el diff del SRPM, se encontró el parche correspondiente
en la rama for-next de XFS Linux:
xfs: resample the data fork mapping after cycling ILOCK
El momento fue notable: la corrección apareció en una actualización de kernel empresarial poco después de que el cambio correspondiente llegara a la rama de desarrollo. En resumen, el parche corrige una primitiva de escalada local de privilegios en XFS. La explotabilidad depende del diseño del sistema de archivos y de la configuración de setuid; es especialmente relevante para instalaciones de la familia RHEL que usan XFS para el sistema de archivos raíz.
El PoC apunta a un kernel XFS anterior a la corrección con reflink habilitado, un objetivo
ELF setuid propiedad de root existente (/usr/bin/su por defecto) y un directorio de clones
escribible por el usuario en el mismo sistema de archivos XFS. Por defecto, el objetivo es
/usr/bin/su y el directorio de clones es /tmp/cowslip-clones, por lo que /tmp debe estar
en ese sistema de archivos XFS. Compite con escrituras CoW de E/S directa alineadas contra
clones reflink, reemplaza la ruta del intérprete ELF del objetivo en el primer bloque de la
carrera e inicia /bin/bash -p cuando el objetivo setuid ejecuta el cargador.
Compilación:
gcc -O2 -Wall -Wextra -pthread poc.c -o /tmp/cowslip
gcc -nostdlib -static-pie -s -Wl,-e,_start -o /tmp/cowslip-loader loader.S
El cargador static-PIE es necesario para la ruta del kernel EL8 más antiguo; el antiguo cargador ET_EXEC puede provocar un segfault antes de iniciar el shell.
Ejecutar como usuario sin privilegios con el objetivo y el directorio de clones en el mismo sistema de archivos XFS con reflink habilitado:
/tmp/cowslip
Los controles opcionales son POC_TARGET, POC_TRIES y POC_THREADS:
POC_TARGET=/usr/bin/su POC_TRIES=20000 POC_THREADS=32 /tmp/cowslip
El PoC intencionadamente no restaura el objetivo tras un acierto. Desde un inicio de sesión normal como root, reinstalar el paquete propietario y verificarlo:
dnf -y reinstall util-linux || yum -y reinstall util-linux
rpm -V util-linux
Un resultado vacío de rpm -V indica que los archivos del paquete coinciden con la base de
datos de paquetes instalados.
Kernels probados:
6.12.0-211.33.1.el10_2: acierto5.14.0-687.25.1.el9_8: acierto5.14.0-687.26.1.el9_8: sin acierto; este kernel contiene la corrección de XFS4.18.0-553.143.1.el8_10: acierto4.18.0-553.144.1.el8_10: sin acierto; este kernel contiene la corrección de XFSCorrección: xfs: resample the data fork mapping after cycling ILOCK
Introducido por 3c68d44a2b49a0 en v4.11; afectado hasta que se aplique la corrección de resampling.
El desencadenante requiere un sistema de archivos XFS con reflink habilitado, un objetivo ELF setuid propiedad de root en ese sistema de archivos y un directorio en el mismo sistema de archivos que sea escribible por el usuario sin privilegios.