《RegPwn分析和复现》

RegPwn-CVE-2026-24291

漏洞链接:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-24291

作者文章地址:https://www.mdsec.co.uk/2026/03/rip-regpwn/

1.介绍

MDSec 安全研究团队在进行红队演练(Red Team Engagements)时发现了一个 Windows 本地权限提升漏洞。该漏洞自 2025 年 1 月起就被 MDSec 用于内部红队行动,由于其利用方式优雅且缺乏明显检测指标,团队一直将其作为内部武器使用。直到微软在 2026 年 3 月的 Patch Tuesday 修复了该漏洞(CVE-2026-24291),MDSec 才决定公开披露

2.漏洞概述

RegPwn(CVE-2026-24291)是一个 Windows 辅助功能基础设施中的权限分配不当漏洞,影响 Windows 10、Windows 11 以及 Windows Server 2012、2016、2019、2022 和 2025 等多个版本

3.具体分析

Windows辅助功能

Windows 辅助功能是 Microsoft Windows 内置的一系列功能,旨在使操作系统对残障人士或特定可用性需求者更易于使用。这些功能通过键盘输入、语音、屏幕旁白、视觉调整和辅助技术,提供了与系统交互的替代方式。

已安装的无障碍功能列表定义在以下注册表键中:

1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATs

image-20260407220407001

其下的这些注册表则对应则Windows辅助功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
注册表项	对应的辅助功能	说明	
animations 动画效果设置 控制 Windows 动画显示
audiodescription 音频描述 为视频提供音频描述
caretbrowsing 光标浏览 在页面中使用光标键浏览
caretwidth 光标宽度 设置文本光标粗细
colorfiltering 颜色滤镜 色盲辅助滤镜
CursorIndicator 光标指示器 显示光标位置指示
cursorscheme 光标方案 鼠标指针样式设置
filterkeys 筛选键 忽略重复按键或短暂按键
focusborderheight 焦点边框高度 键盘焦点指示器高度
focusborderwidth 焦点边框宽度 键盘焦点指示器宽度
highcontrast 高对比度 高对比度主题
keyboardcues 键盘提示 显示键盘快捷键下划线
keyboardpref 键盘首选项 优先使用键盘而非鼠标
LiveCaptions 实时字幕 实时语音转文字字幕
magnifierpane 放大镜面板 屏幕放大工具
minimumhitradius 最小点击半径 触摸目标大小设置
mousekeys 鼠标键 用数字键盘控制鼠标
Narrator 讲述人 屏幕阅读器
Oracle_JavaAccessBridge Java 访问桥 Java 应用辅助功能支持
osk 屏幕键盘 On-Screen Keyboard
overlappedcontent 重叠内容 窗口重叠行为设置
showsounds 显示声音 用视觉提示代替声音
soundsentry 声音卫士 系统声音的视觉通知
SpeechReco 语音识别 语音输入功能
stickykeys 粘滞键 按顺序而非同时按组合键
togglekeys 切换键 切换键(如 Caps Lock)的声音提示
VoiceAccess 语音访问 语音控制电脑
windowarranging 窗口排列 窗口自动排列设置
windowtracking 窗口跟踪 焦点跟随设置
windowtrackingtimeout 窗口跟踪超时 跟踪延迟设置
windowtrackingzorder 窗口跟踪 Z 顺序 窗口层级跟踪设置

当使用这些Windows辅助功能(例如:旁白、屏幕键盘等)时,会创建以下注册表键,并赋予低权限用户完全控制:

1
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\<accessibility feature name>

当用户启用某个辅助功能(如屏幕键盘)时,Windows 会在注册表中创建相应的配置项来保存该功能的设置。

image-20260407223202396

image-20260407223312414

可以看到是完全控制权限

这些配置随后被复制到HKLM中的以下注册表密钥,该注册表由winlogon.exe在登录过程中创建,并赋予登录用户写入权限:

1
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session<session id>\ATConfig

image-20260407223552905

如何获得系统权限?

Windows 的无障碍功能在用户上下文中执行,尽管由于 UIAccess 标志,具有高完整性。显而易见的问题是,如何利用这些资源获得系统权限?

涉及到的Windows机制

这里先做一个简要介绍:

Windows 通过三个机制层层保护窗口安全:
IL(完整性级别) 给每个程序贴上”身份标签”——从低权限的浏览器沙盒,到高权限的管理员程序,再到核心的系统进程。低等级程序默认不能操控高等级程序。
UIPI(界面特权隔离) 基于 IL 实现”防骚扰”——阻止低权限程序向高权限窗口发送消息、读取内容或安装钩子,防止恶意软件伪造点击劫持银行转账等”粉碎攻击”。
UIAccess(特许通行证) 是打破隔离的例外——屏幕阅读器等辅助功能需要操控所有窗口,因此可通过数字签名+安全目录+清单声明获得跨等级操作权限

获得 UIAccess 的严格条件:
数字签名: 程序必须经过受信任机构的数字签名。
安装目录: 程序必须位于安全目录中(如 C:\Program Files 或 C:\Windows\System32)。
清单声明: 在 .manifest 文件中明确申请该权限,需要注意 .manifest 是嵌入在 exe 文件中的。

那么现在我们如何获得system权限呢??

安全桌面

答案就在安全桌面。安全桌面和用户桌面的主要区别在于,只有作为 SYSTEM 运行的受信任进程才被允许在此执行。换句话说,安全桌面上不存在任何以用户权限运行的进程

为什么这么设计呢?

是为了防止恶意软件(即使是高权限的)通过模拟点击来绕过安全确认,Windows 将界面划分成了不同的物理隔离区域,当你在用户桌面(Session 1)运行一个需要管理员权限的安装包时,系统发出提权请求,Winlogon 立即切换当前的活动桌面,将显示输出切换到安全桌面,你在安全桌面上点击“确定”后,Winlogon 再将控制权切回用户桌面。

当用户通过选项锁定工作站(WIN+L)或“以管理员身份运行” 运行进程创建安全桌面会话(弹出 UAC确认窗口)时,将会启动两个atbroker.exe进程,一个在当前用户上下文运行,另一个作为系统账户运行。

作为低权限用户运行的ATbroker.exe进程将再次复制所有配置HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk

到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session\ATConfig\osk

image-20260407230650848

作为SYSTEM账户运行的ATbroker.exe进程将继续复制HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session1\ATConfig\osk

到HKU.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk

image-20260407230740493

最后,启动一个以 SYSTEM 名义运行的 osk.exe 进程实例,并复制 以下值HKU\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk

到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session\ATConfig\osk

4.攻击流程

第一步:准备攻击环境

1
2
3
4
5
6
# 1. 获取当前会话 ID
从访问令牌获取 Session ID

# 2. 启动隐藏的 osk.exe 并等待 5 秒
创建隐藏的屏幕键盘进程,确保系统后续会触发 oplock

第二步:创建注册表项

创建一个注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk
并添加一个想覆盖高权限注册表项的值,比如:HKLM\SYSTEM\ControlSet001\Services\msiserver

第三步:设置机会锁

1
2
3
4
5
# 在 oskmenu.xml 文件上设置 oplock!
C:\Program Files\Common Files\microsoft shared\ink\fsdefinitions\oskmenu.xml

这是屏幕键盘的 UI 定义文件,osk.exe 启动时会读取它

第四步:触发机会锁

通过 API 创建安全桌面来触发这个机会锁

一旦触发了 oplock,将注册表密钥替换为指向任意注册表密钥的注册表链接。 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session<session id>\ATConfig\osk

第五步:system的流程

1
2
3
4
5
6
7
8
9
10
atbroker.exe (SYSTEM) 尝试复制配置

读取 HKCU\...\ATConfig\osk(包含恶意 ImagePath)

写入 HKLM\...\Session<ID>\ATConfig\osk

实际通过符号链接写到 HKLM\...\Services\msiserver

服务配置被篡改,ImagePath 指向恶意程序

第六步:清理与执行

1
等待 5 秒后删除注册表符号链接(清理痕迹)

实际上这里就能看出来,这个权限提升漏洞的核心就是低权限用户任意注册表写入。而这个漏洞的作者给了最实质的一个攻击链条

1
2
3
4
5
6
7
8
9
10
11
12
1. 创建恶意配置  ──►  HKCU\...\ATConfig\osk

2. oplock 触发,符号链接替换目标

3. SYSTEM 进程复制配置 ──► 实际写入 HKLM\...\Services\msiserver

4. 服务配置被篡改:ImagePath = "恶意的服务程序

5. 创建 MSI COM 对象 ──► 启动 msiserver 服务

6. 服务以 SYSTEM 执行服务

image-20260408112145100

image-20260408112221700

实现手法

1
2
3
4
5
6
7
1.
RegPwn_yawataa.exe --regKey HKLM\SYSTEM\ControlSet001\Services\msiserver --regValueName ImagePath --regValueData "C:\Windows\System32\cmd.exe /c Kharon.x64.exe" --regValueType REG_EXPAND_SZ

注意这里的kharon.x64.exe最好改成绝对路径
# 2. 启动服务()
sc start msiserver

5.后言

我的c语言代码,原作者的代码是c#实现的,但是我个人用c实现了一次,有点画蛇添足,因为这个c#写的就可以用CRL机制内存执行了。后期可能我会写一个bof版本吧。

参考文章:

https://www.mdsec.co.uk/2026/03/rip-regpwnc/

https://mp.weixin.qq.com/s/rULYChYHUKd8TZJW8nBFfQ


《RegPwn分析和复现》
http://example.com/2026/04/08/《RegPwn分析和复现》/
Author
John Doe
Posted on
April 8, 2026
Licensed under