
CVE-2026-31431에 대한 익스플로잇으로, Linux 커널의 authencesn 버그를 이용해 4바이트 페이지 캐시 쓰기를 통해 로컬 권한 상승 및 컨테이너 탈출을 가능하게 합니다.
모든 주요 Linux 배포판에서 732바이트로 루트 권한 획득
CVE-2026-31431 (Copy Fail)은 Linux 커널의 authencesn 암호화 템플릿에서 발견된 로직 버그입니다. 이 버그로 인해 권한이 없는 로컬 사용자가 시스템의 읽기 가능한 모든 파일의 페이지 캐시에 결정적이고 통제된 4바이트 쓰기를 트리거할 수 있습니다.
CONFIG_CRYPTO_AUTHENC가 활성화된 Linux 커널 (2017년 이후 사실상 모든 주요 배포판)이 버그는 두 가지 동작을 연쇄적으로 활용합니다:
AF_ALG + splice: splice()는 페이지 캐시 페이지를 참조로 AF_ALG 소켓의 scatterlist로 전송합니다. AEAD 복호화 인플레이스 모드에서 태그 페이지(대상 파일의 페이지 캐시에서)는 sg_chain()을 통해 출력 scatterlist에 계속 연결된 상태로 유지됩니다.
authencesn 스크래치 쓰기: crypto_authenc_esn_decrypt()는 dst[assoclen + cryptlen](태그를 지나 페이지 캐시 페이지로 이어지는 영역)을 ESN 시퀀스 번호 재배열을 위한 스크래치 공간으로 사용하며, 공격자가 통제하는 4바이트를 쓰고 복원하지 않습니다.
손상된 페이지는 더티로 표시되지 않으므로 디스크의 파일은 변경되지 않습니다. 그러나 실제로 읽히는 것은 메모리 내 페이지 캐시이므로 — 손상은 시스템 전체에서 즉시 확인 가능합니다.
이 익스플로잇은 /usr/bin/su(또는 모든 setuid 바이너리)의 페이지 캐시를 작은 셸코드 페이로드로 4바이트씩 손상시킵니다. 모든 반복이 완료된 후 su를 실행하면 페이로드가 실행되어 루트 셸로 전환됩니다.
python3 exp.py
gcc -o exp exp.c
./exp
| 기능 | 세부 사항 |
|---|---|
| 이식성 | 동일한 스크립트가 Ubuntu, Amazon Linux, RHEL, SUSE 등에서 작동 — 배포판별 오프셋 불필요 |
| 초소형 | Python 익스플로잇은 약 732바이트 |
이 저장소는 교육 및 방어 연구 목적으로만 게시되었습니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에서 이 코드를 사용하지 마십시오.
| 은밀성 | VFS 쓰기 경로 우회; 페이지가 더티로 표시되지 않음; 디스크 체크섬 변경 없음 |
| 크로스 컨테이너 | 페이지 캐시는 컨테이너 간 공유됨 — 컨테이너 탈출 벡터 (2부 참조) |