as-user 欺骗 → 授权绕过 → 根上下文挂载 → LPECVE-2026-7867 是 udisks2 中的一个本地权限提升漏洞,涉及 Filesystem.Mount D-Bus 方法、as-user 选项、fstab 管理的挂载流程以及存在缺陷的授权处理。
此私有仓库包含在受控实验室环境中验证该问题所使用的技术研究笔记和 PoC 脚本。
该漏洞由以下人员发现并报告:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
该问题已被分配编号:
CVE-2026-7867
该漏洞源于真实 D-Bus 调用者 UID 与由 as-user 挂载选项计算得出的有效 UID 之间存在有缺陷的信任关系。
在易受攻击的流程中,无特权的本地用户可影响挂载执行路径,从而在未触发预期 PolicyKit 授权行为的情况下,以特权/根上下文执行文件系统挂载。
该核心漏洞并不仅仅是“用户可控的挂载选项”。
真正的问题在于:
udisks2在 fstab 挂载授权和执行期间,无法始终如一地区分原始调用者身份与计算得出的as-user身份。
| 字段 | 值 |
|---|---|
| CVE | CVE-2026-7867 |
| 产品 | udisks2 |
| 组件 | Filesystem.Mount |
| 攻击类型 | 本地权限提升 |
| 原语 | as-user 欺骗 |
| 安全边界 | D-Bus 调用者身份 → 特权挂载执行 |
| 授权层 | PolicyKit / fstab 挂载授权 |
| 厂商 | Red Hat / udisks 上游 |
| 状态 | 补丁开发中 / 协同披露 |
| 计划修复版本 | udisks 2.11.2 |
易受攻击的逻辑与 udisks2 内部的 fstab 挂载处理路径相关,尤其是当挂载请求涉及以下内容时:
Filesystem.Mount
as-user
x-udisks-auth
user
users
相关的安全敏感区域包括:
D-Bus caller identity
↓
as-user option handling
↓
fstab authorization logic
↓
PolicyKit decision flow
↓
root-context mount execution
┌─────────────────────────────┐
│ Unprivileged Local User │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ with as-user influence
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ privileged system daemon │
└──────────────┬──────────────┘
│
│ fstab logic evaluates
│ user/auth options
▼
┌─────────────────────────────┐
│ Authorization Gap │
│ mount_other_user not │
│ enforced in skipped path │
└──────────────┬──────────────┘
│
│ root-context branch reached
▼
┌─────────────────────────────┐
│ Filesystem Mounted │
│ without expected auth flow │
└──────────────┬──────────────┘
│
│ impact depends on mount flags
▼
┌─────────────────────────────┐
│ Local Privilege Escalation │
│ controlled lab validation │
└─────────────────────────────┘
易受攻击的行为源于一个身份混淆缺陷。
系统存在多个身份概念:
real D-Bus caller UID
computed as-user UID
effective mount UID
udisksd daemon privilege context
易受攻击的流程未能一致地强制执行这些身份。
具体而言:
as-user,mount_other_user 可能变为 truex-udisks-auth、user 或 users 等 fstab 选项可能影响授权路径mount_other_user 检查无法得到可靠执行结果是本地权限边界被绕过。
x-udisks-auth 问题x-udisks-auth 选项本应强制实施管理性 PolicyKit 授权流程。
预期行为:
mount request
↓
attempt mount as caller
↓
permission/auth failure
↓
PolicyKit filesystem-fstab check
↓
admin approval
↓
mount as authorized privileged action
易受攻击的行为:
mount request with as-user influence
↓
computed identity affects execution
↓
mount succeeds too early
↓
PolicyKit auth path is not reached as expected
↓
privileged mount state is achieved
这使得易受攻击路径中围绕 x-udisks-auth 的安全模型变得不可靠。
预期模型:
Unprivileged user
↓
D-Bus mount request
↓
PolicyKit / fstab authorization
↓
restricted mount behavior
被破坏的模型:
Unprivileged user
↓
D-Bus mount request with as-user spoofing
↓
authorization logic mismatch
↓
root-context mount execution
该漏洞尤其严重,因为受影响的进程以提升的特权运行。
成功利用可能允许本地无特权用户通过 udisks2 在根上下文执行路径中挂载文件系统,而无需预期的授权提示。
根据文件系统和挂载标志的不同,影响可能包括:
这是一个本地漏洞。
相关条件包括:
| 条件 | 是否必需 |
|---|---|
| 本地用户访问 | 是 |
存在漏洞的 udisks2 版本 | 是 |
存在 as-user 功能 | 是 |
| 合适的 fstab 管理挂载目标 | 是 |
| 存在漏洞的授权路径 | 是 |
| 远程访问 | 否 |
.
├── README.md
├── disk2root.sh ← main exploit (self-contained LPE)
└── poc/
├── setup_lpe_env.sh ← lab environment setup
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.sh自包含的武器化利用脚本。构建自己的 SUID root 载荷,创建预制磁盘镜像,通过 as-user=root polkit 绕过进行挂载,并进入 root shell。
选项 1 — 以 root 身份运行(在任何环境下均有效,包括 SSH):
./disk2root.sh
该脚本会自动:
debugfs 以 uid=0 mode=4755 注入该二进制文件x-udisks-auth 的 fstab 条目su 切换到无特权用户as-user=root 调用 Filesystem.Mount(polkit 绕过)如需指定从哪个用户进行提权:
./disk2root.sh testuser
如果未指定用户,脚本会选择系统上第一个常规用户,或创建一个临时用户。
选项 2 — 以无特权用户身份运行(桌面 / 活动会话):
./disk2root.sh
在具有活动 polkit 会话的系统上(桌面登录、GNOME/KDE),该脚本完全自包含——它通过 udisksctl 或 D-Bus LoopSetup 创建自己的 loop 设备,通过 as-user=root 挂载,无需任何预先设置即可提权。
选项 3 — 以无特权用户身份运行(SSH,完成设置后):
如果环境已经准备就绪(例如通过以 root 身份运行 poc/setup_lpe_env.sh,或之前以 root 身份运行过 ./disk2root.sh),任何无特权用户都可以再次利用:
./disk2root.sh
该脚本会自动检测存在漏洞的 fstab 条目并使用它们。
./disk2root.sh --cleanup
移除所有产物:fstab 条目、loop 设备、挂载点、临时用户。
当以无特权身份运行时,脚本会按顺序尝试多种路径:
[A] Self-contained
build payload → create ext4 image → debugfs inject SUID binary
→ loop-setup (python3 GIO / udisksctl) → mount as-user=root
✓ works on desktop sessions
[B] Fstab fallback
scan /etc/fstab for x-udisks-auth / user / users entries
→ mount as-user=root → find SUID binary on mounted fs
✓ works on SSH when environment is prepared
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: not set
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ dropping into root shell — type 'exit' to return ║
╚═════════════════════════════════════════════════════════╝