ochebotar/copy-fail-CVE-2026-31431-detection-probe
GitHub: ochebotar/copy-fail-CVE-2026-31431-detection-probe
针对Linux内核CVE-2026-31431本地权限提升漏洞的安全检测工具套件,支持多种输出格式和监控平台集成。
Stars: 9 | Forks: 2
# CVE-2026-31431 "Copy Fail" — 安全探测工具套件
[](LICENSE)
[](https://xint.io/blog/copy-fail-linux-distributions)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-31431)

**CVE-2026-31431 "Copy Fail"** 的安全检测工具 — Linux 内核 `algif_aead` 模块中的本地权限提升漏洞,自 2017 年以来影响所有主要发行版。
## 背景
该漏洞需要以下精确的系统调用链:
```
socket(AF_ALG, SOCK_SEQPACKET, 0)
bind(fd, {alg_type="aead", alg_name="authencesn(hmac(sha256),cbc(aes))"})
accept(fd, ...)
splice(suid_binary_fd, op_fd) ← page cache fed into crypto subsystem
sendmsg / recvmsg ← 4-byte scratch write lands in page cache
```
探测工具不会触及以上任何内容。检测完全基于:
1. **内核版本范围** — 漏洞引入于 4.14(2017 年),修复于 6.18.22 / 6.19.12 / 6.20+
2. **发行版软件包版本** — 通过 `dpkg`/`rpm` 检测供应商回传
3. **模块状态** — 已加载、不存在或内置
4. **活动缓解措施** — `modprobe.d` 黑名单和 `initcall_blacklist` 内核命令行参数
## 文件
```
.
├── cve-2026-31431-check.sh Core probe (all output modes)
├── copy_fail_userparameter.conf Zabbix agent UserParameter config
├── zabbix_template_copy_fail.yaml Zabbix 6.4 template (import via GUI/API)
├── copy_fail_auditd.rules auditd behavioral detection rules
├── wazuh_sca/
│ └── copy_fail_sca.yml Wazuh SCA compliance policy
└── ansible/
└── copy_fall_scan.yml Fleet-wide Ansible scan playbook
```
## 快速开始
```
chmod +x cve-2026-31431-check.sh
./cve-2026-31431-check.sh # human-readable
./cve-2026-31431-check.sh --json # machine-readable
./cve-2026-31431-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-31431-check.sh --zabbix # integer 0/1/2 for Zabbix item
```
**退出码:** `0` = 已修复或已缓解 · `1` = 存在漏洞 · `2` = 未知
### 示例输出
```
══════════════════════════════════════════════
CVE-2026-31431 (Copy Fail) — Vulnerability Probe
══════════════════════════════════════════════
Host : webserver01.gov.com
Kernel : 6.8.0-60-generic
Distro : ubuntu 24.04
── Kernel version ──────────────────────────
Status : vulnerable
Note : In vulnerable range (4.14–6.17); check distro package
── Package (vendor backport check) ─────────
Check : found
Version : 6.8.0-60.63
Note : compare to Ubuntu USN for your series
── Module / mitigation status ──────────────
Built-in : false
Absent : true
modprobe.d : true
cmdline mit : false
Effective : true
Mit. note : modprobe.d blacklist present and module not loaded
── Verdict ─────────────────────────────────
MITIGATED modprobe.d blacklist present and module not loaded
══════════════════════════════════════════════
```
## Zabbix
```
# On each monitored host:
mkdir -p /etc/zabbix/scripts
install -m 750 -o zabbix -g zabbix \
cve-2026-31431-check.sh /etc/zabbix/scripts/
cp copy_fail_userparameter.conf /etc/zabbix/zabbix_agentd.d/
systemctl restart zabbix-agent # or zabbix-agent2
# Test as the zabbix user:
sudo -u zabbix /etc/zabbix/scripts/cve-2026-31431-check.sh
```
通过 **Configuration → Templates → Import** 导入 `zabbix_template_copy_fail.yaml`。
该模板提供:
- 项 `copy_fail.status`(整数,每小时检查)— `0`=安全 · `1`=存在漏洞 · `2`=未知
- 项 `copy_fail.detail`(字符串)— 人类可读的判定结果
- **HIGH 触发器** 当状态 = 1
- **WARNING 触发器** 当状态 = 2
该脚本不需要 `sudo` — 它读取的每个文件都是全局可读的。
## Nagios / Icinga / CheckMK / NRPE
```
install -m 755 cve-2026-31431-check.sh /usr/lib/nagios/plugins/
# NRPE — add to /etc/nagios/nrpe.cfg:
command[check_copy_fail]=/usr/lib/nagios/plugins/cve-2026-31431-check.sh --nagios
# CheckMK local check — /usr/lib/check_mk_agent/local/copy_fail:
#!/bin/bash
OUT=$(/usr/lib/nagios/plugins/cve-2026-31431-check.sh --nagios)
RC=$?
echo "$RC CVE-2026-31431 - $OUT"
```
## auditd — 行为/运行时检测
检测**正在进行的活动漏洞利用尝试**,作为静态探测的补充。
```
cp copy_fail_auditd.rules /etc/audit/rules.d/
augenrules --load
# Watch for unexpected AF_ALG callers:
ausearch -k copy_fail_af_alg --interpret | \
grep -v -E 'cryptsetup|veritysetup|systemd-crypt|kcapi'
```
Wazuh 规则存根(级别 13 / 15)嵌入在 `.rules` 文件的注释中。
## Wazuh SCA
```
cp wazuh_sca/copy_fail_sca.yml /var/ossec/etc/shared/default/
/var/ossec/bin/agent_control -r -a # force rescan
```
结果:**Security → SCA → 按策略过滤 `cve_2026_31431_copy_fail`**
## Ansible — 批量扫描
```
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml
# or limit to a subset:
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml --limit webservers
```
将每台主机的 JSON + `summary.txt` 写入控制节点的 `/tmp/copy_fail_results/`。如果任何主机存在漏洞,剧本将以非零退出。
## 已知限制
### 供应商回传误报
发行版内核在不更改上游版本号的情况下回传修复。探测工具检查 `dpkg`/`rpm` 软件包版本,但无法维护所有系列的所有已修复软件包版本的实时查询表。刚修复的发行版内核可能仍会基于版本号显示为存在漏洞 — 请与您的供应商追踪器交叉检查,并确认模块不存在或缓解措施已激活。
| 发行版 | 追踪器 |
|--------|---------|
| Ubuntu | https://ubuntu.com/security/CVE-2026-31431 |
| Debian | https://security-tracker.debian.org/tracker/CVE-2026-31431 |
| RHEL / Alma / Rocky | https://access.redhat.com/security/cve/CVE-2026-31431 |
| Amazon Linux | https://explore.alas.aws.amazon.com/CVE-2026-31431.html |
| SUSE | https://www.suse.com/security/cve/CVE-2026-31431/ |
### RHEL 系列内置模块
在 RHEL、AlmaLinux、Rocky Linux 及衍生版中,`algif_aead` 被编译到内核中(`CONFIG_CRYPTO_USER_API_AEAD=y`)。**`modprobe.d` 解决方法无效。**只有内核命令行上的 `initcall_blacklist=algif_aead_init` 有效。
探测工具会检测此条件并明确警告。
通过 grubby 应用:
```
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
```
## 参考资料
- [Copy Fail — 原始 Xint/Theori 文章](https://xint.io/blog/copy-fail-linux-distributions)
- [CERT-EU 公告 2026-005](https://cert.europa.eu/publications/security-advisories/2026-005/)
- [Microsoft Defender 博客](https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/)
- [Sysdig TRT 分析 + Falco 规则](https://sysdig.com/blog/cve-2026-31431-copy-fail-linux-kernel-flaw-lets-local-users-gain-root-in-seconds)
- [Ubuntu 安全公告](https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available)
- [NVD CVE-2026-31431](https://nvd.nist.gov/vuln/detail/CVE-2026-31431)
标签:0day挖掘, algif_aead, AMSI绕过, Ansible, auditd, Copy Fail, CVE-2026-31431, Linux内核漏洞, URL发现, Wazuh, Zabbix, 内核安全, 威胁检测, 安全合规, 安全检测, 安全运营, 扫描框架, 本地权限提升, 漏洞检测工具, 网络代理