Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
copyfail-guard — Linux 시스템에서 CVE-2026-31431(Copy Fail)을 탐지하고 완화합니다. | Kitploit
도구/GitHubGitHub/ctzisme/copyfail-guard
Defensive ToolsVulnerability ScannersConfiguration AuditingIncident Response
GitHubctzisme/copyfail-guard

copyfail-guard

Linux 시스템에서 CVE-2026-31431(Copy Fail)을 탐지하고 완화합니다.

저장소 보기
254개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

copyfail-guard

PyPI Python License pylint

Linux 호스트가 CVE-2026-31431("Copy Fail")에 노출되어 있는지 익스플로잇을 실행하지 않고 확인하는 제로 의존성 Python CLI입니다. 영향을 받는 구성 요소가 커널 모듈로 로드 가능한 경우 보수적인 임시 완화 조치를 적용할 수도 있습니다. Debian/Ubuntu, RHEL/Rocky/AlmaLinux, Fedora, SUSE를 지원합니다.

root@kitploit:~
pip install copyfail-guard
copyfail-guard

배경

CVE-2026-31431은 algif_aead(AF_ALG AEAD 소켓) 커널 인터페이스의 논리 버그로, 권한이 없는 로컬 사용자가 읽기 가능한 모든 파일의 페이지 캐시에 통제된 4바이트 쓰기를 수행하여 루트 권한 상승으로 이어질 수 있습니다. CVSS 7.8, 커널 4.14부터 존재하며, 2026년 4월부터 안정 릴리스에서 패치되었습니다. 공개 익스플로잇이 존재하며 이 취약점은 CISA KEV에 등재되어 있습니다.

왜 그냥 익스플로잇을 실행하지 않나요?

일부 취약점 점검은 "익스플로잇을 실행해서 작동하는지 확인"하는 방식입니다. 프로덕션 호스트에서 그렇게 하는 것은 좋은 방법이 아닙니다. copyfail-guard는 비익스플로잇 방식을 사용합니다. 버그를 트리거하거나, setuid 바이너리를 수정하거나, 익스플로잇 가능성을 증명하려고 시도하지 않습니다. 대신 호스트 상태(커널 버전, 모듈 로드 상태, modprobe 구성)를 검사하여 머신이 노출된 것으로 보이는지 보고합니다.

이 도구가 하는 일

fix는 의도적으로 최소한의 기능만 수행합니다 — 패키지 관리자를 호출하지 않습니다. 영구적인 해결은 배포판의 일반적인 업데이트 메커니즘을 통해 커널을 업그레이드해야 합니다.

설치

root@kitploit:~
pip install copyfail-guard

또는 설치 없이 체크아웃에서 직접 실행:

root@kitploit:~
PYTHONPATH=src python3 -m copyfail_guard detect

사용법

root@kitploit:~
copyfail-guard [--json] [--dry-run] [--quiet] [detect | fix | reset]

detect (기본값)

root@kitploit:~
$ copyfail-guard
[copyfail-guard] CVE-2026-31431 (Copy Fail) — VULNERABLE
  Distribution: Ubuntu 24.04.1 LTS  (debian family)
  Kernel:       6.8.0-50-generic  (branch 6.12, fixed at 6.12.85)
  Module:       algif_aead — loaded as .ko
  Mitigation:   none

Recommended actions:
  1. Apply mitigation now:
       sudo copyfail-guard fix
  2. Update the kernel for a permanent fix:
       Update the kernel on this system to 6.12.85 or later (whatever your
       distribution ships once it has integrated the CVE-2026-31431 fix), then reboot.

fix

적용 전에 항상 --dry-run으로 미리 확인하세요:

root@kitploit:~
$ sudo copyfail-guard --dry-run fix
[copyfail-guard] fix (dry-run) — OK
  [ ok ] Pre-flight checks (Linux, host, root)
  [skip] Would write modprobe blacklist  [/etc/modprobe.d/cve-2026-31431-copyfail-guard.conf]
  [skip] Would attempt to unload algif_aead (not currently loaded)  [algif_aead]
  [skip] Would append audit record  [/var/log/copyfail-guard.log]

$ sudo copyfail-guard fix
[copyfail-guard] fix — OK
  [ ok ] Pre-flight checks (Linux, host, root)
  [ ok ] Wrote modprobe blacklist  [/etc/modprobe.d/cve-2026-31431-copyfail-guard.conf]
  [ ok ] Unloaded algif_aead  [algif_aead]
  [ ok ] Appended audit record  [/var/log/copyfail-guard.log]

Next step for a permanent fix:
  Update the kernel to a CVE-2026-31431-patched version using your
  distribution's normal update mechanism, then reboot.

모듈이 현재 사용 중이면 언로드 단계가 실패할 수 있습니다. 이 경우에도 영구적인 modprobe 규칙은 성공적으로 설치될 수 있으며, copyfail-guard는 모듈이 제거된 것처럼 가장하지 않고 언로드 실패를 경고 스타일의 동작 레코드로 보고합니다.

JSON 출력

--json은 jq, Ansible 또는 SOAR 파이프라인에 적합한 구조화된 문서를 stdout에 출력합니다:

root@kitploit:~
$ copyfail-guard --json | jq .verdict
"vulnerable"

$ copyfail-guard --json | jq '{verdict, kernel: .kernel.patched_threshold}'
{
  "verdict": "vulnerable",
  "kernel": "6.12.85"
}

종료 코드

판정

완화 조치 제거

패치된 커널로 업그레이드한 후 reset 하위 명령을 사용하여 fix가 설치한 modprobe 규칙을 제거하세요:

root@kitploit:~
$ sudo copyfail-guard --dry-run reset
[copyfail-guard] reset (dry-run) — OK
  [skip] Would remove /etc/modprobe.d/cve-2026-31431-copyfail-guard.conf

$ sudo copyfail-guard reset
[copyfail-guard] reset — OK
  [ ok ] Removed /etc/modprobe.d/cve-2026-31431-copyfail-guard.conf

Reboot to allow algif_aead to load again if needed.

reset은 멱등적입니다 — 파일이 이미 없으면 "할 일 없음" 메시지와 함께 0으로 종료합니다. 그런 다음 재부팅하세요.

참고 사항

컨테이너. fix는 컨테이너 내부에서 실행을 거부합니다. /proc/modules는 호스트 커널을 반영하지만 컨테이너에는 모듈을 로드하거나 언로드할 권한이 없기 때문입니다. copyfail-guard를 호스트에서 직접 실행하세요.

내장 algif_aead. 일부 커널은 algif_aead를 이미지에 직접 컴파일합니다 (CONFIG_CRYPTO_USER_API_AEAD=y). 이 구성에서는 modprobe 완화가 효과가 없습니다; 유일한 해결책은 커널 업그레이드입니다. 이 경우 detect는 unmitigable_builtin을 보고합니다. fix를 실행하면 modprobe 규칙이 여전히 설치되지만(공존하는 로드 가능한 복사본의 로드를 방지) 내장 인스턴스는 영향을 받지 않습니다 — 커널 업그레이드와 재부팅만이 유일한 실제 해결책입니다.

blacklist vs install … /bin/false. 두 지시문 모두 일반적인 자동 로드를 차단하지만, install algif_aead /bin/false가 더 강력합니다. 일반적인 명시적 modprobe algif_aead 호출도 차단하기 때문입니다. 충분한 권한이 있는 관리자는 여전히 저수준 모듈 로드 도구나 특수 modprobe 플래그를 사용하여 modprobe 정책을 우회할 수 있습니다. copyfail-guard는 항상 더 강력한 형태를 설치합니다. 시스템에 이미 일반 blacklist 지시문이 있는 경우 도구는 mitigated를 보고하지만 업그레이드를 권장하는 메모를 출력합니다.

SELinux/AppArmor. RHEL에서 /etc/modprobe.d/에 대한 쓰기는 일반적으로 상위 디렉터리에서 system_u:object_r:modules_conf_t:s0를 상속하므로, copyfail-guard가 작성하는 파일에 대해 수동 재라벨링이 일반적으로 필요하지 않습니다.

initramfs. algif_aead는 주요 배포판의 부팅 이미지에 일반적으로 포함되지 않으므로, copyfail-guard는 modprobe 규칙 설치 후 update-initramfs -u 또는 dracut -f를 실행하지 않습니다. 배포판이나 로컬 빌드에 algif_aead가 initramfs에 포함된 경우, 배포판의 커널/모듈 지침을 따르세요.

라이선스

Apache 2.0 — LICENSE 참조.

도구 다운로드
하위 명령동작
detect다섯 가지 신호(커널 버전, /proc/modules, modules.builtin, modules.dep, modprobe 구성)를 결합하여 여섯 가지 판정 중 하나로 보고
fixinstall algif_aead /bin/false modprobe 규칙을 원자적으로 작성하고 algif_aead 언로드를 시도
resetfix가 설치한 modprobe 규칙을 제거(패치된 커널로 업그레이드한 후 실행)
코드의미
0안전 — 판정이 patched, mitigated, 또는 not_applicable; 또는 영구 수정 단계가 성공
1취약 — 판정이 vulnerable 또는 unmitigable_builtin
2오류 — 상태를 확인할 수 없거나, 사전 조건이 거부되었거나, 영구 수정 단계가 실패
판정설명
patched실행 중인 커널이 수정 버전 이상
mitigated커널은 취약하지만 algif_aead가 modprobe 구성에 의해 차단됨
not_applicable커널은 취약하지만 algif_aead가 이 시스템에 존재하지 않음
vulnerable커널이 취약하고, 모듈을 로드할 수 있으며, 완화 조치가 없음
unmitigable_builtinalgif_aead가 커널 이미지에 컴파일되어 있음 — modprobe 완화가 효과 없음; 커널 업그레이드 필요
unknown커널 버전을 구문 분석할 수 없거나 평가 범위를 벗어남