732바이트 익스플로잇으로 리눅스 시스템 Root 권한 획득 가능
AF_ALG + splice()를 악용한 리눅스 커널 취약점(CVE-2026-31431)이 발견되어, 로컬 권한 상승 및 컨테이너 탈출 가능성이 제기됨
732바이트의 PoC(Proof of Concept) 스크립트를 통해 Ubuntu, Amazon Linux, RHEL, SUSE 등 주요 배포판에서 root 권한 획득 가능
페이지 캐시(Page Cache)를 조작하여 setuid 바이너리(setuid binary)를 변조하는 방식으로, 디스크 상의 파일 변경 없이 시스템 권한을 획득
AI 기반의 취약점 분석 도구(Vulnerability Analysis Tool)를 활용하여, AF_ALG 암호화 서브시스템(Crypto Subsystem)에서 취약점을 발견
AF_ALG와 splice()를 이용한 페이지 캐시 조작
본 취약점은 AF_ALG(Address Family Algorithm) 소켓을 통해 커널의 암호화 기능을 사용자 공간에 노출시키는 데서 시작된다. 특히, splice() 함수를 사용하여 파일 디스크립터(File Descriptor)와 파이프(Pipe) 간에 데이터 복사 없이 페이지 캐시 페이지를 직접 전달하는 과정에서 문제가 발생한다. 페이지 캐시(Page Cache)는 시스템 성능 향상을 위해 사용되지만, 이 취약점을 통해 공격자는 페이지 캐시의 내용을 조작하여 권한 상승을 시도할 수 있다. 이는 데이터 격리 아키텍처(Data Isolation Architecture)의 취약점을 노린 것이다.
authencesn AEAD 알고리즘의 취약성
취약점의 핵심은 authencesn AEAD(Authenticated Encryption with Associated Data) 알고리즘의 설계 결함에 있다. authencesn은 IPsec의 ESN(Extended Sequence Number) 지원을 위해 사용되며, AAD(Associated Authenticated Data) 내에서 시퀀스 번호(Sequence Number)를 재정렬하는 과정에서 할당되지 않은 메모리 영역(Unallocated Memory Area)에 4바이트를 기록한다. 이로 인해, 공격자는 페이지 캐시(Page Cache)에 저장된 setuid 바이너리의 내용을 변조하여 root 권한을 획득할 수 있다. 특히, 데이터 미저장 정책(Zero-Retention Policy)을 우회하는 공격이 가능하다.
익스플로잇의 동작 방식 및 영향
익스플로잇은 AF_ALG 소켓을 생성하고, authencesn 알고리즘을 바인딩한 후, sendmsg()와 splice()를 사용하여 공격 페이로드를 구성한다. sendmsg()는 AAD를 제공하고, splice()는 대상 파일의 페이지 캐시 페이지를 제공한다. authencesn 알고리즘이 실행되면서, 공격자는 /usr/bin/su 바이너리의 .text 섹션에 4바이트를 덮어쓸 수 있다. 이후 execve("/usr/bin/su")를 호출하면, 변조된 바이너리가 실행되어 root 권한을 획득한다. 이 취약점은 컨테이너 탈출(Container Escape) 및 쿠버네티스 노드(Kubernetes Node) 침해로 이어질 수 있다.
AI 기반 취약점 분석 도구 Xint Code
본 취약점은 AI 기반의 Xint Code를 사용하여 발견되었다. Xint Code는 사용자가 정의한 공격 표면(Attack Surface)을 분석하고, 잠재적인 취약점을 자동으로 탐지한다. 이번 사례에서는 AF_ALG와 splice()의 상호 작용에 주목하여, 페이지 캐시 페이지가 암호화 서브시스템에 직접 전달되는 경로를 분석했다. Xint Code는 자동화된 코드 분석(Automated Code Analysis)을 통해, 수동 분석의 한계를 극복하고, 새로운 취약점을 발견하는 데 기여했다.
패치 및 완화 방안
해당 취약점은 커널 패치를 통해 해결되었다. 패치는 algif_aead.c 파일을 수정하여, AF_ALG AEAD 연산을 out-of-place 방식으로 변경함으로써, 페이지 캐시 페이지가 writable scatterlist에 포함되는 것을 방지한다. 즉, req->src와 req->dst를 분리하여, 페이지 캐시 페이지가 덮어쓰여지는 것을 막는다. 또한, seccomp를 사용하여 AF_ALG 소켓 생성을 차단하거나, algif_aead 모듈을 블랙리스트에 추가하는 방법으로 즉각적인 완화가 가능하다. GDPR 규제 준수(GDPR Compliance)를 위한 보안 강화가 필요하다.