Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-41651 — 通过 PackageKit 的 TOCTOU 竞态条件实现本地权限提升。 | Kitploit
工具/GitHubGitHub/gbuyssens/cve-2026-41651
权限提升漏洞分析漏洞利用CTF渗透测试
GitHubgbuyssens/cve-2026-41651

CVE-2026-41651

通过 PackageKit 的 TOCTOU 竞态条件实现本地权限提升。

查看仓库
18天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-41651

root@kitploit:~
CVSS 3.x : 7.8 HIGH
CWE      : CWE-367 (Time-of-Check Time-of-Use)
Fix      : PackageKit 1.3.5+
Affects  : PackageKit 1.0.2 – 1.3.4

通过 PackageKit 的 D-Bus 事务处理器中的 TOCTOU 竞态条件实现本地提权。
任何无特权的本地用户都可以以 root 身份安装任意软件包——除了拥有本地会话外,无需任何身份验证。

仅限实验室 / 授权测试(HTB、CTF、或具有书面授权的渗透测试)。


使用方法

root@kitploit:~
python3 exploit.py

就这样。它会释放 /tmp/.suid_bash,然后 exec 进入 root shell。

自定义 SUID 路径或超时时间:

root@kitploit:~
SUID_BIN=/dev/shm/.sh TIMEOUT=90 python3 exploit.py

依赖

root@kitploit:~
apt install python3-gi dpkg-dev

该漏洞利用程序会在运行时构建两个 .deb 软件包——无需编译器。


根因

src/pk-transaction.c 中的三个 Bug 串联在一起:

Bug 1 —— 无条件覆盖标志

InstallFiles() 在不检查状态的情况下覆盖 cached_transaction_flags 和 cached_full_paths。同一事务上的第二个 D-Bus 调用会盲目替换它们——即使该事务已经在运行中。

Bug 2 —— 静默状态机保护

pk_transaction_set_state() 会拒绝非法的向后状态转换(RUNNING→READY 等),但不会回滚 Bug 1 中被覆盖的标志。被破坏的标志因此得以保留。

Bug 3 —— 延迟读取标志

pk_transaction_run() 在调度时(GLib idle)而不是在授权时读取 cached_transaction_flags。后端看到的是攻击者的标志。

附加 —— SIMULATE 绕过 polkit

设置 PK_TRANSACTION_FLAG_SIMULATE (0x4) 会完全跳过 polkit 授权检查。第 1 次调用无需用户交互即可获得授权。


攻击链

root@kitploit:~
Attacker                         packagekitd
   │                                  │
   │  CreateTransaction()             │  state = NEW
   │─────────────────────────────────►│
   │                                  │
   │  InstallFiles(SIMULATE, dummy)   │  polkit skipped (SIMULATE)
   │─────────────────────────────────►│  state = READY, idle queued
   │                                  │
   │  InstallFiles(NONE, payload)     │  flags+paths overwritten
   │─────────────────────────────────►│  set_state(WAITING_FOR_AUTH) rejected
   │                                  │  state stays READY (BUG 2)
   │                                  │
   │                      [idle fires]│
   │                                  │  pk_transaction_run() reads NONE (BUG 3)
   │                                  │  → dpkg installs payload as root
   │                                  │  → postinst: chmod +s /tmp/.suid_bash
   │                                  │
   │  execv("/tmp/.suid_bash -p")     │
   │─────────────────────────────────►│  euid=0(root)

两次调用都会在 GLib idle 触发之前到达——无需争抢竞态,结果是确定性的。


受影响系统

Ubuntu Desktop 18.04–26.04、Debian Trixie、Fedora 43、RockyLinux 10.1,以及任何随附 PackageKit 1.0.2–1.3.4 且守护进程处于活动状态的发行版。


修复方案

  1. 升级到 PackageKit 1.3.5+
  2. 如果无法升级,请屏蔽该服务:systemctl mask packagekit
  3. 该修复添加了一个状态守卫:transaction->state != PK_TRANSACTION_STATE_NEW → 拒绝

参考链接

  • NVD — CVE-2026-41651
  • GitHub Advisory — GHSA-f55j-vvr9-69xv
  • 修复提交
下载工具