
자동화된 스캐너 및 패치 도우미로, CVE-2026-31431을 대상으로 SSH를 통해 취약한 Linux 호스트를 탐지하고, 커널 버전을 검증하며, 여러 배포판에 걸쳐 커널 업그레이드 또는 임시 완화 조치를 적용합니다.
Copy Fail은 Linux 인프라에서 CVE-2026-31431(Linux Kernel algif_aead 로컬 권한 상승) 취약점을 탐지하고 수정하기 위한 자동화된 보안 스캐너 및 패치 헬퍼입니다.
CVE-2026-31431은 Linux 커널 모듈 algif_aead(AEAD용 비동기 암호화 인터페이스)의 로컬 권한 상승(LPE) 취약점입니다. 이 취약점은 로컬 사용자가 root 수준으로 권한을 상승시킬 수 있게 합니다.
이 도구는 다음을 지원합니다:
참고: 이 도구는 sysadmin의 내부 감사 및 패치 목적으로만 사용됩니다. 소유하거나 승인된 시스템에서만 사용하세요.

algif_aead 모듈 상태 탐지(로드됨/로드 안 됨)취약한 호스트에서 패키지 관리자를 통한 자동 커널 업그레이드:
옵션: 패치 완료 후 자동 재부팅
algif_aead 모듈 비활성화패치된 커널 버전 데이터베이스:
paramiko>=3.0.0 # SSH library
rich>=13.0.0 # Beautiful terminal UI
git clone https://github.com/gagaltotal/cve-2026-31431-copy-fail.git
cd cve-2026-31431-copy-fail
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
또는 수동 설치:
pip install paramiko>=3.0.0 rich>=13.0.0
python3 copyfail_scanner.py --help
# SSH 키로 서브넷 스캔
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH_TO_KEY>
# 특정 호스트 여러 개 스캔
python3 copyfail_scanner.py --hosts <IP1>,<IP2>,<IP3> --user <USERNAME> [--password <PASSWORD>]
# 스캔 + 자동 패치
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --patch
# 스캔 + 임시 완화 조치
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --mitigate
| 옵션 | 설명 | 예시 |
|---|---|---|
--subnet | 대상 서브넷 CIDR(--hosts와 상호 배타적) | --subnet 192.168.1.0/24 |
--hosts | 쉼표로 구분된 IP 목록(--subnet과 상호 배타적) | --hosts 192.168.1.10,192.168.1.20 |
--user | SSH 사용자 이름 (필수) | --user root |
--password | SSH 비밀번호(선택 사항, 키가 없을 때 사용) | --password secret123 |
--key | SSH 개인 키 경로 | --key ~/.ssh/id_rsa |
--port | SSH 포트(기본값: 22) | --port 2222 |
--threads | 병렬 스레드 수(기본값: 30) | --threads 50 |
--patch | 취약한 호스트에서 자동 커널 업그레이드 | --patch |
--reboot | 패치 후 자동 재부팅(--patch와 함께 사용) | --patch --reboot |
--mitigate | 임시 완화 조치 적용(algif_aead 비활성화) | --mitigate |
--output | 스캔 결과를 JSON 파일로 내보내기 | --output hasil.json |
--yes | 패치/완화 전 확인 프롬프트 건너뛰기 | --yes |
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa
출력: 스캔 결과 테이블 및 요약 표시
python3 copyfail_scanner.py \
--hosts 10.0.1.5,10.0.1.6,10.0.1.7 \
--user admin \
--password my_password123
python3 copyfail_scanner.py \
--subnet 172.16.0.0/16 \
--user root \
--key ~/.ssh/id_rsa \
--mitigate
작업: 모든 호스트 스캔 후 취약한 호스트에서 algif_aead 모듈 비활성화(확인 요청)
python3 copyfail_scanner.py \
--subnet 192.168.0.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--patch
작업: 커널 업그레이드, 하지만 자동 재부팅은 하지 않음(수동 재부팅 필요)
python3 copyfail_scanner.py \
--subnet 10.10.0.0/24 \
--user root \
--key ~/.ssh/id_rsa \
--patch \
--reboot \
--yes
작업: 스캔, 커널 패치, 자동 재부팅, 확인 건너뛰기
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user sysadmin \
--key ~/.ssh/id_rsa \
--output scan_results_$(date +%Y%m%d_%H%M%S).json
출력: 터미널 테이블 + 파일에 JSON 결과 저장
python3 copyfail_scanner.py \
--subnet 10.0.0.0/25 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--port 2222 \
--threads 50
스캔 출력 예시:
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
┃ IP ┃ Hostname ┃ Distro ┃ Kernel ┃ algif ┃ Status ┃ Action ┃ Notes ┃
┣━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━┫
┃ 192.168.1.10 ┃ web-01 ┃ Ubuntu 22.04 ┃ 6.8.0-60 ┃ LOADED ┃ ✓ AMAN ┃ - ┃ Patched ┃
┃ 192.168.1.11 ┃ web-02 ┃ Ubuntu 20.04 ┃ 5.4.0-200 ┃ NOT_LDD ┃ ✗ RENTA ┃ Patched ┃ - ┃
┃ 192.168.1.12 ┃ db-01 ┃ RHEL 8.9 ┃ 5.14.0-560 ┃ LOADED ┃ ? TIDAK ┃ - ┃ Distro ┃
┗━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┛
요약:
스캔된 총 호스트: 12
접근 가능(SSH): 11
오프라인: 1
취약: 2
이미 패치됨: 8
상태 알 수 없음: 1
hostname -f 결과의 호스트 이름uname -r에서){
"cve": "CVE-2026-31431",
"scan_time": "2026-05-08T15:30:45.123456",
"results": [
{
"ip": "192.168.1.10",
"ssh_reachable": true,
"auth_ok": true,
"hostname": "web-01",
"distro": "Ubuntu 22.04 LTS",
"os_id": "ubuntu",
"kernel_version": "6.8.0-60-generic",
"algif_loaded": true,
"modprobe_blocked": false,
"patched": true,
"patch_applied": false,
"mitigation_applied": false,
"retry_count": 0,
"error": ""
}
]
}
스캐너는 다음 배포판을 자동으로 감지합니다: