用于 CVE-2026-31431 "Copy Fail" 和 CVE-2026-43284 "Dirty Frag" 的安全检测工具——Linux 内核 algif_aead 模块中的本地权限提升漏洞,自 2017 年以来影响所有主要发行版。
安全检测工具,用于两个相关的 Linux 内核本地权限提升漏洞家族 —— Copy Fail(CVE-2026-31431)和 Dirty Frag(CVE-2026-43284 / CVE-2026-43500)。两者自 2017 年起影响所有主流发行版,任何无特权本地用户均可利用,且两者需要独立的缓解措施。
这些探测程序不会打开任何套接字,也不会执行任何加密或网络操作。 检测完全基于内核版本、发行版软件包元数据、模块状态及生效中的缓解标志 —— 上述信息均无需
sudo即可读取(world-readable)。
应用 Copy Fail 缓解措施并不能防御 Dirty Frag。 必须同时运行两个探测脚本,并分别应用两项缓解措施。
.
├── cve-2026-31431-check.sh Copy Fail probe (all output modes)
├── copy_fail_userparameter.conf Zabbix agent UserParameter — Copy Fail
├── zabbix_template_copy_fail.yaml Zabbix 6.4 template — Copy Fail
├── copy_fail_auditd.rules auditd behavioral detection — Copy Fail
├── cve-2026-43284-check.sh Dirty Frag probe (all output modes)
├── dirty_frag_userparameter.conf Zabbix agent UserParameter — Dirty Frag
├── wazuh_sca/
│ └── copy_fail_sca.yml Wazuh SCA compliance policy
└── ansible/
└── copy_fall_scan.yml Fleet-wide Ansible scan playbook
该漏洞利用需要以下精确的系统调用链:
socket(AF_ALG, SOCK_SEQPACKET, 0)
bind(fd, {alg_type="aead", alg_name="authesn(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
探测脚本不会触及其中任何调用。检测基于以下内容:
.ko(可自动加载)modprobe.d 黑名单及 initcall_blacklist 内核命令行参数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 = PATCHED(已修补)或 MITIGATED(已缓解)· 1 = VULNERABLE(存在漏洞)· 2 = UNKNOWN(未知)
脚本会自动与这些阈值进行比较,当运行中的软件包版本达到或超过已修补阈值时,将判定结果设为 PATCHED(已修补)。
在 RHEL、AlmaLinux、Rocky Linux 及其衍生发行版上,algif_aead 被编译进内核。modprobe.d 的规避方法无效。 只有通过内核命令行传入 initcall_blacklist=algif_aead_init 才有效。探测脚本会检测到这一情况并明确发出警告。
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
Dirty Frag 串联了由 Hyunwoo Kim(@v4bel)发现的两个原地解密快速路径缺陷,披露时间约为 2026 年 5 月 7 日,比 Copy Fail 晚一周:
esp4、esp6);上游修复提交 f4c50a4034e6rxrpc);上游修复提交 aa54b1d27fe0该漏洞利用将 /usr/bin/su 页缓存中的管道页作为分页套接字缓冲区片段附加,然后使用攻击者选定的密钥驱动原地解密 —— 直接将任意字节写入 setuid 二进制的缓存副本,而无需触碰磁盘上的文件。
Copy Fail 缓解措施(algif_aead 黑名单)无法阻止 Dirty Frag。
chmod +x cve-2026-43284-check.sh
./cve-2026-43284-check.sh # human-readable
./cve-2026-43284-check.sh --json # machine-readable
./cve-2026-43284-check.sh --nagios # Nagios/Icinga/NRPE
./cve-2026-43284-check.sh --zabbix # integer 0/1/2 for Zabbix item
探测脚本会独立检查 esp4、esp6 和 rxrpc,并在 JSON 输出中分别报告 cve_43284_safe / cve_43500_safe 布尔值。
esp4 和 esp6 是 IPsec(strongSwan、Libreswan)使用的内核侧 ESP 转换。将它们加入黑名单会中断 IPsec 隧道。探测脚本通过 ip xfrm state 和守护进程检测来识别正在使用的 IPsec,并相应调整修复建议:
modprobe.d 黑名单。rxrpc 加入黑名单):
# RHEL-family
sysctl -w user.max_user_namespaces=0
echo "install rxrpc /bin/false" >> /etc/modprobe.d/dirtyfrag.conf
# Ubuntu / Debian
sysctl -w kernel.unprivileged_userns_clone=0
echo "install rxrpc /bin/false" >> /etc/modprobe.d/dirtyfrag.conf
| 发行版 | CVE-2026-43284 | CVE-2026-43500 (rxrpc) |
|---|---|---|
| RHEL / Rocky / Alma 8.10 | 4.18.0-553.123.2.el8_10 | 不适用 —— RHEL 8 未附带 rxrpc |
| RHEL / Rocky / Alma 9.x | 待定 | 待定 |
对于等待已修补内核的系统,请立即应用 modprobe.d 黑名单(同时考虑 IPsec 注意事项)。
AlmaLinux / RHEL 8 完全不编译 rxrpc 模块。探测脚本会在 RHEL/Rocky/Alma 8.x 上自动将 kernel_vuln_rxrpc 标记为 not_affected。
在每个受监控主机上部署两个探测脚本:
mkdir -p /etc/zabbix/scripts
install -m 750 -o zabbix -g zabbix cve-2026-31431-check.sh /etc/zabbix/scripts/
install -m 750 -o zabbix -g zabbix cve-2026-43284-check.sh /etc/zabbix/scripts/
cp copy_fail_userparameter.conf /etc/zabbix/zabbix_agentd.d/
cp dirty_frag_userparameter.conf /etc/zabbix/zabbix_agentd.d/
systemctl restart zabbix-agent # or zabbix-agent2
通过 Configuration → Templates → Import 导入 zabbix_template_copy_fail.yaml。
提供的 UserParameter 监控项:
Copy Fail 模板包含状态=1 时的 HIGH(严重) 触发器,以及状态=2 时的 WARNING(警告) 触发器。无需 sudo —— 两个脚本读取的所有文件均为全局可读。
install -m 755 cve-2026-31431-check.sh /usr/lib/nagios/plugins/
install -m 755 cve-2026-43284-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
command[check_dirty_frag]=/usr/lib/nagios/plugins/cve-2026-43284-check.sh --nagios
# CheckMK local checks:
echo '#!/bin/bash
OUT=$(/usr/lib/nagios/plugins/cve-2026-31431-check.sh --nagios); RC=$?
echo "$RC CVE-2026-31431 - $OUT"' > /usr/lib/check_mk_agent/local/copy_fail
echo '#!/bin/bash
OUT=$(/usr/lib/nagios/plugins/cve-2026-43284-check.sh --nagios); RC=$?
echo "$RC CVE-2026-43284 - $OUT"' > /usr/lib/check_mk_agent/local/dirty_frag
chmod +x /usr/lib/check_mk_agent/local/copy_fail \
/usr/lib/check_mk_agent/local/dirty_frag
检测正在进行的活跃漏洞利用尝试,对两个静态探测脚本形成补充。
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 文件的注释中。
cp wazuh_sca/copy_fail_sca.yml /var/ossec/etc/shared/default/
/var/ossec/bin/agent_control -r -a
查看结果:Security → SCA → 按策略 cve_2026_31431_copy_fail 筛选
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml
# Limit to a subset:
ansible-playbook -i inventory/hosts ansible/copy_fall_scan.yml --limit webservers
将每台主机的 JSON 结果和 summary.txt 写入控制端的 /tmp/copy_fail_results/。如果任何主机存在漏洞(VULNERABLE),该 playbook 将以非零状态退出。
Copy Fail
Dirty Frag
| Copy Fail | Dirty Frag |
|---|
| CVE | CVE-2026-31431 | CVE-2026-43284 + CVE-2026-43500 |
| 模块 | algif_aead | esp4, esp6, rxrpc |
| 引入时间 | 2017 年 8 月(内核 4.14) | 2017 年 1 月 / 2023 年 6 月 |
| 缓解措施 | 针对 algif_aead 的 modprobe.d 黑名单 | 针对 esp4/esp6/rxrpc 的 modprobe.d 黑名单 |
| 探测脚本 | cve-2026-31431-check.sh | cve-2026-43284-check.sh |
| 发行版 | 已修补版本 | 安全通告 |
|---|
| RHEL / Rocky / Alma 8.10 | kernel-4.18.0-553.123.1.el8_10 | Rocky 2026-05-11 |
| RHEL / Rocky / Alma 9.7 | kernel-5.14.0-611.54.1.el9_7 | 同上 |
| RHEL / Rocky / Alma 10.1 | kernel-6.12.0-124.55.1.el10_1 | 同上 |
| Debian 11 (bullseye) | linux 5.10.251-3 | DLA-4560-1 |
| Debian 12 (bookworm) | linux 6.1.170-1 | DSA-6243-1 |
| Debian 13 (trixie) | linux 6.12.85-1 | DSA-6238-1 |
| Ubuntu 22.04 / 24.04 | 尚无已修补内核 —— 通过 USN-8226-1 提供 kmod 缓解措施 | USN-8226-1 |
| SLES 12 SP5 | kernel-default 4.12.14-122.299.1 | SUSE-SU-2026:1669-1 |
| SLES 15 SP5 | kernel-default 5.14.21-150500.55.144.1 | SUSE-SU-2026:1670-1 |
| SLES 15 SP6 | kernel-default 6.4.0-150600.23.92.1 | SUSE-SU-2026:1671-1 |
| SLES 15 SP7 | kernel-default 6.4.0-150700.53.40.1 | SUSE-SU-2026:1669-1 |
| SLES 16.0 | kernel-default 6.12.0-160000.29.1 | SUSE 安全通告 |
| Debian / Ubuntu / SLES |
| 待定 |
| 待定 |
| 键 | 类型 | 含义 |
|---|
copy_fail.status | int | 0=安全 · 1=存在漏洞 · 2=未知 |
copy_fail.detail | str | 人类可读的 Copy Fail 判定结果 |
dirty_frag.status | int | 0=安全 · 1=存在漏洞 · 2=未知 |
dirty_frag.detail | str | 人类可读的 Dirty Frag 判定结果 |
| 发行版 | Copy Fail | Dirty Frag |
|---|