CISA 那份已知被利用漏洞目录(KEV),10 月 28 号又加了一条,编号 CVE-2026-46300,落在 Linux 内核的收包路径上。CVSS 3.1 给的是 7.8——夹在一堆 9 开头里不算扎眼,可它进 KEV 这件事本身,比分数更值得看一眼。
问题出在内核合并数据包那一段。收包的时候,内核会把一个包的分片「挂」到另一个包上,省去来回拷贝,干这活的是 skb_try_coalesce()。麻烦在于:如果被挂的那个包身上带着 SKBFL_SHARED_FRAG 这个标记——意思大致是「这些内存页不是你的,是外部持有或者页缓存 backing 的」——合并过去之后,这个标记没跟着一起走。标记丢了,接手的那个 skb 看上去就成了「这块内存归我」。
偏偏内核里有代码,靠这个标记来判断能不能原地改数据。点一个名:IPsec 的 ESP 收包路径,在决定「不拷贝、直接原地解密」之前,会先看一眼 skb_has_shared_frag()。标记被合并弄丢之后,这个判断就成了 false,于是内核对着本属于页缓存的内存原地解密,写到不该写的地方去。补丁本身很小,就是把那个标记在合并时一并带过去。
这事不花哨,难的也不是改法,是它踩在了「这块内存到底归谁」那条线上——守线的那个标记丢了,后面全跟着错。
影响版本:内核 3.9 之后、各自分支修好点之前的版本,都在区间里。
修复版本:按分支分别是 5.10.257、5.15.208、6.1.174、6.6.141、6.12.91、6.18.33、7.0.10。装之前跟自己的分支对一下,别拿别的分支的号硬套。
一条自查:uname -r,把结果跟上面分支的修复点比;发行版(RHEL、Ubuntu、Debian 这些)要看各自的回补版本,不一定直接等于上游号。
它进 KEV,是因为已经被人拿去用过了——而且不是单用。有安全通报提到,这条被和 PHP2Shell(CVE-2026-109618 / 109619)串在一起:先用 PHP 那个不需要登录的洞在机器上落一个网页后门,再靠这个内核洞拿 root。一个负责「进得来」,一个负责「待得住」,拼成一条完整的链。这种打法比单个高分洞难防——你盯着边界上那个门,人家打的是门里面那一段。
这周已经是第二个内核相关的洞了。前几天那个 CVE-2026-98432(TCP 竞态,9.8,当时补丁还没出) 走的是另一条路,但提醒的是同一件事:内核是最底下那一层,它出问题的时候,能拿来判断的信息往往最少。类似的处境还有 LMCache 那个 9.8 分、当时同样没补丁的洞——清单上出现不等于补丁到手,中间那段空窗怎么扛,才是真考验。
内核升级躲不开重启,这是它最烦人的地方。现在动不动,得看自己机器上有没有对外开的 PHP、有没有把敏感数据放在页缓存里跑的服务。真等被串起来打,那就不是「抽个窗口重启一下」能收场的事了。
原始来源:CISA KEV 目录 / GHSA-47jg-vqrv-5f8v(https://github.com/advisories/GHSA-47jg-vqrv-5f8v)
评论