
Um POC para o bug recentemente descoberto pela Qualys no COW com XFS
Este repositório contém um PoC da vulnerabilidade de condição de corrida recentemente descoberta que afeta o COW no XFS, relatada pela excelente equipe de segurança da Qualys. [1] [2]
Escrito à mão com base na excelente análise do advisory da Qualys. Ele reescreve os primeiros 4KB do arquivo /etc/passwd com o que ele continha originalmente,
substituindo a linha do usuário root: root:x:0:0:root:/root:/bin/bash por root::0:0:root:/root:/bin/bash. Notou a diferença? Agora o usuário root não tem senha e você pode simplesmente usar su -.
Por ser um PoC improvisado para minhas próprias necessidades, ele tem um tratamento de erros ruim e não faz nenhum backup sofisticado do arquivo original ou algo do tipo. Testado em uma máquina virtual Rocky Linux 9.7 rodando uma montagem XFS em / com um kernel de fevereiro de 2026. Ele também preenche de forma improvisada a escrita no /etc/passwd, então, se você se importa com a máquina em que vai executá-lo... faça um backup do arquivo antes de executar. Fiz o PoC para verificar minhas máquinas, ia segurá-lo por um tempo, mas vi que outro PoC foi divulgado ontem, então...
Talvez seja necessário ajustar a variável CLONE_FILE no PoC para apontar para um caminho no qual você possa escrever, se /home estiver em uma partição diferente de /etc/passwd. /var/tmp pode ajudar; você deve conseguir usar find / -writable para se orientar quanto à exposição. Compile com gcc refluxfs.c -o refluxfs -lpthread.
O PoC não deixa nenhum log nem dmesg. Na minha opinião, a melhor forma de detectar isso seria configurar uma regra de SIEM para monitorar chamadas ioctl com FICLONE em sistemas de arquivos XFS.
Ferramentas de Monitoramento de Integridade de Arquivos (FIM) também podem detectar isso.
Atualize o kernel se puder. Alternativamente, a mitigação da 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 e mount -l | grep xfs./etc/passwd,
mas também pode ser um arquivo SUID ou outro arquivo valioso de propriedade do root.Um bug no código do XFS faz com que Copy-On-Write possa ser solicitado para um arquivo e o COW não seja desfeito corretamente. Ao escrever em nosso arquivo copiado, o COW deveria ser desfeito e dois arquivos diferentes deveriam existir no disco. Usando threads, você pode simplesmente... escrever em ambos os arquivos ao mesmo tempo por causa da condição de corrida.
Se você puder ler o arquivo alvo e executar ioctl(fd, FICLONE) nele, você tem uma cópia com COW habilitado. Deve estar na mesma partição.

Então, você pode simplesmente... usar write() na sua cópia com O_DIRECT e modificar o arquivo original.

1: https://openwall.com/lists/oss-security/2026/07/22/14
Provavelmente há coisas erradas no meu texto, mas eu queria começar de algum lugar, especialmente nestes incríveis dois meses.
"Melhor ser um cão em tempos de tranquilidade do que um humano em tempos de caos."
- Feng Menglong, Histórias para despertar o mundo