
CVE-2026-31431에 대한 익스플로잇으로, 페이지 캐시 조작을 통해 로컬 권한 상승으로 루트 권한을 획득할 수 있는 Linux 커널 authencesn 취약점입니다.
"Copy Fail"은 Linux 커널의 authencesn 암호화 템플릿에서 발견된 심각한 로직 취약점입니다. 이 취약점을 통해 권한이 없는 로컬 사용자가 시스템의 모든 읽기 가능한 파일의 페이지 캐시에 결정적이고 통제된 4바이트 쓰기를 트리거할 수 있습니다. setuid 바이너리(예: /usr/bin/su)를 대상으로 공격자는 메모리 내 실행 캐시를 수정하여 Root(UID 0) 권한으로 권한 상승을 수행할 수 있습니다.
"Dirty Cow"나 "Dirty Pipe"와 같은 기존 취약점과 달리 Copy Fail은 레이스 컨디션, 재시도, 크래시 위험이 있는 타이밍 윈도우 없이 트리거되는 직선형 로직 결함입니다. 또한 디스크의 파일은 완전히 변경하지 않고 메모리 내 페이지 캐시만 수정하므로 표준 파일 무결성 모니터링 도구를 우회하여 이식성이 높고 은밀합니다.
이 취약점은 세 가지 서로 다른 커널 구성 요소의 교차점에 존재합니다:
splice() 시스템 콜: splice() 시스템 콜은 복사 없이 파일 디스크립터와 파이프 간에 데이터를 전송하며, 페이지 캐시 페이지를 참조로 전달합니다. 사용자가 파일(예: /usr/bin/su)을 AF_ALG 소켓으로 splice하면 소켓의 입력 scatterlist는 해당 파일의 커널 캐시 페이지에 대한 직접 참조를 보유합니다.authencesn 스크래치 쓰기: authencesn 알고리즘(IPsec 확장 시퀀스 번호에 사용됨)은 바이트 재배열이 필요합니다. 이를 위해 출력 버퍼에 4바이트의 시퀀스 번호를 "스크래치 공간"으로 임시로 기록합니다. 그러나 이는 합법적인 출력 경계를 초과하여 기록됩니다.2017년 in-place 최적화로 인해 출력 scatterlist에는 splice()로 전달된 읽기 전용 페이지 캐시 페이지가 포함됩니다. authencesn이 출력 경계를 초과하여 기록할 때 대상 파일의 캐시된 커널 메모리 내 4바이트를 직접 덮어씁니다.
공격자는 다음 단계를 통해 이 취약점을 악용할 수 있습니다:
AF_ALG 소켓을 열고 authencesn(hmac(sha256),cbc(aes))에 바인딩합니다.sendmsg()를 전송합니다.splice()를 사용하여 대상 파일(/usr/bin/su)을 소켓으로 파이프합니다. 오프셋과 길이는 페이지 캐시에서 4바이트가 기록될 정확한 위치를 정의합니다.recv()를 호출하면 복호화 작업이 트리거되어 범위를 벗어난 스크래치 쓰기가 대상 파일의 페이지 캐시에 직접 실행됩니다.execve("/usr/bin/su"))를 실행합니다. 커널은 주입된 악성 셸코드가 포함된 변조된 페이지 캐시 버전을 실행하여 루트 액세스 권한을 부여합니다.커널 패치 또는 재부팅이 즉시 불가능한 경우, 관련된 모든 af_alg 모듈을 블랙리스트에 추가하고 메모리에서 언로드하여 이 취약점을 완화할 수 있습니다.
이 모듈들을 차단하려면 다음 명령을 실행하십시오:
# 1. 현재 로드된 모듈을 메모리에서 언로드
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. 모듈을 블랙리스트에 추가
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. af_alg 모듈이 완전히 로드되지 않도록 방지
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. 변경 사항이 완전히 적용되도록 시스템 재부팅
sudo reboot
Linux 커널 보안 팀은 이 취약점을 패치했습니다(커밋: a664bf3d603d). 이 패치는 AF_ALG AEAD 작업을 out-of-place 모델로 되돌려 소스와 대상 scatterlist를 분리합니다. 이를 통해 페이지 캐시 페이지가 쓰기 가능한 대상 scatterlist에 노출되는 것을 방지합니다.
필요 조치: 배포판 공급업체(Ubuntu, Amazon Linux, RHEL, SUSE 등)가 제공하는 최신 버전으로 커널을 업데이트하고 시스템을 재부팅하십시오.