
Rust로 작성된 Linux 커널 로컬 권한 상승 취약점 PoC로, Crypto API와 splice를 악용하여 페이지 캐시를 덮어쓰고 /etc/passwd의 UID를 수정해 루트 권한을 획득합니다.
이 프로젝트는 로컬 권한 상승(LPE) 취약점(CVE-2026-31431 시뮬레이션)을 Rust로 구현한 개념 증명(PoC)입니다. Crypto API를 악용하여 Linux 커널 페이지 캐시를 조작하는 방법을 시연합니다.[cite: 1, 2]
[!CAUTION] 이 코드는 교육 및 윤리적 보안 연구 목적으로만 사용됩니다. 사전 명시적 동의 없이 시스템에 대해 이 도구를 무단 사용하는 것은 불법입니다. 저자는 이 프로그램으로 인한 오용이나 손해에 대해 어떠한 책임도 지지 않습니다.
이 도구는 AF_ALG(커널 암호화 인터페이스) 및 splice 시스템 호출과 관련된 취약점을 악용합니다.[cite: 2] 권한이 없는 사용자가 읽기 전용 파일의 페이지 캐시 4바이트를 덮어쓸 수 있게 하며, 특히 /etc/passwd의 UID 필드를 대상으로 일시적으로 0000(root)으로 변경합니다.[cite: 1, 2]
main.rs를 파싱하여 /etc/passwd 내 현재 사용자 UID의 정확한 파일 오프셋을 찾습니다.[cite: 1, 2]authesn(hmac(sha256),cbc(aes)) 알고리즘으로 AF_ALG를 사용하여 소켓을 초기화합니다.[cite: 2]setsockopt 매개변수를 신중하게 구성하고 splice를 사용하여 파일 데이터를 암호화 파이프라인을 통해 리디렉션합니다.[cite: 2]0000)로 덮어쓸 수 있습니다.[cite: 2]--shell 플래그가 제공되면 su <user>를 실행하며, 시스템이 캐시된 /etc/passwd에서 사용자 UID를 0으로 인식하므로 성공합니다.[cite: 1]POSIX_FADV_DONTNEED를 사용하여 손상된 페이지 캐시를 제거하고 시스템 무결성을 복원합니다.[cite: 1]libc 및 nix(fs, socket, zerocopy, user 기능 포함).[cite: 3]cargo build --release
셸을 생성하지 않고 페이지 캐시 패칭 테스트:
./target/release/cve-2026-31431
루트 셸로 권한 상승 시도:
./target/release/cve-2026-31431 --shell
main.rs: 공격을 조율하고, CLI 인수를 처리하며, 최종 셸 명령을 실행합니다.[cite: 1]modules.rs: AF_ALG 소켓 조작 및 UID 오프셋 검색을 포함한 핵심 악용 로직을 포함합니다.[cite: 2]Cargo.toml: 프로젝트 메타데이터와 외부 크레이트 의존성을 정의합니다.[cite: 3]main.rs, modules.rs, Cargo.toml[cite: 1, 2, 3]socket, bind, sendmsg, splice, posix_fadvise.[cite: 1, 2]