
Fleet 규모의 CVE-2026-31431 감사 및 수정 오케스트레이터로, SSH를 통해 Linux 호스트를 관리하며 엄격한 호스트 키 검증과 다중 형식 보고를 지원합니다.
이 프로젝트는 기업/내부 네트워크의 Linux 호스트에서 CVE-2026-31431을 감사하고 수정하기 위한 플릿 규모 오케스트레이터입니다.
algif_aead 비활성화)>=3.13uvuv sync
Tsinghua 미러가 pyproject.toml에 구성되어 있습니다:
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
cp fleet.env.example fleet.env
그런 다음 실제 호스트와 자격 증명으로 fleet.env를 업데이트합니다.
uv run python main.py fleet.env
.
├── main.py
├── pyproject.toml
├── uv.lock
├── fleet.env.example
├── reports/
└── src/
├── main.py
├── models.py
├── config.py
├── executor.py
├── collector.py
├── analyzer.py
├── adapters.py
├── remediator.py
├── orchestrator.py
└── reporter.py
fleet.env 구성 참조형식은 KEY=VALUE입니다. 빈 줄과 # 주석은 무시됩니다.
MODE
audit: 감지만 수행, 수정 없음.fix: 감지 및 수정 흐름 실행.auditAUTO_REBOOT
0 또는 10MODE=fix일 때만 유효.SSH_TIMEOUT
12MAX_WORKERS
8REPORT_DIR
./reportsPROGRESS_HEARTBEAT_SECONDS
5DEVICE_MAX_DURATION_SECONDS
1800PROGRESS_LOG_TO_FILE
REPORT_DIR에 저장할지 여부.0 또는 11FLEET_COUNT
1..FLEET_COUNT를 구문 분석합니다.DEVICE_n_HOST가 비어 있으면 해당 슬롯은 건너뜁니다.각 호스트는 DEVICE_{n}_ 접두사를 사용합니다(예: DEVICE_1_*, DEVICE_2_*).
DEVICE_n_NAME
device_n으로 자동 대체.DEVICE_n_HOST
DEVICE_n_PORT
22DEVICE_n_USER
rootDEVICE_n_PASSWORD
DEVICE_n_KEY와 함께 또는 대신 사용.fleet.env에 명시적으로 설정된 자격 증명만 사용합니다.DEVICE_n_KEY
./keys/node-1_ed25519DEVICE_n_PASSWORD와 DEVICE_n_KEY가 모두 비어 있으면 연결이 빠르게 실패합니다.DEVICE_n_SUDO_PASSWORD
# =========================
# Global
# =========================
MODE=audit
AUTO_REBOOT=0
SSH_TIMEOUT=12
MAX_WORKERS=8
REPORT_DIR=./reports
PROGRESS_HEARTBEAT_SECONDS=5
DEVICE_MAX_DURATION_SECONDS=1800
PROGRESS_LOG_TO_FILE=1
FLEET_COUNT=3
# =========================
# Device 1
# =========================
DEVICE_1_NAME=pve-node-1
DEVICE_1_HOST=192.168.1.10
DEVICE_1_PORT=22
DEVICE_1_USER=root
DEVICE_1_PASSWORD=
DEVICE_1_KEY=./keys/pve-node-1_ed25519
DEVICE_1_SUDO_PASSWORD=
# =========================
# Device 2
# =========================
DEVICE_2_NAME=web-1
DEVICE_2_HOST=192.168.1.20
DEVICE_2_PORT=22
DEVICE_2_USER=admin
DEVICE_2_PASSWORD=your_ssh_password
DEVICE_2_KEY=
DEVICE_2_SUDO_PASSWORD=your_sudo_password
# =========================
# Device 3
# =========================
DEVICE_3_NAME=
DEVICE_3_HOST=192.168.1.30
DEVICE_3_PORT=22
DEVICE_3_USER=ops
DEVICE_3_PASSWORD=
DEVICE_3_KEY=./keys/db-1_ed25519
DEVICE_3_SUDO_PASSWORD=
MODE=audit
uv run python main.py fleet.env
동작:
MODE=fix
AUTO_REBOOT=0
uv run python main.py fleet.env
동작:
/etc/modprobe.d/disable-cve-2026-31431-algif-aead.conf 작성algif_aead 언로드 시도AUTO_REBOOT에 따른 선택적 재부팅SAFE
algif_aead가 로드되지 않음.MITIGATED
NEEDS_PATCH
algif_aead가 사용 가능/로드되었고 패치 힌트가 없음.UNKNOWN
FAILED
각 실행은 REPORT_DIR에 3개의 파일을 생성합니다:
cve_2026_31431_<timestamp>.jsoncve_2026_31431_<timestamp>.csvcve_2026_31431_<timestamp>.mdprogress_<timestamp>.log(실시간 진행 및 하트비트 로그)핵심 필드:
name, hoststatuskernel, osalgif_loaded, algif_availablepatch_hintfixed, rebootederrorfleet.env 또는 개인 키를 커밋하지 마십시오.audit -> fix -> 재감사.ModuleNotFoundError: No module named 'paramiko'
uv sync를 실행하십시오.많은 호스트가 FAILED 상태
BadHostKeyException
known_hosts 레코드와 충돌합니다.fleet.env 자격 증명만 사용합니다.ssh-keygen -R <host>ssh-keyscan -H <host> >> $env:USERPROFILE\.ssh\known_hostsServer ... not found in known_hosts
known_hosts에 추가한 후 다시 실행하십시오.커널이 업데이트되었지만 상태가 여전히 위험