2017년부터 숨어있던 결함, 이제 실전 무기가 됐다
2026년 4월 29일, Linux 커널 암호화 모듈에서 치명적인 논리 결함이 공개됐습니다. CVE-2026-31431, 별명 Copy Fail. 발견한 건 보안 연구팀 Xint. 이들이 공개한 개념 증명(PoC) 코드는 단 732바이트짜리 Python 스크립트입니다.
이 스크립트를 실행하면 비권한 로컬 사용자가 Ubuntu, RHEL, Amazon Linux, SUSE 등 주요 Linux 배포판에서 수 초 안에 root 권한을 획득합니다. 버그가 처음 도입된 건 2017년. 약 9년간 수억 대의 서버에 잠복해 있었습니다.
| 항목 | 세부 내용 |
|---|---|
| CVE | CVE-2026-31431 |
| 별명 | Copy Fail |
| CVSS 점수 | 7.8 (High) |
| 유형 | 로컬 권한 상승(LPE) |
| PoC 공개 | 예 (732바이트 Python 스크립트) |
| CISA KEV | 등재됨, 패치 기한 2026-05-12 |
어떻게 동작하는가
Linux 커널에는 AF_ALG라는 인터페이스가 있습니다. 사용자 공간 애플리케이션이 커널의 하드웨어 가속 암호화 기능을 직접 사용할 수 있게 해주는 통로입니다. 이 중에서도 algif_aead 모듈이 문제였습니다.
2017년, 커널 개발자는 AEAD(인증된 암호화) 연산을 빠르게 처리하기 위해 인플레이스(in-place) 메모리 최적화를 도입했습니다. 처리 결과를 별도의 버퍼에 복사하는 대신 원본 메모리를 그대로 수정하는 방식이었습니다. 성능 개선을 위한 선의의 수정이 9년 뒤 치명적인 결함으로 드러났습니다.
공격은 이 최적화를 splice() 시스템 콜과 조합하는 방식입니다. 공격자는 AF_ALG 소켓과 splice()를 체이닝해서 커널이 페이지 캐시에 4바이트를 쓰도록 유도합니다. 페이지 캐시는 디스크 파일을 메모리에 올려둔 복사본입니다. 마치 도서관 책의 메모리 내 사본을 몰래 수정하는 것과 같습니다.
공격자가 노리는 건 /usr/bin/su 같은 setuid 바이너리입니다. setuid 비트가 설정된 실행 파일은 어떤 사용자가 실행해도 파일 소유자(보통 root)의 권한으로 실행됩니다. 페이지 캐시에서 이 바이너리의 핵심 코드 4바이트를 덮어쓰면 디스크에는 흔적이 남지 않고 메모리 내에서만 조작이 이루어집니다.
Dirty Pipe(CVE-2022-0847)와 비교하면 Copy Fail은 타이밍 의존 없이 결정론적으로 작동합니다. 레이스 컨디션도, 까다로운 타이밍 창도 없습니다. 스크립트를 실행하면 됩니다.
내 서버, 클라우드, 컨테이너가 위험한가
2017년 이후에 배포된 Linux 커널이라면 기본적으로 취약합니다.
| 배포판 | 취약 버전 | 패치 상태 |
|---|---|---|
| Ubuntu | 14.04~25.10 (26.04 제외) | 2026-04-30 패치 출시 |
| RHEL | 10.1 | 패치 배포 중 |
| Amazon Linux | 2023 | 패치 배포 중 |
| SUSE | 16 | 패치 배포 중 |
| Debian, Fedora, Arch | 2017년 이후 커널 | 배포판별 확인 필요 |
단순한 서버 하나의 root 문제가 아닙니다. Kubernetes 환경에서는 컨테이너 탈출 벡터가 됩니다. 페이지 캐시는 같은 호스트의 모든 프로세스가 공유합니다. 컨테이너 경계도 예외가 아닙니다. 컨테이너 내부에서 호스트 노드 전체를 장악할 수 있다는 의미입니다.
CERT-EU는 Kubernetes 노드와 CI/CD 러너를 우선 패치 대상으로 지목했습니다. CI/CD 러너에 외부 코드가 실행될 수 있는 환경이라면 단순 권한 상승을 넘어 공급망 공격으로 이어질 수 있습니다.
지금 할 수 있는 대응법
-
즉시 커널 업데이트 — Ubuntu는
sudo apt-get update && sudo apt-get upgrade로 즉시 적용합니다. RHEL, Amazon Linux, SUSE는 각 배포판 보안 권고문에서 패치 커널을 확인합니다. CISA는 연방 기관에 2026년 5월 12일까지 패치를 명령했습니다. -
임시 조치: algif_aead 모듈 비활성화 — 패치 커널을 즉시 적용하기 어렵다면 재부팅 없이 모듈을 비활성화할 수 있습니다.
sudo modprobe -r algif_aead
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
algif_aead를 실제로 사용하는 암호화 라이브러리가 있다면 영향을 받을 수 있지만 대부분의 시스템에서는 드문 경우입니다.
-
Kubernetes 노드 우선 패치 — 클러스터 환경에서는 노드 단위로 롤링 업데이트를 적용합니다. 패치 전에는 네트워크 정책으로 컨테이너 간 접근을 최소화합니다.
-
탐지 설정 — auditd나 Falco로 AF_ALG 소켓과 splice()를 조합하는 비정상적인 시스템 콜 패턴을 모니터링합니다.
-
Ubuntu 자동 업데이트 확인 —
unattended-upgrades가 이미 패치를 적용했을 수 있습니다.uname -r로 현재 커널 버전을 확인하고 Ubuntu 보안 권고문과 비교합니다.
참고