
xfs kernel LPE (CVE-2026-64600), divulgato da Qualys il 22 luglio 2026
(originariamente RefluXFS o CVE-2026-64600)
Il nome descrive il meccanismo:
Tuttavia, i crediti ufficiali appartengono a Qualys e al loro RefluXFS (CVE-2026-64600),
divulgato tramite oss-security.
COWSlip è stato realizzato in modo indipendente dalla patch arrivata nel branch
for-next di xfs. Il RefluXFS di Qualys è stato scoperto una settimana prima ed è stato corretto come null-day.
COWSlip è un PoC one-day basato sulla correzione di XFS distribuita nell'avviso Red Hat
RHBA-2026:39332, che era
contrassegnato come [Exploits (KEV)] (inizialmente).
Dopo aver ispezionato kernel.spec e il diff dell'SRPM, la patch corrispondente è stata
trovata nel branch for-next di XFS Linux:
xfs: resample the data fork mapping after cycling ILOCK
La tempistica è stata notevole: la correzione è apparsa in un aggiornamento del kernel enterprise poco dopo che la modifica corrispondente è arrivata nel branch di sviluppo. In breve, la patch corregge una primitiva di privilege-escalation locale in XFS. La sfruttabilità dipende dal layout del filesystem e dalla configurazione dei setuid; è particolarmente rilevante per le installazioni della famiglia RHEL che usano XFS per il filesystem root.
Il PoC prende di mira un kernel XFS pre-fix con reflink abilitato, un target ELF setuid
esistente di proprietà di root (/usr/bin/su per impostazione predefinita) e una directory di clone
scrivibile dall'utente sullo stesso filesystem XFS. Per impostazione predefinita, il target è /usr/bin/su
e la directory di clone è /tmp/cowslip-clones, quindi /tmp deve trovarsi su
quel filesystem XFS. Mette in race scritture CoW direct-I/O allineate contro cloni
reflink, sostituisce il percorso dell'interprete ELF del target nel primo blocco messo in race e
avvia /bin/bash -p quando il target setuid esegue il loader.
Build:
gcc -O2 -Wall -Wextra -pthread poc.c -o /tmp/cowslip
gcc -nostdlib -static-pie -s -Wl,-e,_start -o /tmp/cowslip-loader loader.S
Il loader static-PIE è richiesto per il percorso del kernel EL8 più vecchio; il precedente loader ET_EXEC può andare in segfault prima di avviare la shell.
Eseguire come utente non privilegiato con il target e la directory di clone sullo stesso filesystem XFS con reflink abilitato:
/tmp/cowslip
I controlli opzionali sono POC_TARGET, POC_TRIES e POC_THREADS:
POC_TARGET=/usr/bin/su POC_TRIES=20000 POC_THREADS=32 /tmp/cowslip
Il PoC intenzionalmente non ripristina il target dopo un hit. Da un normale login root, reinstallare il pacchetto proprietario e verificarlo:
dnf -y reinstall util-linux || yum -y reinstall util-linux
rpm -V util-linux
Un risultato vuoto di rpm -V indica che i file del pacchetto corrispondono al database
dei pacchetti installati.
Kernel testati:
6.12.0-211.33.1.el10_2: hit5.14.0-687.25.1.el9_8: hit5.14.0-687.26.1.el9_8: nessun hit; questo kernel contiene la correzione di XFS4.18.0-553.143.1.el8_10: hit4.18.0-553.144.1.el8_10: nessun hit; questo kernel contiene la correzione di XFSFix: xfs: resample the data fork mapping after cycling ILOCK
Introdotto da 3c68d44a2b49a0 in v4.11; affetto fino all'applicazione della correzione di resampling.
Il trigger richiede un filesystem XFS con reflink abilitato, un target ELF setuid di proprietà di root su quel filesystem e una directory sullo stesso filesystem che sia scrivibile dall'utente non privilegiato.