
CVE-2026-31431 "Copy Fail"용 셸 스캐너 — Linux 커널 페이지 캐시 손상(algif_aead/AF_ALG)을 통한 로컬 권한 상승 취약점입니다. 커널 버전, 패치 상태, 모듈 상태, setuid 노출 및 완화 조치를 확인합니다. Debian 11–13 및 Ubuntu 20.04–25.10을 지원합니다. CI/CD 준비 완료(종료 코드 + JSON 출력).
**CVE-2026-31431 "Copy Fail"**을 탐지하는 셸 기반 스캐너로, Linux 커널의 암호화 하위 시스템(algif_aead / AF_ALG 인터페이스)에서 발생하는 로컬 권한 상승 취약점입니다. 권한이 없는 로컬 사용자가 setuid 바이너리(예: /usr/bin/su)의 인메모리 페이지 캐시에 4바이트를 기록하여 디스크의 파일을 건드리지 않고도 루트 셸을 얻을 수 있습니다.
a664bf3d603d| 배포판 | 릴리스 | 패치 버전 |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | 메인라인 수정(≥ 6.15) |
| 범용 | 전체 | 메인라인 범위 확인(4.14 – 6.14 취약) |
위 릴리스 기반의 Ubuntu 파생 배포판(Pop!_OS, Linux Mint, Elementary OS 등)도 /etc/os-release의 ID_LIKE를 통해 탐지됩니다.
# Basic scan
bash cve-2026-31431-detect.sh
# No colour output (log files, CI)
bash cve-2026-31431-detect.sh --no-colour
# JSON output (machine-readable, for pipelines)
bash cve-2026-31431-detect.sh --json
# Quiet mode — only print the summary
bash cve-2026-31431-detect.sh --quiet
# Combine flags
bash cve-2026-31431-detect.sh --json --quiet
루트 권한이 필요 없습니다. 표준 셸(bash ≥ 4.3)과 라이브 AF_ALG 소켓 테스트를 위한 선택적 python3 외에 설치할 패키지가 없습니다.
| 코드 | 의미 |
|---|---|
0 | 취약 조건이 발견되지 않음 |
1 | 취약 조건이 하나 이상 발견됨 |
2 | 스크립트 오류 / 점검을 완료할 수 없음 |
DevSecOps 파이프라인에서 사용하도록 설계되었습니다. JSON 출력을 SIEM, 티켓 시스템 또는 규정 준수 대시보드로 파이프하세요.
이 스크립트는 두 가지 언어로 결과를 출력합니다:
두 섹션 모두 각 항목별 점검 결과 이후 stdout으로 출력됩니다.
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: uname -v → must show >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: cat /proc/version_signature
CONFIG_CRYPTO_USER_API_AEAD=m(모듈로 빌드된 경우)일 때만 효과가 있습니다. 이 옵션이 커널에 내장 컴파일된 경우(=y)에는 효과가 없습니다.
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
이 조치는 SSH, dm-crypt/LUKS, OpenSSL, GnuTLS, NSS, 웹 서버 또는 디스크 암호화에는 영향을 미치지 않습니다.
MIT
| # | 확인 항목 | 방법 |
|---|
| 1 | 커널 버전 | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | 패치 존재 여부 | Debian 빌드 버전, Ubuntu 패키지 버전, /proc/version의 커밋 접두사 |
| 3 | algif_aead 모듈 | /proc/modules, modprobe.d 블랙리스트, 디스크의 .ko |
| 4 | AF_ALG 소켓 | Python 3를 통한 라이브 socket(AF_ALG, …) 시도 |
| 5 | Setuid 바이너리 | 쓰기 대상이 되는 일반적인 setuid-root 바이너리 |
| 6 | 완화 조치 | AppArmor, SELinux, seccomp 상태 |
| 7 | 커널 설정 | CONFIG_CRYPTO_AUTHENC, CONFIG_CRYPTO_USER_API_AEAD |
| 8 | 사용자 네임스페이스 | unprivileged_userns_clone, max_user_namespaces |
| 9 | Transparent Hugepages | THP 설정 및 악용에 미치는 영향 |
| 10 | 환경 | Docker / Kubernetes / WSL 탐지, root 경고 |