
XFS의 COW에서 최근 발견된 Qualys 버그에 대한 PoC
이 저장소는 Qualys 보안 팀이 보고한 훌륭한 XFS COW 관련 경쟁 조건 취약점의 PoC를 포함합니다. [1] [2]
Qualys 권고문의 훌륭한 분석을 바탕으로 직접 작성했습니다. /etc/passwd 파일의 처음 4KB를 원래 내용으로 다시 쓰고, root 사용자 줄인 root:x:0:0:root:/root:/bin/bash를 root::0:0:root:/root:/bin/bash로 바꿉니다. 차이점이 보이나요? 이제 root 사용자는 암호가 없으므로 su -를 바로 실행할 수 있습니다.
제 필요에 맞춰 대충 만든 PoC라 오류 처리가 형편없고, 원본 파일이나 그런 것에 대한 멋진 백업은 없습니다. 2026년 2월 커널이 탑재된 XFS / 마운트에서 실행되는 Rocky Linux 9.7 가상 머신에서 테스트했습니다. 또한 /etc/passwd 쓰기를 대충 패딩 처리하므로, 실행 중인 머신이 소중하다면 실행 전에 파일을 백업하세요. 제 머신들을 점검하기 위해 PoC를 만들었고, 한동안 보류할 생각이었지만 어제 다른 PoC가 공개된 것을 보고...
/home이 /etc/passwd와 다른 파티션에 있다면 PoC의 CLONE_FILE 변수를 쓰기 가능한 경로로 조정해야 할 수도 있습니다. /var/tmp가 도움이 될 수 있으며, 노출 범위를 파악하려면 find / -writable을 사용하면 됩니다. 컴파일은 gcc refluxfs.c -o refluxfs -lpthread로 합니다.
PoC는 로그나 dmesg에 흔적을 남기지 않습니다. 제 생각에 이를 잡는 가장 좋은 방법은 XFS 파일시스템에서 FICLONE을 사용하는 ioctl 호출을 모니터링하는 SIEM 규칙을 설정하는 것입니다.
파일 무결성 모니터링 도구도 이를 감지할 수 있습니다.
가능하면 커널을 업데이트하세요. 또는 Red Hat이 제공하는 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 및 mount -l | grep xfs로 확인하세요.XFS 코드의 버그로 인해 파일에 대해 Copy-On-Write가 요청될 때 COW가 제대로 해제되지 않습니다. 복사한 파일에 쓰기를 할 때 COW가 해제되어 디스크에는 서로 다른 두 파일이 존재해야 합니다. 스레드를 사용하면 경쟁 조건 때문에 두 파일에 동시에 쓸 수 있습니다.
대상 파일을 읽을 수 있고 ioctl(fd, FICLONE)로 복제할 수 있다면 COW가 활성화된 복사본을 가지게 됩니다. 반드시 같은 파티션에 있어야 합니다.

그런 다음 O_DIRECT로 복사본에 write()하기만 하면 원본 파일도 수정할 수 있습니다.

1: https://openwall.com/lists/oss-security/2026/07/22/14
제 글에 틀린 내용이 있을 수 있지만, 특히 이 멋진 몇 달 동안 어딘가에서 시작하고 싶었습니다.
"혼란한 시대의 인간보다 평화로운 시대의 개가 낫다."
- 풍몽룡, 《경세통언》