跳至正文
Wener Notes

CVE-2022-2602

约 3 分钟阅读
  • io_uring UAF - io_uring 与 Unix 域套接字垃圾回收之间的竞态,造成释放后使用
    • UAF / Use After Free / 释放后使用
  • 公开披露:2022-10-18(oss-security);CVE/NVD 记录在 2024-01-08 才公开
  • 本地攻击者可导致内核崩溃或利用内存破坏提升权限
  • 严重性存在不同评估
    • NVD:CVSS 3.1 7.0 High,AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
    • Canonical CNA:CVSS 3.1 5.3 Medium,AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
  • CWE:CWE-416(释放后使用)

成因与利用条件

  • io_uring 注册的文件仍被异步请求使用时,Unix 域套接字的垃圾回收可能先释放 io_uring 文件描述符及其关联的注册文件
  • 回收顺序使注册文件在 io_uring 完成注销并等待请求结束之前被释放,后续请求继续访问已释放对象
  • 需要本地执行能力,能够访问 io_uring 及相关 Unix socket 路径,并安排请求与回收之间的竞态
  • userfaultfd 是原始公告提及的一种控制等待时机的方法;还有类似策略,单独限制它不能等同于修复漏洞

影响范围与修复

  • 原始公告确认上游 5.4.y、5.15.y 及后续相关版本受影响
  • 5.10.y 的其他修改可能缓解某些路径,但公告仍建议应用修复
  • 主线修复进入 6.1-rc1:0091bfc81741
    • io_uring/af_unix: defer registered files gc to io_uring release
    • 将注册文件的回收推迟到 io_uring 释放阶段,保证使用中的请求先结束
  • 旧稳定分支与发行版另有回补,不能用「所有低于 6.1 的内核」统一判断
    • Debian 11 bullseye 的 linux 源码包修复版本为 5.10.149-1
    • 这是 Debian 包版本,不是所有发行版通用的上游修复下限
  • 安装对应发行版的安全更新,确认实际运行的内核已包含补丁
  • 如业务不使用 io_uring,可通过运行环境支持的系统调用过滤限制其访问;缓解效果取决于覆盖的进程范围,不能替代内核更新

PoC

  • LukeGix/CVE-2022-2602 提供 userfaultfd 与 inode locking 两种利用实现
  • 两种实现都围绕「请求仍在使用文件时,垃圾回收已释放该文件」安排时序;使用哪种等待手段会影响环境要求
  • 原理示意:
text
请求路径:注册文件 F -> 提交异步请求 -> 请求等待
回收路径:Unix socket GC -> 提前释放 F
请求路径:继续处理 -> 访问已经释放的 F
  • 复现关注异步请求与回收之间的生命周期错误;一次崩溃不等同于已经证明提权
  • 仓库提供的是利用程序,内存破坏和提权行为需要结合具体实现检查,不能作为无副作用的版本检测器

参考

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • CVE-2026-43121
    笔记 · CVE-2022-2602

    iouring ZCRX freelist - 零拷贝接收路径的引用计数竞态,使同一缓冲区重复进入空闲列表并造成越界写 · CVE 记录公开:2026-05-06 · 上游引入版本:Linux · 严重性:CVSS 3.1 (NVD) · -

参考资料

GitHub2 条
其他外链6 条
最近更新commit 0c5208b编辑