
Ansible 플레이북으로 CVE-2026-31431("Copy Fail")을 감사하고 완화합니다. 이는 2017년부터 모든 주요 배포판에 영향을 미치는 Linux 커널의 `algif_aead` 모듈에 있는 로컬 권한 상승 취약점입니다.
Linux 커널
algif_aead권한 상승 / 메모리 손상
Ansible 기반 감사 및 완화 플레이북 — 프로덕션에서 바로 실행 가능
Copy Fail(CVE-2026-31431)은 Linux 커널의 algif_aead 모듈 — AF_ALG
암호화 소켓 패밀리의 사용자 공간용 AEAD 인터페이스 — 에 존재하는 취약점입니다.
AEAD 요청 핸들러 내부의 커널 copy_*user 경로에 있는 결함으로 인해
로컬 비특권 사용자가 악의적으로 조작된 소켓 요청을 만들어 커널 메모리를
손상시키거나 권한을 상승시킬 수 있습니다.
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-31431 |
| 별칭 | Copy Fail |
| 구성 요소 | Linux 커널 — algif_aead (net/socket.c, crypto/algif_aead.c) |
| 공격 벡터 | 로컬 |
| 필요 권한 | 낮음 (비특권 사용자) |
| 영향 | 커널 메모리 손상 / 로컬 권한 상승 |
| 패치 상태 | 업스트림 커널 패치 진행 중 — 배포판 공급업체 확인 |
algif_aead가 로드되지 않았고 요청 시 로드하는 사용자 공간 도구가 없는 경우 시스템은 즉각적인 위험에 노출되지 않습니다 (감사 1단계 참조).
.
├── audit_algif_aead.yml # 1단계 — 감사: 호스트별 노출 감지
├── mitigate_copyfail.yml # 2단계 — 완화: 모듈 언로드 + 블랙리스트
└── README.md # 이 문서
community.general 컬렉션 (ansible-galaxy collection install community.general)become: true (sudo)lsof 설치 (일반적으로 기본 설치됨)inventory.ini는 gitignore 처리됩니다 — 로컬에만 유지되며 저장소에 절대 포함되지 않습니다.
inventory.ini.example은 모든 사용자가 시작하는 커밋된 템플릿입니다.
# 클론 및 준비
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# inventory.ini를 실제 호스트로 편집한 후 실행:
ansible-playbook -i inventory.ini audit_algif_aead.yml
인프라 데이터 유출을 방지하기 위해 다음 경로는 gitignore 처리됩니다:
아무것도 건드리기 전에 감사 플레이북을 실행하세요. 호스트별 증거를 수집하고 로컬 및 각 대상에 보고서를 작성합니다.
ansible-playbook -i inventory.ini audit_algif_aead.yml
보고서는 ./copyfail_reports/<hostname>_audit.txt로 가져옵니다.
| 조건 | 권장 조치 |
|---|---|
| 모듈이 로드되지 않음 | 즉각적인 위험 낮음 — 커널 패치 모니터링 |
| 모듈 로드됨, AF_ALG 소켓 사용자 없음 | 완화 조치 적용 안전 |
| 모듈 로드됨 및 AF_ALG 사용자 활성 | 완화 조치 적용 전 프로세스 검토 |
| 완화 파일 이미 존재 | 이전에 완화 조치 적용됨 — 확인 |
먼저 감사를 실행하세요. 완화 플레이북은 멱등적으로 실행해도 안전하지만 감사를 통해 증거 추적이 가능합니다.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
install algif_aead /bin/false가 포함된 /etc/modprobe.d/disable-algif.conf 생성algif_aead 모듈 언로드 (초기 보호를 위해 재부팅 불필요)update-initramfs, RHEL은 dracut --force)/var/backup/copyfail_mitigation/mitigation.log에 타임스탬프 로그 작성메모리에서 모듈을 제거하기 위해 재부팅은 필요하지 않습니다.
블랙리스트가 적용되는지 확인하고 완화 후 깨끗한 상태를 확립하기 위해 재부팅을 권장합니다.
플레이북 완료 후 대상 호스트에서 확인:
# 모듈이 나타나지 않아야 함
lsmod | grep algif_aead
# 블랙리스트 파일이 존재하고 install 라인이 포함되어야 함
cat /etc/modprobe.d/disable-algif.conf
# 수동 로드가 거부되어야 함
sudo modprobe algif_aead # 예상: FATAL: Module algif_aead not found or refused
공급업체가 패치된 커널을 릴리스하고 적용한 후:
# 각 호스트에서 — 블랙리스트 제거
sudo rm /etc/modprobe.d/disable-algif.conf
# initramfs 재구축
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# 패치된 커널로 재부팅
sudo reboot
algif_aead sourceMIT License에 따라 배포됩니다.
사용에 따른 책임은 본인에게 있습니다. 프로덕션 시스템에 적용하기 전에
항상 스테이징 환경에서 검증하세요.
커뮤니티에서 유지 관리합니다. PR 및 이슈 보고를 환영합니다.
| 배포판 | 영향받는 버전 | 상태 |
|---|
| Ubuntu 22.04 / 24.04 | 패치 릴리스 미만의 커널 | 패치 대기 중 — Ubuntu USN 참조 |
| Debian 12 (Bookworm) | 패치 릴리스 미만의 커널 | 패치 대기 중 |
| RHEL / AlmaLinux / Rocky 8 & 9 | 패치 릴리스 미만의 커널 | 패치 대기 중 |
| Amazon Linux 2 / 2023 | 패치 릴리스 미만의 커널 | 패치 대기 중 |
| 일반 업스트림 | algif_aead 컴파일 또는 자동 로드 | 모듈이 존재하면 취약 |
| 하위 시스템 | 이 CVE의 영향? | 완화 조치의 영향? |
|---|
| dm-crypt / LUKS | 아니요 | 아니요 |
| kTLS | 아니요 | 아니요 |
| IPsec / StrongSwan | 아니요 | 아니요 |
| OpenSSL (기본 빌드) | 아니요 | 아니요 |
| GnuTLS / NSS | 아니요 | 아니요 |
| OpenSSH | 아니요 | 아니요 |
| OpenSSL afalg 엔진 | 잠재적으로 예 | 예 — 적용 전 검토 필요 |
kcapi-enc / kcapi-dgst 도구 | 예 | 예 |
| Gitignore 경로 | 이유 |
|---|
inventory.ini | 실제 호스트명 / IP |
inventories/ | 모든 로컬 인벤토리 디렉터리 |
copyfail_reports/ | 감사 출력에 커널 버전, 프로세스 목록 포함 |
.vault_pass | Ansible Vault 비밀번호 파일 |
*.retry | Ansible 재시도 아티팩트 |
| 확인 항목 | 명령 | 판정 |
|---|
| 커널 버전 | uname -r | 정보 제공용 |
| 모듈 로드 여부 | lsmod | grep algif_aead | 로드됨 = 노출 위험 |
| 활성 AF_ALG 소켓 | lsof | grep AF_ALG | 사용자 발견 = 검토 필수 |
| OpenSSL afalg 엔진 | openssl engine | grep afalg | 활성 = 영향 검토 |
| kcapi 도구 존재 | which kcapi-* | 존재 = 잠재적 사용자 |
| 완화 조치 적용 여부 | stat /etc/modprobe.d/disable-algif.conf | 존재 = 이미 완화됨 |