
algif_aead 페이지 캐시 손상을 통한 Linux 커널 LPE인 CVE-2026-31431 (Copy Fail)에 대한 개념 증명 익스플로잇으로, 탐지, 랩 및 완화 지침을 포함합니다.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead 페이지 캐시 손상을 통한 리눅스 커널 로컬 권한 상승⚠️ 승인된 사용만 허용됨 — 이 저장소는 법적으로 허가된 침투 테스터, 보안 연구원 및 방어자만을 위한 것입니다. 오용 시 형사 처벌을 받을 수 있습니다.
| # | 섹션 | 설명 |
|---|---|---|
| 1 | Copy Fail이란? | 취약점 요약 |
| 2 | 기술 심층 분석 | 근본 원인 분석 |
| 3 | 영향받는 시스템 | 배포판 및 커널 매트릭스 |
| 4 | 저장소 구조 | 파일 레이아웃 |
| 5 | 연구실 설정 | 안전하게 재현하기 |
| 6 | 익스플로잇 사용법 | 침투 테스트 워크플로 |
| 7 | 탐지 | YARA, Sigma, 스크립트 |
| 8 | 완화 | 패치 및 강화 |
| 9 | 침투 테스트 보고 | 보고서 템플릿 |
| 10 | 법적 및 윤리 | 면책 조항 |
| 11 | 참고 자료 | CVE, 권고문, 블로그 |
Copy Fail은 2026년 4월 29일에 공개된 로컬 권한 상승(LPE) 취약점으로, 2017년 이후의 커널을 실행하는 사실상 모든 주요 리눅스 배포판에 영향을 미칩니다.
권한 없는 사용자 ──► AF_ALG + splice() ──► 4바이트 페이지 캐시 쓰기 ──► ROOT
| 속성 | 세부 사항 |
|---|---|
| CVE ID | CVE-2026-31431 |
| 별칭 | Copy Fail |
| CVSS v3.1 | 7.8 (HIGH) |
| 공격 벡터 | 로컬 |
| 필요 권한 | 낮음 (임의의 권한 없는 사용자) |
| 사용자 상호작용 | 없음 |
| 발견자 | Xint Code (Theori) |
| 공개일 | 2026년 4월 29일 |
| 익스플로잇 크기 | 732바이트 (Python PoC) |
| 패치 상태 | ✅ 사용 가능 — 커밋 a664bf3d603d 되돌리기 |
이 취약점은 2017년에 도입된 (커밋 72548b093ee3) 리눅스 커널 사용자 공간 암호화 API(AF_ALG)의 algif_aead 모듈 내 버그가 있는 인플레이스 최적화에서 비롯됩니다.
AF_ALG (사용자 공간 암호화 API)
└── algif_aead 모듈
└── authencesn 템플릿 ◄── 취약
└── 인플레이스 최적화 (2017)
└── req->src == req->dst ◄── splice()의 페이지가 쓰기 가능한 dst scatterlist에 체인됨
1단계: AF_ALG AEAD 소켓 열기
socket(AF_ALG, SOCK_SEQPACKET, 0)
2단계: 대상 파일을 참조하는 splice() 페이지 전송
(권한 있는 바이너리의 페이지 캐시 페이지, 예: /usr/bin/sudo)
3단계: authencesn 스크래치 쓰기 트리거
authencesn이 dst 버퍼를 스크래치 패드로 사용 →
합법적인 출력 영역을 넘어 4개의 제어된 바이트 쓰기
4단계: 대상 파일의 페이지 캐시 항목이 손상됨
(디스크 파일은 그대로 — 메모리 내 복사본만 수정됨)
5단계: 수정된 바이너리 실행 → ROOT
리눅스 커널의 페이지 캐시는 파일의 메모리 내 복사본을 백업합니다. 파일을 읽으면 해당 페이지가 캐시됩니다. splice() 시스템 호출은 이러한 캐시된 페이지를 직접 참조할 수 있습니다. 페이지 캐시 페이지를 AF_ALG AEAD scatterlist에 공급하면 authencesn 스크래치 쓰기가 해당 캐시된 페이지 내부에 위치하게 되어, sudo, pkexec 또는 passwd와 같은 읽기 가능한 모든 권한 있는 바이너리의 메모리 내 복사본을 효과적으로 패치할 수 있습니다.
상류 수정 사항은 결함이 있는 2017년 최적화를 되돌립니다.
# Fixed in commit: a664bf3d603d
git show a664bf3d603d
| 커널 브랜치 | 영향받음? | 수정 버전 |
|---|---|---|
| 4.9.x (LTS) | ✅ 예 | 4.9.340+ |
| 5.4.x (LTS) | ✅ 예 | 5.4.295+ |
| 5.10.x (LTS) | ✅ 예 | 5.10.239+ |
| 5.15.x (LTS) | ✅ 예 | 5.15.185+ |
| 6.1.x (LTS) | ✅ 예 | 6.1.132+ |
| 6.6.x (LTS) | ✅ 예 | 6.6.83+ |
| 6.12.x (LTS) | ✅ 예 | 6.12.19+ |
| < 4.9 (2017년 이전) | ❌ 아니요 | 해당 없음 — 최적화 없음 |
| 배포판 | 영향받는 버전 | 패치됨? | 권고문 |
|---|---|---|---|
| Ubuntu | < 26.04 (모든 릴리스) | ✅ 패치됨 | USN |
| Ubuntu 26.04 (Resolute) | ❌ 영향 없음 | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ 패치됨 | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ 패치됨 | ALAS |
| SUSE / openSUSE | 모두 영향받음 | ✅ 패치됨 | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ 패치됨 | DSA |
| CloudLinux | 8, 9 | ✅ 패치됨 | 권고문 |
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← 현재 위치
├── 📄 LICENSE ← 연구/교육 라이선스
├── 📄 DISCLAIMER.md ← 법적 및 윤리적 사용 정책
├── 📄 CHANGELOG.md ← 버전 기록
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← 심층 분석: 근본 원인 및 메커니즘
│ ├── exploitation-walkthrough.md ← 단계별 방법론
│ ├── affected-kernels.md ← 전체 커널/배포판 버전 매트릭스
│ ├── detection.md ← Defender, Tenable, Wazuh 적용 범위
│ └── references.md ← 모든 CVE, 블로그, 권고문
│
├── 📂 exploit/
│ ├── README.md ← 사용법, 전제 조건, 테스트된 배포판
│ ├── copyfail.py ← 참조 PoC (교육용)
│ ├── trigger.c ← AF_ALG + splice() C 트리거
│ └── variants/
│ ├── ubuntu.py ← Ubuntu 전용 변종
│ ├── rhel.py ← RHEL/CentOS 변종
│ └── amazon_linux.py ← Amazon Linux 변종
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← 익스플로잇 아티팩트용 YARA 규칙
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← SIEM/SOC용 Sigma 규칙
│ └── scripts/
│ ├── check_vulnerable.sh ← 빠른 커널 취약점 확인
│ └── detect_algif_aead.sh ← 모듈 로드/활성 여부 확인
│
├── 📂 mitigation/
│ ├── README.md ← 완화 개요
│ ├── disable_algif_aead.sh ← 영향받는 커널 모듈 비활성화
│ ├── patch-notes.md ← 상류 패치 세부 정보
│ └── kubernetes-hardening.md ← K8s / 컨테이너 강화
│
├── 📂 lab/
│ ├── Vagrantfile ← 재현 가능한 취약 VM
│ ├── setup.sh ← 연구실 부트스트랩 스크립트
│ └── docker/
│ └── Dockerfile ← 취약한 Ubuntu 컨테이너
│
├── 📂 reports/
│ ├── pentest-report-template.md ← 클라이언트용 보고서 템플릿
│ └── sample-finding.md ← 샘플 발견 사항 작성
│
└── 📂 assets/
├── demo.gif ← (선택 사항) 터미널 데모
└── diagrams/
└── page-cache-write.png ← 공격 흐름 다이어그램
항상 격리되고 승인된 환경에서 테스트하세요. 절대 프로덕션 시스템에서 익스플로잇을 실행하지 마세요.
# 저장소 복제
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# 취약한 연구실 VM 시작
cd lab/
vagrant up
# 연구실에 SSH 접속
vagrant ssh
# 커널 버전 확인 (취약해야 함)
uname -r
cd lab/docker/
# 취약한 컨테이너 이미지 빌드
docker build -t copyfail-lab .
# 커널 상호작용을 위한 필수 권한으로 실행
docker run --rm -it --privileged copyfail-lab /bin/bash
# 빠른 확인 스크립트 실행
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
취약한 시스템에서의 예상 출력:
[!] Kernel version: 5.15.0-91-generic
[!] algif_aead module: LOADED
[✗] System appears VULNERABLE to CVE-2026-31431 (Copy Fail)
[*] Recommended action: Apply kernel update or disable algif_aead