《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 | |

其下的这些注册表则对应则Windows辅助功能
1 | |
当使用这些Windows辅助功能(例如:旁白、屏幕键盘等)时,会创建以下注册表键,并赋予低权限用户完全控制:
1 | |
当用户启用某个辅助功能(如屏幕键盘)时,Windows 会在注册表中创建相应的配置项来保存该功能的设置。


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

如何获得系统权限?
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

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

最后,启动一个以 SYSTEM 名义运行的 osk.exe 进程实例,并复制 以下值HKU\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk
到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session
4.攻击流程
第一步:准备攻击环境
1 | |
第二步:创建注册表项
创建一个注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk
并添加一个想覆盖高权限注册表项的值,比如:HKLM\SYSTEM\ControlSet001\Services\msiserver
第三步:设置机会锁
1 | |
第四步:触发机会锁
通过 API 创建安全桌面来触发这个机会锁
一旦触发了 oplock,将注册表密钥替换为指向任意注册表密钥的注册表链接。 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Session<session id>\ATConfig\osk
第五步:system的流程
1 | |
第六步:清理与执行
1 | |
实际上这里就能看出来,这个权限提升漏洞的核心就是低权限用户任意注册表写入。而这个漏洞的作者给了最实质的一个攻击链条
1 | |


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