通过未受门控的 CBS COM 方法实现本地权限提升——在 Windows 11 上从 medium-IL 到 SYSTEM 的任意文件写入
| 日期 | 事件 |
|---|---|
| 2026 年 7 月 22 日 | 向 MSRC 报告漏洞 |
| 2026 年 9 月 8 日 | Microsoft 修补 Windows Update 服务堆栈(9 月补丁星期二) |
| 2026 年 10 月 29 日 | MSRC 回应(见下文) |
基于组件的服务(CBS)会话 COM 对象在 TrustedInstaller.exe 内以 SYSTEM 身份运行,并且任何交互式用户都可以激活它。会话接口上的几乎所有方法在继续执行前都会调用 EnsureCallerIsAdministrator,唯独 CreateExternalTransformerExecutor 例外,它返回了一个低级别的 CSI 存储转换器执行器,且没有任何授权检查。
该执行器的 Initialize() 以 SYSTEM 身份运行,且没有进行模拟。一个 medium 完整性级别的调用者可以通过利用 NTFS 联接点和对象管理器符号链接,驱动 TrustedInstaller 在攻击者控制的路径上创建注册表配置单元日志文件,而创建这些链接不需要任何特殊权限。
CreateExternalTransformerExecutor结果: 从普通用户账户以 SYSTEM 身份向任意现有目录进行任意文件写入。无需管理员权限,无需特殊权限,无需用户交互。
MSRC 将我的报告评估为低严重性 / 纵深防御,称“所评估的概念验证未能证明对未授权位置的文件写入”。该案例因低于立即修复的门槛而被关闭,未发布额外的 CVE,未颁发赏金,MSRC 也不会进一步跟踪该问题——如果这是一个重复项,那也说得通。
该 PoC 从 medium-IL、非管理员进程向 C:\Windows\System32 写入攻击者控制的内容,并且在测试过的每个未修补版本上都能可靠地做到这一点。
对 MSRC 评估最可能的解释是时机问题:报告于 7 月提交,服务堆栈修复于 9 月发布,而 MSRC 的回应于 10 月到达,到那时该 PoC 在任何已更新的系统上确实会以 E_ACCESSDENIED 失败。
我确实被添加到了 MSRC 的特别致谢页面,所以至少还有这个 :)
我怀疑此处报告的漏洞已被 CVE-2026-81963(“Windows Update Stack Elevation of Privilege Vulnerability”)涵盖,该漏洞已在上述更新中修复,并描述了相同的漏洞类别(CWE-59 / CWE-284,CBS 服务栈中的链接跟随 + 不当访问控制)。该 CVE 被归功于 Romain Deperne(Airbus Helicopters)和 Microsoft Threat Intelligence Center(MSTIC),并已确认在补丁发布前已在野被积极利用。但是:我没有官方确认我的报告涵盖的是同一个问题。
两个 PoC 都必须以普通、非管理员用户(中等完整性)运行,并且包含相同的基础漏洞利用。如果你以提升的权限运行它们,漏洞利用会轻易成功,因为你已经拥有管理员权限,这完全偏离了重点。
PoC_Fun/带有 UI 的完整概念验证。一个 vibecoded 图形化测试框架,将漏洞利用技术封装在交互式界面中。适合演示,也适合所有不喜欢无聊的纯终端 PoC 的人(让 PoC 再次有趣!)
标题和横幅中使用的等宽哥特像素艺术字体由 nico_n_art 应我的委托创作。
构建:
$ cd PoC_Fun
$ dotnet clean -c Release && dotnet publish -c Release
$ .\bin\Release\net8.0-windows\win-x64\publish\TrustedHive.exe
用法: 只需双击发布版本,UI 会引导你操作,或使用“?”打开帮助菜单。
PoC_Boring/该漏洞利用的独立 C 文件。无 UI,除 ole32.lib 和 advapi32.lib 外无其他依赖。使用 MSVC 构建(cl /O2 ...),将其指向输入文件和输出路径,它就会完成相应操作。
构建:
$ cd PoC_Boring
$ cl /nologo /W3 /O2 TrustedHive_PoC.c ole32.lib advapi32.lib /link
$ .\TrustedHive_PoC.exe
用法:
$ .\TrustedHive_BoringPoC.exe <input_file> <output_path> [/keep]
<input_file> : file whose bytes are written to the target
<output_path> : destination (its parent directory must exist),
e.g. C:\Windows\System32\poc.dll
/keep : keep the Hidden+System attributes the Configuration Manager
stamps on the created hive-log file (default: clear them)
EvaluateApplicability 进行 dpx.dll 侧加载)
