
Linux 시스템에서 CVE-2026-31431(Copy Fail) 노출 및 완화 조치를 탐지하는 셸 스크립트: 커널 확인, 모듈 상태, 부팅 매개변수, AF_ALG 도달 가능성, 배포판 패치 상태.
Linux 커널 취약점을 탐지하고, 완화 상태를 확인하며, 조치를 안내하는 셸 스크립트 — SSH, Ansible 또는 pssh를 통해 로컬 또는 여러 서버에서 실행하도록 설계되었습니다.
Copy Fail은 Linux 커널의 algif_aead 암호화 모듈에서 발견된 높은 심각도의 로컬 권한 상승(LPE) 취약점입니다. 2017년에 도입된 로직 결함으로 인해 권한이 없는 로컬 사용자가 읽기 가능한 모든 파일의 페이지 캐시에 4바이트의 제어된 데이터를 쓸 수 있으며, 이는 setuid 바이너리를 덮어써서 root 권한을 획득하기에 충분합니다. 작동하는 732바이트 Python 개념 증명(PoC)이 공개적으로 존재합니다.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (High) |
| 공개일 | 2026년 4월 29일 |
| 영향 범위 | Linux 커널 4.13 – 6.x (2017–2026) |
| 배포판 | Ubuntu, RHEL, SUSE, Debian, Amazon Linux 및 대부분의 기타 배포판 |
| 원격 악용 가능 여부 | 아니요 — 로컬 접근 필요 |
| 패치 제공 여부 | 부분적 — 배포판의 보안 권고 확인 필요 |
| 확인 항목 | root 필요? |
|---|---|
| 커널 버전 — 영향 범위(≥ 4.13)에 해당하는지 여부 | 아니요 |
algif_aead 모듈 — 로드됨, 디스크에 존재 또는 블랙리스트 등록 여부 | 아니요 |
부팅 파라미터 — initcall_blacklist=algif_aead_init 존재 여부 | 아니요 |
| AF_ALG 소켓 접근 가능 여부 — 악용 경로가 열려 있는지 여부 | 아니요 |
| SELinux 상태 | 아니요 |
| AppArmor 상태 | 예 — root 없이는 부분 출력만 가능 |
| 배포판 패치 상태 — 커널 변경 로그에 CVE 등재 여부 | 아니요 |
스크립트 실행에 root는 필요하지 않습니다 — AppArmor 상태를 제외한 모든 확인은 일반 사용자로도 작동합니다. 완전한 결과를 위해서는
sudo로 실행하는 것이 권장되며,curl에서 파이프로 실행할 때는 더 안전한 선택입니다.
이 스크립트는 모든 주요 Linux 배포판에서 작동하도록 설계되었습니다:
| 배포판 계열 | 패키지 관리자 확인 | 모듈 경로 |
|---|---|---|
| Debian, Ubuntu | dpkg + 커널 변경 로그 | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + 권고 링크 | /usr/lib/modules/ |
| Fedora | rpm + /usr/lib/modules/ 폴백 | /usr/lib/modules/ |
bash필요 — 이 스크립트는 bash 전용 구문을 사용하므로sh,ash또는dash에서는 실행되지 않습니다. 기본적으로 busybox ash를 사용하는 Alpine Linux에서는 먼저 bash를 설치하세요:apk add bash
root 없이 — 대부분의 확인이 작동합니다:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
root로 — AppArmor 상태를 포함한 전체 결과:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
팁: 프로덕션 환경에서는 특정 커밋 SHA에 고정하여 스크립트가 변경되지 않도록 하세요:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # root 없이
sudo bash check_copyfail.sh # 전체 결과
SSH 루프
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
병렬 SSH
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
선호 순서대로 적용하세요:
1. 커널 패치 (최선의 해결책)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. 모듈 블랙리스트 등록 (즉시 적용, 영구 유지)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. 모듈 즉시 언로드 (즉시 적용, 재부팅 후에는 유지되지 않음)
sudo rmmod algif_aead
4. 커널 부팅 파라미터 (블랙리스트의 대안)
GRUB 설정에 initcall_blacklist=algif_aead_init을 추가하고 재부팅하세요.
MIT — 자유롭게 사용 가능하며, 어떠한 보증도 제공되지 않습니다. root로 실행하기 전에 항상 스크립트를 검토하세요.