
Una POC per il bug Qualys scoperto di recente su COW con XFS
Questa repo contiene un PoC della vulnerabilità di race condition recentemente scoperta che interessa il COW su XFS, segnalata dall'eccellente Qualys Security Team. [1] [2]
Scritto a mano basandosi sull'eccellente analisi dell'advisory di Qualys. Riscrive i primi 4KB del file /etc/passwd con quello che conteneva originariamente, e sostituisce la riga dell'utente root: root:x:0:0:root:/root:/bin/bash con root::0:0:root:/root:/bin/bash. Notate la differenza? Ora l'utente root non ha password e potete semplicemente fare su -.
Essendo un PoC raffazzonato per le mie esigenze, ha una gestione degli errori pessima e non fa backup stravaganti del file originale o simili. Testato su una macchina virtuale Rocky Linux 9.7 con un mount XFS / e un kernel di febbraio 2026. Inoltre riempie in modo raffazzonato la scrittura su /etc/passwd, quindi se ci tenete alla macchina su cui lo eseguite... fate un backup del file prima di eseguirlo. Ho creato il PoC per controllare le mie macchine, pensavo di tenerlo per un po' ma ho visto che ieri è stato pubblicato un altro PoC, quindi...
Potreste dover regolare la variabile CLONE_FILE nel PoC per puntare a un percorso scrivibile, se /home si trova su una partizione diversa da /etc/passwd. /var/tmp potrebbe aiutarvi; dovreste essere in grado di usare find / -writable per capire l'esposizione. Compilate con gcc refluxfs.c -o refluxfs -lpthread.
Il PoC non lascia alcun log né dmesg; secondo me il modo migliore per individuarlo sarebbe configurare una regola SIEM per monitorare le chiamate ioctl con FICLONE sui filesystem XFS.
Anche gli strumenti di File Integrity Monitoring potrebbero rilevarlo.
Aggiornate il kernel se potete. In alternativa, funziona la mitigazione di Red Hat tramite SystemTap:
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 e mount -l | grep xfs.Un bug nel codice XFS fa sì che il Copy-On-Write possa essere richiesto per un file e il COW non venga annullato correttamente. Quando scriviamo sul file copiato, il COW dovrebbe essere annullato e due file diversi dovrebbero esistere su disco. Usando i thread potete semplicemente... scrivere su entrambi i file contemporaneamente a causa della race condition.
Se potete leggere il file target e fare ioctl(fd, FICLONE) su di esso, avete una copia con COW abilitato. Deve essere nella stessa partizione.

Poi potete semplicemente... fare write() nella vostra copia con O_DIRECT e modificare il file originale.

1: https://openwall.com/lists/oss-security/2026/07/22/14
Probabilmente ci sono cose sbagliate nel mio scritto, ma volevo iniziare da qualche parte, specialmente in questi incredibili paio di mesi.
"Meglio essere un cane in tempi di tranquillità che un umano in tempi di caos."
- Feng Menglong, Storie per risvegliare il mondo