
# Copy Fail 커널 버그(CVE-2026-31431) 무재부팅 완화 스크립트 취약한 algif_aead 모듈을 비활성화하고 setuid 바이너리의 페이지 캐시를 제거합니다.
Copy Fail / CVE-2026-31431에 대한 최소한의 재부팅 없는 완화 헬퍼입니다.
이 스크립트는 취약한 algif_aead 모듈 경로를 비활성화하고 즉시 모듈을 언로드하려고 시도합니다. 또한 /usr/bin/su에 대한 페이지 캐시 제거를 최선의 노력으로 수행합니다.
이는 커널 수정이 아닌 완화 조치입니다. 공급업체의 패치된 커널이 제공되는 즉시 설치하십시오.
이 스크립트는 공개된 Copy Fail 권고에서 권장하는 완화 조치를 실행합니다:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || true
이렇게 하면 algif_aead가 modprobe를 통해 다시 로드되는 것을 방지하고, 가능한 경우 실행 중인 커널에서 언로드합니다.
그런 다음 /usr/bin/su의 첫 번째 페이지에 대해 POSIX_FADV_DONTNEED와 함께 posix_fadvise()를 호출하는 작은 Python 스니펫을 실행합니다:
os.posix_fadvise(fd, 0, page, os.POSIX_FADV_DONTNEED)
이는 페이지 캐시에서 관련 페이지를 제거하기 위한 최선의 노력입니다. 패치를 대체하는 것이 아니며, 가능한 모든 대상 setuid 바이너리의 정리를 보장하지 않습니다.
/usr/bin/su인가?공개된 Copy Fail 개념 증명은 기본적으로 /usr/bin/su를 대상으로 합니다. 따라서 이 스크립트는 취약한 모듈 경로를 비활성화한 후 페이지 캐시에서 /usr/bin/su의 첫 번째 페이지를 제거하려고 시도합니다.
환경에서 다른 setuid 바이너리에 대한 테스트 또는 의심되는 악용이 있는 경우, 그에 따라 스크립트를 검토하고 조정하십시오.
먼저 스크립트를 검토하십시오.
sudo ./mitigate-copy-fail.sh
모듈이 로드되지 않았는지 확인:
lsmod | grep '^algif_aead' || echo "algif_aead is not loaded"
modprobe 규칙이 존재하는지 확인:
cat /etc/modprobe.d/disable-algif.conf
예상 출력:
install algif_aead /bin/false
모듈을 수동으로 로드해 보십시오:
sudo modprobe algif_aead
로드가 실패하거나 거부되어야 합니다.
수정된 커널을 설치한 후 또는 위험을 수용한 후에만 되돌리십시오.
sudo rm -f /etc/modprobe.d/disable-algif.conf
sudo modprobe algif_aead
이 스크립트는 다음을 수행하지 않습니다:
컨테이너, 샌드박스, CI 러너 및 다중 사용자 호스트와 같은 신뢰할 수 없는 워크로드의 경우 seccomp로 AF_ALG 소켓 생성을 차단하는 등의 추가 강화를 고려하십시오.