Bash 辅助工具:发现主机(可通过 nmap 扫描可选 CIDR),然后通过 SSH 只读 方式检查 CVE-2026-31431(Copy Fail / algif_aead)、CVE-2026-31677 / CVE-2026-43077(AF_ALG RX 启发式判断)、CVE-2026-23111(nftables + 用户命名空间)、CVE-2026-23102(arm64 SVE/SME)。仅基于启发式判断 — 非利用程序;请向您的发行商确认。
视为敏感信息: 磁盘上的密码文件;输出列出主机和内核状态。
| 组件 | 时机 |
|---|---|
bash, ssh, sshpass | 始终 |
nmap | CIDR 目标: 需要 nmap -sn -PS22。使用 COPYFAIL_PREAUTH_NMAP=1(默认)时,还会在 SSH 横幅后对每台主机执行 nmap -p22 -sV —— 较慢,但有助于识别 macOS/Windows。设置 COPYFAIL_PREAUTH_NMAP=0 可跳过每主机的 nmap(您仍需要 nmap 进行 CIDR 扫描)。 |
sudo cp copyfail-creds.example /etc/copyfail-creds && sudo nano /etc/copyfail-credsuser:password(只有第一个 : 用于分隔用户名和密码)。600 权限:sudo chmod 600 /etc/copyfail-credssudo 运行脚本(或 chown 给您的用户,仍保持 600)。CREDS_FILE=/path/to/creds ./copyfail_scan.sh [TARGET]
TARGET:CIDR、单个 IP/主机名,或主机列表文件路径(支持 # 注释)。省略目标则使用脚本默认值(参见 copyfail_scan.sh 中的 TARGET=)。
chmod +x copyfail_scan.sh
sudo CREDS_FILE=/etc/copyfail-creds ./copyfail_scan.sh
sudo CREDS_FILE=/etc/copyfail-creds ./copyfail_scan.sh 192.168.1.0/24
CREDS_FILE=~/creds ./copyfail_scan.sh ./hosts.txt
输出: 仅标准输出(无报告文件)。使用 tee 保存。每主机行之后:=== Summary report ===(除非 COPYFAIL_SUMMARY=0)—— 已确认良好 vs 需要复核;共享同一摘要行的主机会被合并(逗号分隔的标签)。
# Example: no per-host nmap, sequential
COPYFAIL_PREAUTH_NMAP=0 COPYFAIL_PARALLEL=1 sudo ./copyfail_scan.sh 192.168.54.93
31431 PATCHED、31431 VULN - MITIGATED、31431 NO algif_aead - VERIFY、[SKIP] / [SKIP - PRE-AUTH] 等标签均为脚本启发式判断;23111= / 23102= 尾字段总结了 nftables/user-ns 和 arm64 SVE 探测结果。*-pve / 厂商内核: uname -r 可能与上游 NVD 元组不匹配 —— 请使用 发行版/Proxmox 安全公告 和已安装的内核包,而非仅依赖此脚本。echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif.conf && sudo rmmod algif_aead 2>/dev/nullMIT —— 参见 LICENSE。
| 变量 | 默认值 | 作用 |
|---|
CREDS_FILE | /etc/copyfail-creds | user:password 文件 |
COPYFAIL_PREAUTH | 1 | TCP/22 SSH 横幅;跳过明显的非 Linux 系统 |
COPYFAIL_PREAUTH_NMAP | 1 | 当横幅不确定时额外执行 nmap -p22 -sV(较慢) |
COPYFAIL_PREAUTH_VERBOSE | 0 | 1 = 在预认证跳过时显示截断的横幅 |
COPYFAIL_PARALLEL | 24 | 最大并发探测数(1 = 串行) |
COPYFAIL_ORDERED_OUTPUT | 1 | 当并行时,按探测顺序缓冲行(0 = 交错) |
COPYFAIL_PTR_LOOKUP | 1 | 当 nmap/列表没有名称时,通过 getent 进行 IPv4 反向 DNS |
COPYFAIL_SUMMARY | 1 | 打印分组后的结束摘要(0 = 跳过) |
COPYFAIL_BANNER_TIMEOUT | 3 | 等待 SSH 标识的秒数(端口 22) |
COPYFAIL_SSH_CONNECT_TIMEOUT | 3 | ssh ConnectTimeout(秒) |
COPYFAIL_NO_BANNER_SKIP_SSH | 1 | 如果预认证未看到横幅,则跳过 SSH 尝试(如果横幅非常慢则设为 0) |