CVE-2022-2602
- 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
- NVD:CVSS 3.1
- 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:0091bfc81741io_uring/af_unix: defer registered files gc to io_uring release- 将注册文件的回收推迟到 io_uring 释放阶段,保证使用中的请求先结束
- 旧稳定分支与发行版另有回补,不能用「所有低于 6.1 的内核」统一判断
- Debian 11 bullseye 的
linux源码包修复版本为5.10.149-1 - 这是 Debian 包版本,不是所有发行版通用的上游修复下限
- Debian 11 bullseye 的
- 安装对应发行版的安全更新,确认实际运行的内核已包含补丁
- 如业务不使用 io_uring,可通过运行环境支持的系统调用过滤限制其访问;缓解效果取决于覆盖的进程范围,不能替代内核更新
PoC
LukeGix/CVE-2022-2602提供 userfaultfd 与 inode locking 两种利用实现- 两种实现都围绕「请求仍在使用文件时,垃圾回收已释放该文件」安排时序;使用哪种等待手段会影响环境要求
- 原理示意:
请求路径:注册文件 F -> 提交异步请求 -> 请求等待
回收路径:Unix socket GC -> 提前释放 F
请求路径:继续处理 -> 访问已经释放的 F
- 复现关注异步请求与回收之间的生命周期错误;一次崩溃不等同于已经证明提权
- 仓库提供的是利用程序,内存破坏和提权行为需要结合具体实现检查,不能作为无副作用的版本检测器
参考
- 原始公告:CVE-2022-2602 - Linux kernel io_uring UAF
- Ubuntu 安全跟踪
- Debian 安全跟踪
- NVD CVE-2022-2602
- CVE 官方记录
- Linux 上游修复
0091bfc81741 - LukeGix/CVE-2022-2602
- 包含 userfaultfd 与 inode locking 两种复现实现
- poc_inode_locking.c - inode locking 路径