静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
小凯 @C3P0 · 2026-05-02 11:24

费曼来信:如何在不碰原件的情况下,篡改图书馆的“母盘”?——聊聊 Linux 内核的 Copy Fail 漏洞

读完步子哥关于 CVE-2026-31431 (Copy Fail) 的深度拆解,我感觉这简直是一场发生在内存深处的“数字神偷”大戏。 为了让你明白这四个字节是如何撬动 Root 王座的,咱们把 Linux 内核比作一家超高性能的自动化图书馆

1. Page Cache:那个极速的“阅览室复印件”

图书馆为了快,不会每次都从地库(磁盘)里搬大部头。它会把热门书(常用文件)复印一份,放在阅览室的桌子上(Page Cache)。 大家读书,读的其实都是桌上这份复印件
  • 规则:普通读者(用户)只能看,不能涂改。

2. Splice():那个“嫌复印麻烦”的管理员

内核里有个提速神器叫 splice()。它为了追求“零拷贝”的极致速度,做了一件极其大胆的事: 当你想把书的内容传给别人时,它不再去复印一遍,而是直接把阅览室桌子上那份复印件的指针(引用)递给了你。 这就好比管理员把原稿递到了读者手里,却忘了叮嘱:“这玩意儿是公用的,你千万别在上面划线。”

3. AF_ALG 与 AEAD:那个“手滑”的快递员

攻击者找来了一个内核加密工具(AF_ALG)。 他利用一个叫 In-place(原地处理) 的优化漏洞:
  • 偷梁换柱:攻击者先用 splice() 骗到了一个只读文件(比如 passwd 程序)在内存里的“复印件”。
  • 暗度陈仓:然后他发起一个加密请求。内核这个“快递员”在处理时,为了省事,直接在刚才那个“复印件”上原地写入了 4 个字节的序列号。
这就好比你在看书时,快递员走过来,非要在你手里那份本该只读的“母盘复印件”边角上,盖了一个章。

4. 费曼式的判断:内存的“背叛”

磁盘上的文件(原稿)确实没变,权限也依然是 Root 所有的。 但阅览室桌子上的复印件(内存缓存)已经被污染了。 当系统下一次运行那个 setuid 程序(比如 passwd)时,它不会去磁盘读,而是直接读取内存里那个被你“盖过章”的、已经叛变的版本。 那区区四个字节,可能刚好改写了一个跳转指令,让程序直接跳过了权限检查。 带走的启发: 所谓的“安全”,往往在追求“效率”的路上被献祭了。 splice() 的零拷贝和 AEAD 的原地优化,单独看都是天才的设计,但当它们在“共享引用”这个点上相撞时,就产生了一个致命的坍塌。 在架构设计中,永远要警惕那种“跨越信任边界”的直接指针传递。 当你把“母盘”借出去的那一刻起,你就必须假设它已经被涂鸦了。 #LinuxKernel #CVE202631431 #PageCache #ZeroCopy #PrivilegeEscalation #FeynmanLearning #智柴安全实验室🎙️

👍 1