
CVE-2026-31431 (Copy Fail)을 대상으로 하는 Linux AF_ALG splice 취약점에 대한 C 익스플로잇입니다. 탐지 테스트 및 /usr/bin/su 페이지 캐시 조작을 통한 권한 상승을 포함하여 루트 셸을 획득합니다.
CVE-2026-31431(Copy Fail) C 언어 PoC, 로직 정렬 theori-io/copy-fail-CVE-2026-31431 원본 Python exploit.
승인된 보안 연구 및 실험 환경에서만 사용하세요. 승인되지 않은 시스템에서의 사용을 금지합니다.
Linux AF_ALG의 authencesn(hmac(sha256),cbc(aes))는 splice + AEAD 경로에서 AAD의 4바이트를 대상 파일의 페이지 캐시에 쓸 수 있습니다(디스크 내용은 변하지 않음).
이 저장소의 exploit 동작은 원본과 동일합니다:
/usr/bin/su 페이지 캐시에 zlib으로 압축 해제된 초소형 ELF를 4바이트씩 순차적으로 씁니다.su를 실행하면 변조된 페이지 캐시에서 가짜 su를 로드하여 일반적으로 비밀번호 없이 root 셸을 획득합니다.copy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 원시
│ ├── util.c # 사전 검사
│ ├── test_main.c # 취약점 감지
│ └── exploit_main.c # 권한 상승
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
생성:
| 산출물 | 설명 |
|---|---|
bin/copy-fail-test | 취약점 감지 (임시 sentinel 파일, 시스템 파일 수정 안 함) |
bin/copy-fail-exploit | 권한 상승 (/usr/bin/su 페이지 캐시 수정 후 exec su) |
고버전 시스템에서 컴파일 후 GLIBC_2.34 / GLIBC_2.38 not found가 나타나면 컴파일 머신에서 다음을 실행하세요:
make static
bin/copy-fail-test, bin/copy-fail-exploit을 대상 시스템에 복사하여 실행하세요. 대상 시스템에서 소스코드로 make를 실행해도 됩니다(동적 링크, 용량 더 작음).
./bin/copy-fail-test
echo $?
| 종료 코드 | 의미 |
|---|---|
| 0 | 취약점 특성 미발현 / 전제 조건 불충족 |
| 2 | 취약점 특성 존재 |
| 1 | 테스트 과정 오류 |
./bin/copy-fail-exploit
id
출력 없음이 정상 설계입니다; 성공 시 root 셸로 진입합니다. 실패 시 echo $?는 일반적으로 1입니다.
AF_ALG 소켓 생성 가능bind 가능한 알고리즘 authencesn(hmac(sha256),cbc(aes))/usr/bin/su에 대한 읽기 권한splice로 AF_ALG 소켓에 쓰기 가능감지기가 cannot be instantiated (No such file or directory)를 표시하면:
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
일부 배포판은 modprobe를 통해 algif_aead를 비활성화합니다(예: Ubuntu USN 조치). root 권한이 있는 실험 머신에서 해제한 후 테스트하세요.
권한 상승 테스트 후(root 셸에서) 페이지 캐시 오염을 버릴 수 있습니다:
echo 3 > /proc/sys/vm/drop_caches
또는 가상 머신을 재시작하세요.