
자동화된 스캐너 및 패치 도우미로, CVE-2026-31431을 대상으로 SSH를 통해 취약한 Linux 호스트를 탐지하고, 커널 버전을 검증하며, 여러 배포판에 걸쳐 커널 업그레이드 또는 임시 완화 조치를 적용합니다.
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": ""
}
]
}
스캐너는 다음 배포판을 자동으로 감지합니다:
| 배포판 | 패키지 관리자 | 패치된 커널 버전 | 참고 |
|---|---|---|---|
| Ubuntu | apt | 6.8.0-60, 5.15.0-130, 5.4.0-216 | LTS 및 현재 버전 |
| Debian | apt | 6.1.137, 5.10.235 | 안정 릴리스 |
| RHEL | dnf/yum | 5.14.0-570 | CentOS Stream 포함 |
| AlmaLinux | dnf | 5.14.0-570 | RHEL 대체 |
| Rocky | dnf | 5.14.0-570 | 엔터프라이즈 중심 |
| Fedora | dnf | 6.14.4, 6.13.12, 6.12.25 | 최신 버전 |
| Amazon Linux | dnf | 6.1.134, 5.10.235, 4.14.353 | AWS 호환 |
| SUSE / openSUSE | zypper | 6.4.0-18, 5.14.21-150600.24 | 엔터프라이즈 및 커뮤니티 |
| Arch Linux | pacman | 6.14.4 | 최신 버전 |
감지되지 않은 배포판의 경우: 커널 버전을 수동으로 확인하세요. 커널 >= 6.14.4는 일반적으로 안전합니다.
수동 패치를 선호하거나 자동 패치가 실패한 경우, 배포판별 가이드를 따르세요:
sudo apt update
sudo apt upgrade linux-image-generic kmod
sudo reboot
sudo dnf clean metadata
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo zypper update kernel-default
sudo reboot
sudo pacman -Syu linux linux-headers
sudo reboot
커널 업그레이드를 위해 즉시 재부팅할 수 없는 경우 완화 조치를 적용하세요:
# modprobe.d를 통해 algif_aead 모듈 비활성화
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# 이미 로드된 경우 모듈 언로드
sudo rmmod algif_aead 2>/dev/null || echo "Module not loaded"
중요:
CONFIG_CRYPTO_USER_API_AEAD=y가 있는 RHEL 계열에서는 모듈이 커널에 내장되어 있어 modprobe.d가 효과가 없습니다 → 커널 업그레이드가 유일한 해결책입니다Error: Port SSH tidak terbuka
해결 방법:
nc -zv <IP> 22--port 사용Error: Autentikasi SSH gagal
해결 방법:
chmod 600 ~/.ssh/id_rsassh -i ~/.ssh/id_rsa user@host--password 사용Exit code 1: dpkg: error processing...
해결 방법:
sudo visudoapt/dnf/yum을 실행할 수 있어야 함Retry: 3x | Host temporary unavailable
해결 방법:
--threads 10Status: ? TIDAK DIKETAHUI
해결 방법:
uname -r 및 권고와 비교Exit code 1: Failed to lock apt database
해결 방법:
sudo tail -f /var/log/apt/term.log내부 전용 — 이 도구는 권한이 있는 sysadmin의 감사 및 패치 관리 목적으로만 사용됩니다.
DISCLAIMER:
- Use only on systems you own or have explicit authorization to access
- Automatic patching dan reboot dapat menyebabkan downtime
- Test di staging environment sebelum production deployment
- Pastikan backup tersedia sebelum patch
- Developer tidak bertanggung jawab atas data loss atau service disruption
작성자: GagalTotal
저장소: https://github.com/gagaltotal/cve-2026-31431-copy-fail
연락처: ghostgtr666
버그 신고, 기능 요청 또는 질문이 있는 경우:
마지막 업데이트: 2026년 5월 8일
스캐너 버전: 1.0