
免责声明:本文漏洞技术细节均来源于公开可查证的安全研究资料,仅供安全研究和防御参考。请勿将文中技术细节用于非授权安全测试。受影响系统请尽快参照厂商安全公告进行修复。
Linux内核是由Linus Torvalds于1991年发起并持续维护的开源操作系统内核,现由全球数千名开发者和企业共同协作演进,是Linux操作系统的核心组件,负责进程管理、内存管理、文件系统、网络协议栈、设备驱动及硬件抽象等底层功能,广泛应用于服务器、桌面系统、移动设备(Android)、嵌入式系统和云计算基础设施,是全球部署最广泛的操作系统内核之一,其开源和模块化的架构设计使其具备极强的可移植性和可扩展性。
Linux内核的net/sched子系统(即 tc,Traffic Control)是网络协议栈中负责流量分类、整形、调度和策略执行的框架,它通过qdisc(队列规则)对网络接口上的收发包进行排队管理,借助class(类别)实现流量分级,并利用action(动作,如 pedit、mirred、skbedit 等)在数据包经过时对其进行修改、重定向或标记等操作,管理员可以通过tc命令行工具灵活组合这些组件来实施带宽限制、流量优先级控制、DSCP 标记修改、QoS策略等网络运维任务,其设计高度模块化,各种qdisc(如 pfifo_fast、htb、fq_codel、cake)和action 以插件形式注册到内核,使其既能满足简单的家用路由场景,也能支撑企业级数据中心和云环境下的复杂流量工程需求。
Linux内核tc pedit动作(net/sched/act_pedit.c中的tcf_pedit_act() 函数)在执行数据包字段编辑时,skb_ensure_writable() 的COW(Copy-On-Write)保护范围在循环外基于tcfp_off_max_hint静态预计算,但该hint值未包含typed key在运行时动态追加的header offset(hoffset),导致实际写入位置可能超出COW覆盖范围;
当skb的frag数据指向通过sendfile等路径关联的只读页缓存页时,超出COW 范围的写入会直接落在共享的page cache上,攻击者借此可篡改/usr/bin/su等setuid-root二进制文件的内存副本,执行被污染文件后实现本地稳定提权至root,整个过程确定性触发,无需竞态条件。
CVE-2026-46331
v5.18 <= Linux Kernel < v7.1-rc7
https://github.com/0xBlackash/CVE-2026-46331
https://github.com/sgkdev/packet_edit_meme
https://git.kernel.org/stable/c/2bec122b9fb91507a758ab5e3e5c4fbe7cb3f61b
— END —
漏洞分析不易,如果你觉得这篇文章对你的安全防护工作有帮助,请阅读至此的你随手点个红心,也欢迎转发给身边可能受影响的运维同事。每一个红心和转发,都是对安全内容创作的支持,也能让更多一线工程师及时获取漏洞预警信息。