
Copy Fail Linux 커널 취약점(CVE-2026-31431)용 읽기 전용 Bash 검사기
Linux 시스템이 Copy Fail 로컬 권한 상승 취약점(CVE-2026-31431)에 노출되어 있는지 알려주는, 의존성이 적은 소형 Bash 스크립트입니다.
이 스크립트는 읽기 전용입니다. 버그를 악용하지 않으며, 커널 모듈을 로드하지 않고, 시스템을 변경하지 않습니다.
Copy Fail은 Linux 커널의 authencesn AEAD 암호화 템플릿에 존재하는 로직 버그로, AF_ALG(algif_aead) 소켓 인터페이스를 통해 사용자 공간에서 접근할 수 있습니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2026-31431 |
| 공개일 | 2026-04-29 |
| CVSS v3.1 | 7.8 (높음) |
| 분류 | 로컬 권한 상승 |
| 영향받는 구성 요소 | crypto/authencesn + crypto/algif_aead |
| 도입 시점 | 2017년(algif_aead.c의 in-place AEAD 최적화) |
| 메인라인 수정 | 커밋 a664bf3d603d, 2026-04-01 병합 |
권한이 없는 로컬 사용자는 읽을 수 있는 모든 파일의 페이지 캐시에 대한 결정적이고 통제된 4바이트 쓰기를 트리거할 수 있습니다. 공개된 개념 증명(PoC, Python 732바이트)은 이 프리미티브를 사용하여 setuid 바이너리를 덮어쓰고 2017년 이후 출시된 사실상 모든 주류 배포판에서 root 권한을 획득합니다.
algif_aead가 활성화된 채 2017년 이후 빌드된 커널을 제공하는 모든 Linux 배포판이 해당됩니다. 영향을 받는 것으로 확인된 계열은 다음과 같습니다.
# Download the script
curl -fsSLO https://raw.githubusercontent.com/samanzamani/copy-fail-checker/main/check-copy-fail.sh
# Make it executable
chmod +x check-copy-fail.sh
# Run it
./check-copy-fail.sh
Or clone the repo:
git clone https://github.com/samanzamani/copy-fail-checker.git
cd copy-fail-checker
./check-copy-fail.sh
이 스크립트는 root 권한이 필요하지 않습니다. 일반 사용자로 실행하면 공격 표면을 가장 현실적으로 볼 수 있습니다. 공격자가 가질 수 있는 정확한 환경이기 때문입니다.
이 스크립트는 세 가지 독립적인 검사를 수행하고 이를 하나의 판정으로 결합합니다.
/etc/os-release와 uname -r을 읽은 다음, 실행 중인 커널을 배포판 보안 팀이 공식 발표한 수정 버전과 비교합니다. 현재 버전 표는 다음을 포함합니다.
배포판이 표에 없으면 스크립트는 아래의 런타임 검사로 대체합니다.
algif_aead 모듈 상태스크립트는 아무것도 수정하지 않고 다음 네 가지를 검사합니다.
lsmod)modinfo)/etc/modprobe.d, /usr/lib/modprobe.d 또는 /run/modprobe.d에서 블랙리스트 처리되었는지 여부/boot/config-<uname> 또는 /proc/config.gz에서 **내장(builtin)**되었는지 여부블랙리스트 처리되고 로드되지 않았으며 내장되지 않은 모듈은 패치되지 않은 커널에서도 공격 표면을 차단합니다.
AF_ALG 소켓 도달 가능성가장 신뢰할 수 있는 신호는 공격자가 실제로 보게 될 상황입니다. 스크립트는 소형 Python 프로브(socket.socket(AF_ALG, SOCK_SEQPACKET, 0) 후 authencesn(hmac(sha256),cbc(aes)) AEAD 템플릿에 bind())를 사용하여 권한이 없는 컨텍스트에서 AF_ALG 소켓을 생성하고 바인딩할 수 있는지 확인합니다. 프로브는 소켓을 생성·바인딩한 후 즉시 닫으므로 악용 가능한 어떤 것도 남기지 않습니다.
python3이 설치되어 있지 않으면 프로브를 건너뛰고 검사 1과 2에 기반하여 판정합니다.
파이프라인, 구성 관리 또는 플릿 스캔의 경우 --json을 전달하십시오.
./check-copy-fail.sh --json
출력 예시:
{
"verdict": "vulnerable",
"distro_id": "ubuntu",
"distro_version_id": "24.04",
"kernel": "6.8.0-31-generic",
"patched_version": "",
"kernel_status": "unknown",
"module_loaded": 0,
"module_builtin": 0,
"module_available": 1,
"module_blacklisted": 0,
"af_alg_status": "reachable"
}
이것이 유일한 완전한 해결책입니다. 업데이트 후 재부팅하여 새 커널이 실제로 실행되도록 하십시오.
# Debian / Ubuntu
sudo apt update && sudo apt full-upgrade && sudo reboot
# RHEL / AlmaLinux / Rocky / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# openSUSE / SLES
sudo zypper refresh && sudo zypper update && sudo reboot
# Amazon Linux 2023
sudo dnf upgrade --releasever=latest && sudo reboot
algif_aead 비활성화지금 당장 패치된 커널로 재부팅할 수 없다면 취약한 모듈을 블랙리스트에 추가하십시오. 이렇게 하면 AF_ALG AEAD 암호를 합법적으로 사용하는 애플리케이션은 모두 중단됩니다(대부분의 서버에서는 드묾 — 먼저 스테이징 환경에서 확인하십시오).
# Persist the blacklist across reboots
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
# Unload it from the running kernel right now
sudo rmmod algif_aead 2>/dev/null || true
모듈이 내장(builtin)된 경우 블랙리스트는 작동하지 않지만 initcall을 비활성화할 수 있습니다. 재부팅이 필요합니다.
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
컨테이너 워크로드의 경우 seccomp 프로필에서도 AF_ALG 소켓 패밀리를 차단하여 손상된 컨테이너가 커널 표면에 도달하지 못하게 하십시오.
== System information ==
[INFO] Distribution : Ubuntu 24.04.2 LTS (ubuntu 24.04)
[INFO] Kernel : 6.8.0-31-generic
== Check 1 / 3 — Kernel version ==
[WARN] No vendor-fixed kernel version is recorded for ubuntu 24.04.
[WARN] Falling back to runtime mitigation checks below.
== Check 2 / 3 — algif_aead kernel module ==
[WARN] algif_aead is not loaded but can be autoloaded on demand (no blacklist found).
== Check 3 / 3 — AF_ALG socket reachability ==
[VULN] AF_ALG sockets are reachable from this unprivileged context.
== Verdict ==
[VULN] This system appears to be VULNERABLE to CVE-2026-31431.
[VULN] Apply the vendor kernel update or blacklist algif_aead as a temporary mitigation.
uname -r을 신뢰합니다. out-of-tree 또는 재빌드된 커널을 실행 중인 경우 버전 비교가 수정 사항의 실제 백포트 여부를 반영하지 못할 수 있습니다.AF_ALG에 대해 blocked_permission을 보고할 수 있습니다. 호스트 커널 자체는 여전히 취약할 수 있습니다.MIT — 자유롭게 사용, 수정, 배포할 수 있습니다. 보증은 없습니다.
| 배포판 | 패치된 커널 (≥) |
|---|
| AlmaLinux / RHEL / Rocky / CentOS 8 | 4.18.0-553.121.1.el8_10 |
| AlmaLinux / RHEL / Rocky / CentOS 9 | 5.14.0-611.49.2.el9_7 |
| AlmaLinux / RHEL / Rocky / CentOS 10 | 6.12.0-124.52.2.el10_1 |
| Ubuntu 26.04 이상 ("Resolute") | 영향 없음 |
| Ubuntu 18.04 – 25.10 | 롤링, apt 참조 |
| Debian (모든 스위트) | 롤링, DSA 참조 |
| 판정 | 종료 코드 | 의미 |
|---|
patched | 0 | 실행 중인 커널이 공급업체 수정 버전 이상입니다. |
mitigated | 0 | AF_ALG가 차단되었고 모듈이 로드되지 않았습니다. |
likely_mitigated | 0 | 모듈이 블랙리스트 처리되고 로드되지 않았습니다. 실시간 프로브는 불가능했습니다. |
vulnerable | 1 | 커널이 패치되지 않았고 algif_aead / AF_ALG에 도달할 수 있습니다. |
unknown | 2 | 판단할 신호가 충분하지 않습니다. 잠재적으로 취약한 상태로 취급하십시오. |
not_applicable | 3 | Linux에서 실행 중이 아닙니다. |