1. 로컬 사용자에게 root 권한을 열어주는 4바이트 쓰기
Copy Fail은 Linux 커널 암호화 인터페이스에서 발생한 로컬 권한 상승 취약점이다. Linux Kernel CNA가 산정한 CVSS v3.1 점수는 7.8(High)이다. 공격 복잡도는 낮고 사용자 상호작용은 필요하지 않지만, 공격자가 먼저 낮은 권한으로 시스템에서 코드를 실행할 수 있어야 한다.
이 취약점이 제공하는 능력은 읽을 수 있는 파일의 페이지 캐시(Page Cache)에서 공격자가 정한 위치와 값으로 4바이트를 바꾸는 쓰기 원시 기능(primitive)이다. 4바이트는 작지만 대상이 setuid 실행 파일이라면 결과가 달라진다. 커널이 변조된 메모리 사본을 실행에 사용하면서 일반 사용자의 프로세스가 root 권한을 얻을 수 있다.
운영자는 인터넷 노출 여부보다 로컬 코드 실행 경로를 먼저 살펴야 한다. 셸 계정, SSH 접근, 다중 사용자 서버, 개발 환경, 컨테이너 워크로드처럼 낮은 권한의 코드를 실행할 수 있는 지점이 우선 점검 대상이다.
2. AF_ALG와 페이지 캐시에서 시작된 취약점
AF_ALG는 사용자 프로세스가 소켓과 유사한 인터페이스로 커널 암호화 기능을 호출하게 한다. 취약한 경로에서는 algif_aead가 인증 암호화 요청을 처리하고, authencesn 템플릿이 함께 사용된다. 파일 데이터를 사용자 공간에 복사하지 않고 파일 디스크립터 사이에서 전달하는 splice()도 공격 조건을 만드는 데 관여한다.
정상적인 out-of-place 처리는 입력과 출력 버퍼를 분리한다. 그러나 취약한 in-place 최적화는 입력과 출력에 같은 scatterlist를 사용했다. splice()가 파일의 페이지 캐시 참조를 입력에 연결한 상태에서 authencesn의 임시 4바이트 쓰기가 정상 출력 경계를 넘으면, 쓰기 대상이 되어서는 안 될 페이지 캐시까지 바뀔 수 있다.
입력과 출력을 다시 분리하는 것이 upstream 수정의 핵심이다. 패치는 algif_aead를 out-of-place 처리로 되돌려 페이지 캐시 페이지가 쓰기 가능한 destination scatterlist에 연결되지 않도록 한다.
3. setuid 실행 이미지까지 이어지는 공격 흐름
공격자는 먼저 낮은 권한의 로컬 프로세스에서 AF_ALG와 splice()를 사용해 읽을 수 있는 파일의 페이지 캐시를 암호화 입력에 연결한다. 이어 취약한 in-place 처리에서 발생하는 경계 초과 쓰기를 이용해 원하는 위치의 4바이트를 바꾼다. 이 과정을 반복하면 더 큰 코드 변경에 필요한 바이트를 단계적으로 구성할 수 있다.
setuid는 일반 사용자가 실행해도 파일 소유자의 권한으로 제한된 작업을 수행하게 하는 실행 파일 속성이다. 공격자가 root 소유 setuid 프로그램의 페이지 캐시 사본을 바꾼 뒤 해당 프로그램을 실행하면, 디스크 파일이 그대로인 상태에서도 변조된 코드 흐름이 높은 권한으로 실행될 수 있다.
페이지 캐시 변경이 일반 파일 쓰기 경로를 거치지 않고 dirty 상태로 표시되지 않는다는 점도 탐지를 어렵게 한다. 디스크에서 계산한 checksum은 정상이어도 실행 중인 시스템이 읽는 메모리 사본은 달라질 수 있다.

Copy Fail이 페이지 캐시의 4바이트 변조를 통해 setuid 실행 이미지에 영향을 줄 수 있는 흐름을 단순화했다. ※ 개념도
4. 영향 범위는 커널 버전보다 배포판 패키지로 확인
Linux Kernel CNA는 upstream 코드 기준으로 2017년의 커밋 72548b093ee3 이후가 영향 범위에 들어가며, CVE Record의 semantic range는 4.14부터 시작한다고 설명한다. Stable branch별 최초 수정 버전은 다음과 같다.
- 5.10.254 이상
- 5.15.204 이상
- 6.1.170 이상
- 6.6.137 이상
- 6.12.85 이상
- 6.18.22 이상
- 6.19.12 이상
- 7.0 이상
이 숫자는 upstream 경계다. Ubuntu, Red Hat, SUSE, Debian 등은 수정 사항을 기존 커널 패키지에 backport할 수 있다. uname -r의 버전만 비교하지 말고 설치한 패키지 빌드가 해당 배포판 advisory에서 Fixed 또는 Not affected로 분류되는지 확인해야 한다.
5. 공개 PoC와 실제 악용 가능성
Theori/Xint는 Copy Fail 분석과 공식 PoC 저장소를 공개했다. 저장소에는 README와 732바이트 Python 3 코드인 copy_fail_exp.py가 있으며, 연구팀은 Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1, SUSE 16에서 시험한 커널 조합을 제시했다.
공개 PoC의 구조와 동작 조건은 저장소 기준으로 확인했으며, 이번 분석에서는 실제 exploit 실행을 수행하지 않았다. 정적 검토에서는 os, zlib, socket 사용과 splice(), /usr/bin/su, 압축된 내장 payload가 확인됐다.
CISA는 2026년 5월 1일 CVE-2026-31431을 Known Exploited Vulnerabilities(KEV) 카탈로그에 추가했다. KEV 등재는 공개 PoC가 존재한다는 사실보다 대응 우선순위를 더 높이는 근거다. 인터넷에서 직접 호출하는 원격 취약점은 아니지만, 초기 접근을 확보한 공격자나 낮은 권한의 내부 사용자가 root로 권한을 높이는 단계에 활용할 수 있다.
6. 디스크 검사만으로 놓칠 수 있는 페이지 캐시 변조
모든 환경에 그대로 적용할 수 있는 단일 탐지 시그니처는 공개 자료에서 확인되지 않았다. 가장 확실한 첫 단계는 자산의 설치 커널 패키지와 실행 중인 커널을 vendor advisory와 대조하는 것이다.
수정 전 시스템에서는 AF_ALG 소켓 사용, 비정상적인 암호화 사용자 API 호출, setuid 프로그램 실행 전후의 권한 전환, 관련 프로세스 계보를 audit 또는 eBPF 기반 관측으로 보강할 수 있다. 정상적인 암호화 사용도 같은 인터페이스를 호출할 수 있으므로 호출 자체만으로 침해를 단정해서는 안 된다.
의심 시스템에서는 디스크 checksum만 확인하고 조사를 끝내지 않는다. 시스템을 격리한 뒤 신뢰할 수 있는 환경에서 재부팅·검사하고, 실행 중 페이지 캐시와 디스크 내용의 차이, 비정상 권한 상승 흔적을 함께 조사해야 한다.
7. 수정 커널 적용과 운영 환경별 대응
가장 신뢰할 수 있는 대응은 배포판 보안 저장소에서 CVE-2026-31431 수정 커널 패키지를 적용한 뒤 재부팅하는 것이다. 재부팅 후에는 설치된 패키지만 보지 말고 실제 실행 중인 커널 빌드가 수정 버전인지 확인한다.
즉시 패치할 수 없다면 로컬 접근을 줄이고 SELinux enforcing, 기본 Security Context Constraints(SCC), non-root 워크로드를 유지한다. Red Hat은 운영 영향을 검토한 뒤 initcall_blacklist를 이용해 algif_aead, af_alg, authencesn 관련 기능을 제한하는 방안도 안내한다. 이 조치는 암호화 기능과 워크로드 호환성에 영향을 줄 수 있으므로 패치를 대신하는 장기 대책으로 사용하지 않는다.
컨테이너는 호스트 커널과 페이지 캐시를 공유한다. 컨테이너 프로세스가 취약한 AF_ALG 경로와 필요한 파일 참조에 도달하면 호스트까지 영향이 이어질 수 있다. 실제 위험은 seccomp, Linux Security Module(LSM), 사용자 namespace, 런타임 설정과 커널 빌드에 따라 달라지므로 모든 컨테이너가 자동으로 탈출된다고 단정해서는 안 된다.

컨테이너가 프로세스와 파일시스템을 격리하더라도 호스트 커널과 페이지 캐시는 공유한다. ※ 개념도
운영팀은 다음 순서로 대응할 수 있다.
- 설치된 커널 패키지와 실행 중인 커널을 함께 수집한다.
- 배포판 CVE 페이지에서 정확한 패키지 빌드 상태를 확인한다.
- 수정 패키지를 적용하고 재부팅한다.
- 로컬 계정, SSH, 컨테이너 워크로드의 코드 실행 권한을 재검토한다.
- 패치 전 노출된 시스템은 페이지 캐시 변조와 비정상 권한 상승 흔적을 조사한다.
- 임시 기능 제한을 사용했다면 성능과 호환성 회귀를 확인한다.
8. 참고 자료
- Linux Kernel CNA / CVE Record
- Linux Kernel CNA JSON API
- NVD
- Theori 공식 발표
- Theori/Xint 기술 분석
- Theori 공식 GitHub PoC
- CISA KEV Catalog
- Ubuntu CVE
- Red Hat Security Bulletin
- SUSE CVE
- Debian Security Tracker
댓글 남기기
댓글목록 0
아직 작성된 댓글이 없습니다.
첫 번째 댓글의 주인공이 되어보세요!