
# CVE-2026-31431 개념 증명 익스플로잇 Linux 커널 AF_ALG 메모리 손상 취약점에 대한 개념 증명 익스플로잇입니다. splice를 사용하여 페이지 캐시의 /usr/bin/su를 패치하여 비밀번호 없는 루트 권한 상승을 가능하게 합니다.
CopyFail은 Linux 커널 Crypto API(AF_ALG)의 메모리 손상 취약점을 대상으로 하는 CVE-2026-31431에 대한 개념 증명 익스플로잇입니다. 이 익스플로잇은 splice 시스템 콜을 활용하여 /usr/bin/su 바이너리의 페이지 캐시를 무단으로 패치함으로써, 비밀번호 없이 루트 권한으로 상승할 수 있게 합니다.
이 취약점은 Linux 커널이 splice를 통해 AF_ALG 소켓과 다른 파일 디스크립터 간에 제로카피 데이터 전송을 처리하는 방식에 존재합니다. aead 구현의 부적절한 동기화 또는 경계 검사로 인해, 암호화 엔진이 처리한 데이터가 원본 파일의 페이지 캐시에 다시 기록될 수 있습니다.
AF_ALG 소켓을 초기화하고 sendmsg를 사용하여 소켓의 내부 버퍼에 악성 페이로드를 큐에 넣습니다.splice를 호출하여 /usr/bin/su 바이너리의 데이터를 AF_ALG 소켓으로 전송함으로써, 취약점으로 인해 소켓의 버퍼 내용이 메모리 내 바이너리의 페이지 캐시를 덮어씁니다.su의 인증 로직을 루트 셸을 생성하는 최소한의 ELF 페이로드로 교체합니다. 페이지 캐시가 수정되었으므로, 이후 su를 실행하면 원본 바이너리 대신 공격자의 코드가 실행됩니다.RawSyscall을 사용하는 순수 Go 구현.AF_ALG/splice 상호작용을 통한 커널 파일 캐시 직접 조작.fmt 또는 os 패키지 미사용).현재 아키텍처에 맞게 익스플로잇을 컴파일합니다:
go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
컴파일된 바이너리를 실행합니다:
./CopyFail
성공적으로 실행되면 su 바이너리가 메모리에서 패치되어 실행되며, 루트 셸이 부여됩니다.
다음 데모는 표준 Kali Linux 설치 환경에서 익스플로잇을 컴파일하고 실행하는 과정을 보여줍니다.
# 1. 현재 비특권 사용자 확인
kali@kali:~$ whoami
kali
# 2. 익스플로잇 컴파일
kali@kali:~$ go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
# 3. CopyFail 익스플로잇 실행
kali@kali:~$ ./CopyFail
[+] AF_ALG 메모리 손상 트리거 중...
[+] 페이지 캐시에서 /usr/bin/su 패치 중...
[+] 패치된 바이너리 실행 중...
# 4. 성공: 루트 셸로 권한 상승
root@kali:/home/kali# id
uid=0(root) gid=0(root) groups=0(root)
root@kali:/home/kali# whoami
root
이 취약점을 완화하기 위해 다음 단계를 권장합니다:
af_alg 및 관련 모듈을 비활성화합니다:
modprobe -r af_alg
auditd와 같은 보안 감사 도구를 활용하여 중요한 시스템 바이너리를 대상으로 하는 의심스러운 splice 호출을 모니터링합니다.⚠️ 경고: 이 도구는 승인된 보안 연구 및 교육 목적으로만 사용해야 합니다. 페이지 캐시 패칭은 휘발성 작업이며 시스템 불안정을 초래할 수 있습니다. 작성자는 오용에 대해 어떠한 책임도 지지 않습니다.
CVE-2026-31431("Copy Fail")은 Theori 의 연구팀에 의해 발견되고 공개되었습니다.
이 프로젝트는 MIT LICENSE에 따라 라이선스가 부여됩니다.