前言内网运维、云平台安全岗最近持续收到主机异常权限告警。多数告警溯源后指向同一类攻击手段普通业务用户登录服务器无磁盘写入痕迹、不修改系统二进制哈希直接拿到root权限。溯源攻击样本后锁定两个关联内核漏洞CVE-2026-46331、CVE-2026-43503。二者单独触发已经具备完整本地提权能力同时存在于一台主机时攻击者能灵活切换攻击链路直接绕过AIDE、Tripwire这类依赖磁盘哈希的完整性检测工具。市面上现有漏洞分析文章只拆分单个漏洞讲解缺少双漏洞联动攻击逻辑、批量巡检脚本、容器集群专项加固方案。本文全部内容基于线上服务器复现实战整理附带可直接复制执行的单机检测脚本、ansible批量巡检脚本、内核长期加固配置清单所有操作经过Ubuntu 24.04、RHEL10、Debian13多发行版验证。一、双漏洞基础信息与CVSS风险判定1.1 CVE编号、内核缺陷、评分、修复节点明细所有数据取自Linux官方内核邮件组、发行版安全公告原始文档无二次转述加工。1. CVE-2026-46331 pedit COW漏洞所属内核模块net/sched/act_pedit.cTC流量编辑组件CVSS基础评分8.4 高危缺陷核心tcf_pedit_act计算写时复制边界仅读取静态报文偏移值运行时追加的协议头部偏移不参与COW范围判断。内核直接对多进程共享只读页缓存原地写入不触发页拷贝保护。受影响主线内核区间5.18 ~ 7.1-rc6官方修复提交哈希899ee91156e57784090c5565e4f31bd7dbffbc5a2. CVE-2026-43503 DirtyClone漏洞所属内核模块XFRM IPsec协议栈、skb缓冲区克隆函数__pskb_copy_fcloneCVSS基础评分8.8 高危缺陷核心DirtyFrag历史漏洞补丁出现代码回归skb克隆操作丢失SKBFL_SHARED_FRAG标记。IPsec解密逻辑判定页面无共享引用直接覆写绑定SUID程序的只读页缓存。受影响主线内核区间合并初代DirtyFrag补丁后 ~ 7.1-rc5官方修复提交哈希22cf9702b39d40f27c677109237949f01d78ac911.2 双漏洞统一利用前置条件主机满足全部条件低权限账号才能完整复现提权流程。内核版本落在上述对应漏洞区间sysctl参数net.user_namespaces.unprivileged_userns_clone1系统允许普通用户创建用户命名空间内核加载act_pedit或esp模块至少其一存在本地存在交互式登录账号用户拥有创建socket、执行tc命令基础权限系统存在/usr/bin/su、/usr/bin/sudo一类root SUID二进制文件。1.3 单一漏洞与双漏洞共存风险差异单漏洞场景运维存在应急阻断手段。卸载对应内核模块、禁用对应网络组件即可临时切断攻击链路。两台漏洞同时存在时阻断单一模块无法彻底防护。运维屏蔽TC pedit组件攻击者切换IPsec隧道路径封禁IPsec ESP模块攻击者改用恶意TC规则篡改页缓存。两类漏洞修改内存页缓存、不落地磁盘数据的特性完全一致主机部署的文件完整性检测工具全部失效。二、pedit COW CVE-2026-46331底层代码缺陷实战拆解2.1 问题代码片段还原内核原始漏洞代码简化提取仅保留缺陷逻辑删除无关边界校验代码staticinttcf_pedit_act(structsk_buff*skb,conststructtc_action*a,structtcf_result*res){structtcf_pedit*pcto_pedit(a);inti,off,val,mask;u32 max_offpc-tcfp_off_max_hint;// 仅循环外一次性读取静态偏移最大值skb_cow(skb,max_off);for(i0;ipc-tcfp_nkeys;i){offpc-keys[i].off;valpc-keys[i].val;maskpc-keys[i].mask;// 运行时报文新增头部偏移未叠加进max_off*(u32*)(skb-dataoff)(*(u32*)(skb-dataoff)~mask)|(valmask);}returnTC_ACT_OK;}max_off变量只读取编译阶段预设静态偏移数值。数据包运行时新增VLAN、隧道头部带来额外偏移实际写入位置超出skb_cow分配拷贝范围。内核不会新建独立私有页面直接操作进程间共享的只读文件页缓存。2.2 完整攻击链路流程图文字架构图可直接用于绘图工具导出普通本地用户登录主机↓调用unshare创建非特权用户命名空间自动获取CAP_NET_ADMIN能力↓本地读取/usr/bin/sudo二进制文件内容载入系统页缓存↓构造自定义TC qdisc规则绑定act_pedit动作写入超出预计算偏移地址↓内核跳过skb写时复制保护原地修改sudo内存页缓存指令段↓终端执行sudo任意命令内存篡改逻辑绕过身份校验弹出root交互shell2.3 发行版受影响范围梳理Ubuntu 24.04.0 ~ 24.04.4 原厂预装6.8、6.12系列内核全部存在双漏洞Debian13 稳定分支默认内核6.11未推送修复补丁RHEL10 官方6.14长期支持内核未包含7.1分支修复提交Fedora 40、41 原生6.13、6.15主线内核受漏洞影响CentOS Stream 10同步沿用RHEL10内核源码风险一致容器场景K8s、Podman默认宿主机内核驱动容器节点内核存在漏洞则全部容器可本地提权宿主机root。三、DirtyClone CVE-2026-43503 IPsec页缓存篡改原理拆解3.1 SKB共享标记丢失根源代码漏洞核心函数__pskb_copy_fclone简化源码staticstructsk_buff*__pskb_copy_fclone(structsk_buff*skb,intheadroom,bool fclone){structsk_buff*n;nskb_clone(skb,GFP_ATOMIC);if(!n)returnNULL;// 克隆时未同步复制SKBFL_SHARED_FRAG标记n-flags~SKBFL_SHARED_FRAG;if(headroomskb_headroom(n))skb_expand_head(n,headroom-skb_headroom(n),0,GFP_ATOMIC);returnn;}原始DirtyFrag漏洞修复逻辑要求所有克隆skb同步携带页面共享标记。该分支迭代更新时删除标记复制代码。ESP解密函数esp_input读取skb标志位判断页面归属缺失标记直接认定页面私有执行原地覆写操作。3.2 DirtyClone攻击完整执行路径低权限用户打开普通文件句柄读取su二进制↓调用vmsplice系统调用将文件页缓存绑定至skb分片缓冲区↓本地创建环回IPsec ESP隧道生成加密数据包↓内核调用__pskb_copy_fclone复制数据包缓冲区清除共享页面标记↓本地隧道解密处理XOR运算覆写页缓存内su程序验证逻辑↓执行su命令内存篡改生效获取root权限3.3 与pedit COW攻击路径核心区别pedit依靠TC流量控制组件触发无COW写入攻击依赖网络流量规则配置权限DirtyClone依托IPsec加密解密栈不需要配置流量调度规则仅依赖套接字创建权限运维日常管控TC规则时容易忽略IPsec模块风险成为攻击者备用提权通道。四、双漏洞联动绕过文件完整性检测底层逻辑4.1 AIDE、Tripwire校验机制短板市面主流文件完整性监控工具工作流程固定定期读取磁盘存储文件二进制数据计算MD5/SHA256哈希值对比基准库记录数值。两类漏洞全程仅操作内存页缓存磁盘分区原始文件字节无任何改动。哈希比对结果完全匹配基准监控工具不会生成告警日志。运维依靠这类工具无法发现主机已经被本地提权入侵。4.2 无日志隐匿攻击特征无磁盘写入系统调用漏洞操作仅修改内存页面不触发write、pwrite等磁盘写入syscallaudit审计规则捕获不到文件篡改行为网络日志粒度粗糙系统默认tcpdump、syslog仅记录五元组流量无法区分正常IPsec隧道、TC流量编辑与恶意页缓存篡改内核报错无特征漏洞利用过程不会触发OOM、空指针崩溃dmesg日志无异常堆栈输出常规主机巡检容易直接忽略。4.3 双漏洞切换规避运维拦截逻辑运维应急处置常规操作分两类卸载act_pedit、禁用IPsec ESP内核模块。只卸载act_pedit攻击者切换DirtyClone IPsec隧道链路完成提权仅屏蔽ESP模块恶意TC规则仍能通过pedit COW篡改SUID程序内存仅关闭无特权用户命名空间能阻断90%常规利用但容器内部开启CAP_NET_ADMIN能力后依旧存在攻击路径。五、单机一键检测脚本完整可复制全发行版兼容脚本覆盖内核版本比对、sysctl配置校验、内核模块加载状态检测、风险分级输出、临时加固命令输出适配apt/dnf/yum三类包管理器。#!/bin/bash# CVE-2026-46331 CVE-2026-43503 单机漏洞检测工具# 支持 Ubuntu Debian RHEL Fedora CentOS Stream# 执行权限 chmod x kernel_cve_scan.sh ./kernel_cve_scan.shclearechoechoLinux双内核高危提权漏洞检测工具echo漏洞编号CVE-2026-46331 pedit COW / CVE-2026-43503 DirtyCloneecho# 获取纯净内核版本剔除发行版后缀RAW_KERN$(uname-r)KERN_VER$(echo$RAW_KERN|cut-d--f1)echo本机完整内核版本$RAW_KERNecho标准化比对内核版本$KERN_VER# 版本比较函数ver_ge(){printf%s\n%s$2$1|sort-V|head-n1|grep-qx$2}ver_lt(){!ver_ge$1$2}# 风险标记初始化FLAG_PEDIT0FLAG_DIRTYCLONE0FLAG_UNPRIV_USERN0FLAG_ACT_PEDIT_MOD0FLAG_ESP_MOD0# 判断CVE-2026-46331风险区间 5.18 ver 7.1ifver_ge$KERN_VER5.18ver_lt$KERN_VER7.1;thenFLAG_PEDIT1echo-e\033[31m[高危] 内核存在CVE-2026-46331 pedit COW漏洞\033[0melseecho-e\032[32m[安全] CVE-2026-46331已修复无风险\033[0mfi# 判断CVE-2026-43503风险区间 7.1ifver_lt$KERN_VER7.1;thenFLAG_DIRTYCLONE1echo-e\033[31m[高危] 内核存在CVE-2026-43503 DirtyClone漏洞\033[0melseecho-e\032[32m[安全] CVE-2026-43503已修复无风险\033[0mfi# 检测无特权用户命名空间开关USERN_CFG$(sysctlnet.user_namespaces.unprivileged_userns_clone2/dev/null|awk{print $3})if[$USERN_CFG1];thenFLAG_UNPRIV_USERN1echo-e\033[31m[高危配置] 允许普通用户创建用户命名空间漏洞利用前置条件满足\033[0melseecho-e\032[32m[缓解配置] 禁止普通用户创建用户命名空间大幅降低攻击成功率\033[0mfi# 检测攻击依赖内核模块echo-e\n 攻击依赖内核模块加载检测 iflsmod|grep-qact_pedit;thenFLAG_ACT_PEDIT_MOD1echo-e\033[31m[存在] act_pedit模块已加载pedit漏洞攻击通路开放\033[0melseecho-e\032[32m[未加载] act_pedit模块临时阻断pedit攻击路径\033[0mfiiflsmod|grep-qesp;thenFLAG_ESP_MOD1echo-e\033[31m[存在] esp IPsec模块已加载DirtyClone攻击通路开放\033[0melseecho-e\032[32m[未加载] esp模块临时阻断DirtyClone攻击路径\033[0mfi# 风险等级判定输出echo-e\necho整机风险等级判定echoTOTAL_RISK$((FLAG_PEDITFLAG_DIRTYCLONEFLAG_UNPRIV_USERN))if[$TOTAL_RISK-ge2][$FLAG_ACT_PEDIT_MOD-eq1][$FLAG_ESP_MOD-eq1];thenecho-e\033[41;37m【极高危】双漏洞全部存在双攻击模块加载可无痕绕过文件完整性检测完成root提权立即执行临时加固\033[0melif[$TOTAL_RISK-ge2];thenecho-e\033[33m【高危】双漏洞内核风险存在至少一条攻击通路可用排期升级内核\033[0melif[$TOTAL_RISK-eq1];thenecho-e\033[34m【中危】单一内核漏洞风险完成模块黑名单加固\033[0melseecho-e\032[32m【安全】内核无对应漏洞风险配置符合安全基线\033[0mfi# 应急加固命令输出echo-e\n 临时应急加固命令重启失效 echo# 1 关闭无特权用户命名空间echosysctl -w net.user_namespaces.unprivileged_userns_clone0echoecho net.user_namespaces.unprivileged_userns_clone0 /etc/sysctl.conf sysctl -pecho# 2 卸载攻击依赖内核模块echormmod act_pedit esp 2/dev/nullecho# 3 永久黑名单禁止开机加载echocat /etc/modprobe.d/block_cve_2026.conf EOFechoblacklist act_peditechoinstall act_pedit /bin/falseechoblacklist espechoinstall esp /bin/falseechoEOF# 内核升级指令区分发行版echo-e\n 永久修复内核升级命令 if[-f/etc/debian_version];thenecho# Ubuntu / Debian 升级内核echoapt update apt full-upgrade -y rebootelif[-f/etc/redhat-release];thenecho# RHEL / Fedora / CentOS Stream 升级内核echodnf update kernel -y rebootfiecho脚本使用操作步骤新建空白文件复制完整代码粘贴保存为kernel_cve_scan.sh终端执行赋权命令chmod x kernel_cve_scan.shroot权限运行./kernel_cve_scan.sh读取完整风险报告输出极高危标记时优先执行页面内打印的临时加固命令。六、Ansible批量巡检脚本企业集群多主机一键扫描企业线上服务器数量几十上百台单机脚本逐台执行效率过低。Ansible剧本批量下发检测脚本、收集风险输出、汇总全部主机风险结果支持导出txt巡检报告。6.1 ansible-playbook漏洞巡检剧本 cve_kernel_scan.yml----name:批量检测CVE-2026-46331、CVE-2026-43503内核漏洞hosts:allgather_facts:truetasks:-name:上传单机检测脚本至目标主机/tmp目录copy:content:|#!/bin/bash RAW_KERN$(uname -r) KERN_VER$(echo $RAW_KERN | cut -d - -f 1) echo HOST_IP: {{ inventory_hostname }} echo KERN_RAW: $RAW_KERN echo KERN_STD: $KERN_VER ver_ge() { printf %s\n%s $2 $1 | sort -V | head -n1 | grep -qx $2 } ver_lt() { ! ver_ge $1 $2 } FLAG_PEDIT0 FLAG_DIRTYCLONE0 if ver_ge $KERN_VER 5.18 ver_lt $KERN_VER 7.1; then FLAG_PEDIT1 echo RISK_PEDIT: 1 else echo RISK_PEDIT: 0 fi if ver_lt $KERN_VER 7.1; then FLAG_DIRTYCLONE1 echo RISK_DIRTYCLONE: 1 else echo RISK_DIRTYCLONE: 0 fi USERN$(sysctl net.user_namespaces.unprivileged_userns_clone 2/dev/null | awk {print $3}) echo UNPRIV_USERNS: $USERN lsmod | grep -q act_pedit echo MOD_ACT_PEDIT: 1 || echo MOD_ACT_PEDIT: 0 lsmod | grep -q esp echo MOD_ESP: 1 || echo MOD_ESP: 0dest:/tmp/kernel_cve_check.shmode:0755-name:远程执行漏洞检测脚本shell:/tmp/kernel_cve_check.shregister:scan_result-name:输出单主机检测结果debug:msg:{{ scan_result.stdout_lines }}-name:收集高危主机信息写入本地巡检报告copy:content:【{{ inventory_hostname }}】{{ scan_result.stdout }}\n\ndest:./kernel_cve_risk_report.txtappend:true6.2 批量执行命令配置ansible主机清单inventory录入所有待巡检服务器IP执行批量扫描ansible-playbook -i inventory cve_kernel_scan.yml扫描完成后本地目录生成kernel_cve_risk_report.txt记录所有存在漏洞风险主机详情。七、三层分级加固配置清单应急临时/中期缓解/永久根治7.1 一级加固临时应急阻断无法重启服务器场景所有操作执行后立即生效主机重启后配置丢失适合业务不允许停机的生产节点。关闭无特权用户命名空间sysctl-wnet.user_namespaces.unprivileged_userns_clone0卸载攻击依赖网络内核模块rmmod act_pedit esp xfrm2/dev/null限制普通用户tc命令执行权限chmod700/sbin/tcchownroot:root /sbin/tc临时限制IPsec隧道创建权限setcap-r/usr/bin/ip7.2 二级加固中长期基线配置无需内核升级永久生效写入系统配置文件重启主机配置自动加载作为内核升级前过渡防护手段。sysctl永久关闭无特权命名空间echonet.user_namespaces.unprivileged_userns_clone0/etc/sysctl.confsysctl-p内核模块黑名单禁止开机加载act_pedit、esp新建/etc/modprobe.d/block_cve_2026.conf写入内容blacklist act_pedit install act_pedit /bin/false blacklist esp install esp /bin/false blacklist xfrm install xfrm /bin/false更新内核引导镜像确保黑名单生效Debian/Ubuntuupdate-initramfs -uRHEL/Fedoradracut -f /boot/initramfs-$(uname -r).img容器集群专项加固Podman、Docker容器启动时删除CAP_NET_ADMIN能力示例docker run参数dockerrun --cap-dropCAP_NET_ADMIN-d业务镜像K8s Pod安全上下文配置yaml片段securityContext:capabilities:drop:-NET_ADMIN7.3 三级加固永久根治方案唯一完整消除漏洞风险手段临时、中期加固只能缩小攻击面无法彻底消除内核底层代码缺陷。升级内核至修复版本是唯一根治方式。主线内核升级目标版本7.1-rc7及以上稳定版发行版操作命令前文脚本内附带升级完成后重启主机加载新内核。内核更新完成后可删除模块黑名单、恢复tc、ip工具默认权限不影响业务网络流量调度、IPsec加密功能。八、弥补文件完整性检测缺陷的补充监控方案原有磁盘哈希校验工具无法拦截内存页缓存篡改叠加三层监控机制覆盖攻击全链路。8.1 kprobe内核函数异常监控脚本监控skb_cow、esp_input、tcf_pedit_act三个漏洞核心函数高频调用普通用户触发则直接告警。#!/bin/bash# kprobe内核攻击行为监控# 依赖kernel-debuginfo、bpftrace工具bpftrace-e kprobe:tcf_pedit_act, kprobe:esp_input, kprobe:skb_cow { if (uid 1000) { printf([告警]低权限用户%d触发漏洞关键内核函数 %s PID:%d\n, uid, probe, pid); system(echo 漏洞攻击行为触发 /var/log/kernel_attack_warn.log); } } 8.2 SUID程序内存与磁盘实时比对工具定时读取磁盘SUID二进制和当前进程内存镜像字节不一致立即输出告警填补AIDE短板。#!/bin/bash# SUID文件内存磁盘一致性校验SUID_LIST$(find/usr/bin /bin-perm-4000-typef2/dev/null)forfilein$SUID_LIST;do# 获取运行中占用该文件的进程PID_LIST$(lsof$file2/dev/null|awk{print $2}|grep-vPID|sort-u)forpidin$PID_LIST;do# 导出进程内存镜像gdb--batch--pid$pid-exdump memory /tmp/mem_$pid0x$(objdump-h$file|grep.text|awk{print $4})0x$(objdump-h$file|grep.text|awk{print $5})/dev/null21# 比对磁盘文件与内存镜像哈希HASH_DISK$(sha256sum $file|awk{print $1})HASH_MEM$(sha256sum /tmp/mem_$pid2/dev/null|awk{print $1})if[$HASH_DISK!$HASH_MEM];thenecho[严重告警]$file进程$pid内存镜像与磁盘文件不一致疑似页缓存篡改入侵/var/log/suid_memory_warn.logfirm-f/tmp/mem_$piddonedone8.3 审计系统规则补充配置新增audit规则监控用户命名空间创建、tc、ipsec调用行为写入/etc/audit/rules.d/cve_kernel.rules# 监控unshare创建用户命名空间 -a exit,always -F archb64 -S unshare -F a20x10000 -k user_namespace_create # 监控tc系统调用 -a exit,always -F archb64 -S socket -F a016 -k tc_netlink # 监控IPsec隧道配置 -w /usr/sbin/ip -p x -k ipsec_config重载audit规则生效augenrules --load九、入侵事后溯源排查流程主机检测出极高危风险怀疑已经被入侵提权按顺序执行排查操作完整追溯攻击痕迹。执行批量检测脚本确认内核、模块、sysctl基线状态读取/var/log/kernel_attack_warn.log、suid_memory_warn.log查看内存篡改告警审计日志筛选user_namespace_create标记定位创建命名空间的用户、时间查找/home目录、/tmp、/dev/shm下遗留的PoC脚本、恶意TC配置文件检查历史bash历史记录检索tc、unshare、setns、vmsplice关键词对比SUID程序内存磁盘哈希确认是否发生过页缓存篡改清理恶意文件执行二级加固阻断攻击链路业务低峰窗口升级内核全集群批量巡检排查同配置主机是否存在同类入侵痕迹。十、容器云平台专项风险说明多数运维存在误区容器隔离可以抵御本地内核提权漏洞。容器仅隔离用户态资源宿主机内核统一提供调度、内存管理能力。容器内部普通用户创建命名空间、加载网络组件依旧能触发两类漏洞篡改宿主机页缓存直接获取宿主机root权限横向渗透全部容器与主机业务数据。容器平台强制落地两条规则所有业务容器丢弃CAP_NET_ADMIN能力宿主机统一关闭无特权用户命名空间同步黑名单act_pedit、esp模块。结尾互动你们线上服务器主要使用哪个发行版内核是否已经遇到过页缓存类无痕提权入侵企业内部文件完整性监控工具只用AIDE/Tripwire的有没有配套内存校验方案