
algif_aead 페이지 캐시 손상을 통한 Linux 커널 LPE인 CVE-2026-31431 (Copy Fail)에 대한 개념 증명 익스플로잇으로, 탐지, 랩 및 완화 지침을 포함합니다.
██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead 페이지 캐시 손상을 통한 리눅스 커널 로컬 권한 상승⚠️ 승인된 사용만 허용됨 — 이 저장소는 법적으로 허가된 침투 테스터, 보안 연구원 및 방어자만을 위한 것입니다. 오용 시 형사 처벌을 받을 수 있습니다.
Copy Fail은 2026년 4월 29일에 공개된 로컬 권한 상승(LPE) 취약점으로, 2017년 이후의 커널을 실행하는 사실상 모든 주요 리눅스 배포판에 영향을 미칩니다.
권한 없는 사용자 ──► AF_ALG + splice() ──► 4바이트 페이지 캐시 쓰기 ──► ROOT
이 취약점은 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
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
패치된 시스템에서의 예상 출력:
[✓] Kernel version: 6.1.132
[✓] System appears PATCHED against CVE-2026-31431 (Copy Fail)
필요 조건: 취약한 시스템에서 권한 없는 사용자로 로컬 접근.
# Python 3.6+
python3 --version
# 필수 커널 모듈 존재
lsmod | grep algif_aead
# 대상 바이너리가 읽기 가능한지 확인
ls -la /usr/bin/sudo
cd exploit/
# 현재 권한 수준 확인
id
# uid=1000(user) gid=1000(user) groups=1000(user)
# Copy Fail PoC 실행
python3 copyfail.py
# 권한 상승 확인
id
# uid=0(root) gid=0(root) groups=0(root)
1. 커널 버전 열거
└─► uname -r / cat /proc/version
2. algif_aead 로드 확인
└─► lsmod | grep algif_aead
3. 낮은 권한 진입 확인
└─► id / whoami
4. Copy Fail PoC 실행
└─► python3 exploit/copyfail.py
5. 루트 접근 확인
└─► id && cat /etc/shadow
6. 증거 문서화
└─► 스크린샷 + 커널 버전, 배포판, 익스플로잇 해시 로깅
7. 완화 적용 (테스트 후)
└─► sudo bash mitigation/disable_algif_aead.sh
8. 침투 테스트 보고서에 포함
└─► reports/pentest-report-template.md 사용
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "Detects Copy Fail (CVE-2026-31431) exploit artefacts"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
YARA 스캔 실행:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Copy Fail LPE Exploit Execution (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- Legitimate crypto API testing
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# 업데이트 후 재부팅
sudo reboot
algif_aead 모듈 비활성화 (임시)# 완화 스크립트 실행
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
스크립트가 수행하는 작업:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] Module not currently loaded"
echo "[✓] algif_aead disabled. Reboot to confirm persistence."
자세한 내용은 mitigation/kubernetes-hardening.md 참조:
AF_ALG 소켓 생성 제한socket(AF_ALG, ...) 시스템 호출을 차단하는 Seccomp 프로필클라이언트용 보고서 템플릿은 reports/pentest-report-template.md에 준비되어 있습니다.
Finding: Local Privilege Escalation via Copy Fail (CVE-2026-31431)
Severity: HIGH (CVSS 7.8)
Host: 10.10.10.55 (ubuntu-prod-01)
Kernel: 5.15.0-91-generic
Evidence:
- Unprivileged shell (uid=1000) escalated to root (uid=0)
- Kernel module algif_aead confirmed loaded
- No disk artefacts — page cache only
Recommendation:
1. Apply vendor kernel patch immediately
2. Interim: disable algif_aead module
3. Review Kubernetes nodes and CI/CD runners
이 저장소의 모든 것을 사용하기 전에 읽으세요.
이 저장소는 합법적인 보안 연구, 승인된 침투 테스트 및 방어적 보안 목적으로만 공개되었습니다.
이 자료의 무단 사용은 컴퓨터 사기 및 남용법(CFAA), EU 지침 2013/40/EU, 인도 IT법 2000 및 관할권의 동등한 법률을 위반할 수 있습니다.
저자는 오용에 대해 어떠한 책임도 지지 않습니다. 전체 법적 고지는 DISCLAIMER.md를 참조하세요.
보안 연구자의 기여를 환영합니다.
git checkout -b feat/your-contributiongit commit -m "Add: detection rule for X"책임 있는 공개 규범을 준수해 주세요. 패치된 시스템을 대상으로 하는 무기화된 프로덕션 준비 익스플로잇 코드는 포함하지 마세요.
| # | 섹션 | 설명 |
|---|
| 1 | Copy Fail이란? | 취약점 요약 |
| 2 | 기술 심층 분석 | 근본 원인 분석 |
| 3 | 영향받는 시스템 | 배포판 및 커널 매트릭스 |
| 4 | 저장소 구조 | 파일 레이아웃 |
| 5 | 연구실 설정 | 안전하게 재현하기 |
| 6 | 익스플로잇 사용법 | 침투 테스트 워크플로 |
| 7 | 탐지 | YARA, Sigma, 스크립트 |
| 8 | 완화 | 패치 및 강화 |
| 9 | 침투 테스트 보고 | 보고서 템플릿 |
| 10 | 법적 및 윤리 | 면책 조항 |
| 11 | 참고 자료 | CVE, 권고문, 블로그 |
| 속성 | 세부 사항 |
|---|
| CVE ID | CVE-2026-31431 |
| 별칭 | Copy Fail |
| CVSS v3.1 | 7.8 (HIGH) |
| 공격 벡터 | 로컬 |
| 필요 권한 | 낮음 (임의의 권한 없는 사용자) |
| 사용자 상호작용 | 없음 |
| 발견자 | Xint Code (Theori) |
| 공개일 | 2026년 4월 29일 |
| 익스플로잇 크기 | 732바이트 (Python PoC) |
| 패치 상태 | ✅ 사용 가능 — 커밋 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 | ✅ 패치됨 | 권고문 |
| 도구 | 탐지 지원 |
|---|
| Microsoft Defender (MDVM) | ✅ 예 |
| Tenable Nessus | ✅ 예 |
| Qualys | ✅ 예 |
| Wazuh | ✅ 사용자 정의 Sigma 규칙을 통해 |
| Palo Alto Cortex XDR | ✅ 예 |
| CrowdStrike Falcon | ✅ 예 |
| 출처 | 링크 |
|---|
| 원본 공개 (Xint/Theori) | copy.fail |
| Xint Code 기술 분석 | xint.io/blog/copy-fail |
| NVD 항목 | nvd.nist.gov |
| Microsoft 보안 블로그 | microsoft.com/security/blog |
| Ubuntu 권고문 | ubuntu.com/blog |
| CERT-EU 권고문 | cert.europa.eu |
| Tenable FAQ | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| CloudLinux 권고문 | blog.cloudlinux.com |
| Bugcrowd 분석 | bugcrowd.com/blog |
| 리눅스 커널 패치 | kernel.org — commit a664bf3d603d |