一个 732 字节的 Python 脚本,研究方称可在多个主流 Linux 发行版上稳定拿到 root。
这个数字很抓眼球。但真正麻烦的不是脚本短,而是它打到的位置太底层:Linux 内核、AF_ALG、splice()、页缓存、setuid binary。
CVE-2026-31431 被命名为 Copy Fail。它不是远程漏洞,不会从公网凭空钻进机器。它需要一个本地代码执行落点:普通账户、容器里的代码、CI 里跑起来的恶意 PR,或者 Web RCE 之后拿到的低权限 shell。
问题也在这里。今天很多基础设施本来就在替别人运行代码。
它到底能做什么
Copy Fail 来自 Linux 内核 crypto/AF_ALG 路径里的逻辑缺陷。研究方描述的关键组合是 AF_ALG 与 splice()。
结果是,本地非特权用户可以对页缓存产生 4 字节可控写。再借由 setuid binary,这 4 字节足够把普通用户抬到 root。
这里要压住一个边界:这不是“远程直接拿 root”。它是权限放大器。攻击者必须先能在目标环境里跑代码。
| 问题 | 关键信息 | 对防守方的含义 |
|---|---|---|
| 漏洞能力 | 本地非特权触发,改写页缓存,进一步提权 | 重点看谁能在机器上执行代码 |
| 技术锚点 | AF_ALG、splice()、页缓存 4 字节可控写、setuid binary | 打在内核与文件执行路径交界处 |
| 影响范围 | 研究方称影响 2017 年以来大量主流发行版内核,并验证 Ubuntu、Amazon Linux、RHEL、SUSE 等 | 不能按发行版名称粗判,要看内核与补丁状态 |
| 修复方向 | 更新包含 mainline commit a664bf3d603d 的内核 | 多租户与执行不可信代码的环境应优先排期 |
| 临时缓解 | 禁用 algif_aead,或用 seccomp 阻断 AF_ALG | 适合补丁窗口期降风险 |
它和 Dirty Pipe、Dirty Cow 属于同一个让安全团队头疼的家族:页缓存被破坏,磁盘文件不一定落盘改变,但内核执行路径已经读到了被污染的内容。
差别在于,研究方强调 Copy Fail 无 race,不需要抢时间窗口;也不依赖特定发行版偏移,迁移性更强。
这才是它不能被一句“又一个 Linux LPE”带过的原因。Linux 本地提权漏洞不少,但“无需竞争、跨发行版、页缓存破坏、可作为容器逃逸原语”叠在一起,并不常见。
谁最该紧张
风险不该平均摊给每台 Linux 机器。
单用户桌面、单租户服务器当然要修。但在这些环境里,它更像后渗透阶段的升级工具:攻击者已经能跑代码,再往 root 走一步。
真正压力在共享内核场景。
| 场景 | 为什么风险更高 | 现在该做什么 |
|---|---|---|
| 多租户 Linux 主机 | 多个用户共享同一内核,普通用户落点可能变 root | 优先确认内核补丁或隔离策略 |
| Kubernetes / 容器集群 | 容器共享宿主机内核,边界依赖内核正确性 | 不可信 workload 先收紧 syscall 面 |
| CI runner / 构建农场 | 主动执行外部代码、PR 代码、依赖脚本 | 暂缓把不可信任务放进高权限共享 runner |
| 自托管构建环境 | 很多团队隔离弱于公有云托管环境 | 检查 runner 权限、复用策略和补丁窗口 |
| 运行用户代码的云服务 | Notebook、沙箱、serverless、agent 环境给租户代码落点 | 将内核更新列入高优先级变更 |
我更在意 CI 和容器。
很多团队说“不执行不可信代码”,流水线却每天拉依赖、跑测试、构建镜像、处理外部贡献。供应链安全不只看包管理器里有没有恶意库,还要看恶意代码一旦跑起来,底层环境能不能关住它。
容器也是同一笔账。容器隔离长期依赖一个前提:大家共享内核,但内核足够可靠。这个前提不是错,只是成本被藏起来了。
“天下熙熙,皆为利来。”云平台、CI 服务、容器编排押注共享内核,因为它便宜、快、密度高。Copy Fail 这种漏洞提醒的是另一面:省下的隔离成本,会以补丁压力、应急窗口和租户边界风险的形式回来。
最相关的两类人,动作应该很具体。
云平台和 Kubernetes 运维负责人,不该只等发行版大版本升级。要核对当前内核包是否已回补相关修复,确认不可信 workload 是否还能创建 AF_ALG socket。
CI/CD 负责人也要调整策略。共享 runner 上跑外部 PR、第三方构建脚本和未审计依赖时,临时降权、隔离 runner、缩短复用周期,比单纯写一条“禁止恶意代码”有用得多。
接下来该看什么
别被“732 bytes”“100% reliable”“every distro”这类词带着跑。
安全研究需要传播,漏洞命名也需要记忆点。但防守方不能把营销表达当成资产清单。
更稳的说法是:在研究方验证和声明范围内,Copy Fail 表现出较高稳定性和可移植性。你的环境是否中招,要看内核版本、发行版是否 backport、模块配置、seccomp 策略,以及 setuid binary 暴露情况。
接下来最该看四件事:
- 发行版安全公告是否已经给出修复包,尤其是企业版内核的 backport 状态。
- 当前内核是否包含 mainline commit
a664bf3d603d或等价回补。 algif_aead是否可用,不可信 workload 是否能访问 AF_ALG。- CI runner、容器节点、多租户主机是否存在长期复用和高权限执行链。
短期处置也不复杂。
能更新内核,就尽快更新到包含相关修复的版本。补丁窗口没到,评估禁用 algif_aead。对不可信 workload,用 seccomp 收紧 AF_ALG 相关能力。
不要在生产环境里复现 PoC。也不要把“验证漏洞”变成新的攻击面。对多数团队来说,确认补丁状态和收紧执行边界,比追着复现细节更有价值。
Copy Fail 照出来的是一条老线:我们把越来越多不可信代码塞进同一个共享内核里,然后希望边界永远干净。
技术上可以这么做。商业上也划算。安全上,这笔账从来没有消失。
