CVE-2026-49176深度解析:WindowsWalletService本地提权链

admin 2026-09-22 05:42:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档深度解析CVE-2026-49176,WindowsWalletService本地提权链。漏洞源于服务以调用者身份解析Documents路径后切换至SYSTEM打开数据库,结合ESE持久化回调机制,普通用户可构造恶意数据库实现提权。分析覆盖影响范围、触发条件及修复建议,强调版本基线核对与登录策略评估。 综合评分: 88 文章分类: 漏洞分析,红队,渗透测试


CVE-2026-49176 深度解析:Windows WalletService 本地提权链

Ots安全

2026年9月20日 13:22 广东

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

威胁简报

恶意软件

漏洞攻击

4.3 触发只用到一次枚举调用

触发侧用到的是公开接口,次序是 WalletManager.RequestStoreAsync() 取得存储对象,随后调用 GetItemsAsync()。

按常规用法,GetItemsAsync() 是在枚举钱包条目。研究者的观察是,服务初始化会在条目枚举正常完成之前先打开数据库并访问 Cards 表,因此这一次调用已经足够。

触发脚本会把原始的 Documents 位置记下来,改成攻击者控制的运行根目录,并在一个 finally 块里恢复原状。

恢复动作不依赖利用是否成功。 无论跑在漏洞版本、修复版本,还是利用失败,配置都会回到原位。这个设计降低了它在目标机上留下的持久痕迹,同时也说明研究者把”不改变目标状态”当成了交付标准。

4.4 第一级证明落在受保护文件里

第一版回调载荷被刻意做成非交互式:它把自己的进程身份写进一个受保护文件。研究者保存的运行记录是:

event=DLL_PROCESS_ATTACHpid=6232user=SYSTEMimage=C:\Windows\System32\svchost.exe

这个文件的所有者是 NT AUTHORITY\SYSTEM。从低权限账户直接向同一受保护目录写入的尝试会失败并返回访问被拒绝。

这组对照排除了两种误读。 一是父进程假设,即认为写出这些内容的可能是触发者自己;二是低完整性标记,即认为文件可能是由触发进程以某种方式凑出来的。能往 SYSTEM 属主目录里写东西的,只有 SYSTEM 身份的代码。

这一级的价值在于它把”代码在服务宿主内执行”从推断变成了留痕证据,而不需要依赖屏幕上出现一个命令行窗口。

4.5 第二级证明把令牌搬进交互会话

在服务宿主内获得代码执行,与在交互桌面上拿到一个命令行,是两件事。研究者把这两件事分开处理了。

回调载荷先校验自己的令牌是否为 WinLocalSystemSid,确认后创建一个指向投递组件的临时服务,启动它,随即删除服务注册。投递组件因此拿到一个常规的 LocalSystem 服务令牌,具备投递到桌面所需的权限。随后的动作是:用 WTSGetActiveConsoleSessionId 与 WTSEnumerateSessionsW 找到活动的交互会话,把 SYSTEM 令牌复制为主令牌,把 TokenSessionId 改为该会话,选择 winsta0\default,再调用 CreateProcessAsUserW 启动 cmd.exe。

研究者注明,无管理员权限的验证过程在运行结束后没有留下临时服务残留,最终得到的 shell 运行在会话 1,身份为 NT AUTHORITY\SYSTEM。

链条每一段各自承担一个可独立验证的声明,研究者自己列了这张对应关系:调用者控制 Documents 映射,说明用户控制服务使用的父目录;预置的 wallet.db,说明用户控制服务消费的 schema;持久化回调被解析,说明引擎在 SYSTEM 宿主内加载了攻击者选定的模块;回调内的身份校验,确认代码确实以 LocalSystem 执行;临时投递服务,取得一个干净的服务令牌用于桌面投递;会话感知的 CreateProcessAsUserW,产出可见的 SYSTEM 命令行。

这个分层方式值得单独记一笔。 它把一个容易混作一团的结论拆成了六个各自可以否证的声明,任何一段不成立时,读者能准确知道断在哪里。

五、补丁分析:五个提前返回的函数

5.1 修复被放在一个服务特性开关上

研究者对修复前后两个构建做了补丁比对,把修复定位到一个服务特性上:

Feature_Servicing_WalletServiceRedirectionGuardinternal feature ID: 3305877819

这属于研究者单方给出的结论,本文无法独立复核该特性名与编号。能否复核的部分是结果:厂商清单里 Windows 11 25H2 的修复构建号是 10.0.26200.8875,与研究者用作对照的版本一致。

“修复被放在一个特性开关上”这个说法本身值得留意。 它的含义是修复的形态偏向于关停旧路径,而不是在旧路径里补一段校验。

5.2 哪些操作被跳过

研究者列出修复构建里被守卫的五个操作:

| 函数 | 修复后的行为 | | — | — | | WalletDatabaseESE::Open | 在打开 ESE 数据库之前返回 | | ServerUtils::HideAndRestrictFolder | 跳过旧版文件夹限制 | | RestrictFolder | 跳过对目录访问控制列表的替换 | | FileUtils::DeleteFiles | 跳过旧版清理删除 | | WalletDatabaseESE::HandleDatabaseCorruption | 跳过损坏清理 |

从这份清单能读出的因果很直接:数据库不再被打开,回调就不会被解析,模块就不会被加载。 这是一条有效切断,因为链条的其余部分都挂在这一步之后。

5.3 修复后仍留下的那部分

研究者给了一个精确的前后差异,这一处特别值得抄下来。

在漏洞构建 26200.8737 上,一次 GetItemsAsync() 会让 LocalSystem 创建一个 <选定父目录>\Wallet\,把该子目录的访问控制列表替换为 SYSTEM 与 Administrators 完全控制,并创建完整的一套 ESE 文件,包括 edb.chk、edb.log、edbres00001.jrs、edbres00002.jrs、edbtmp.log、wallet.db 与 wallet.jfm。

在修复构建 26200.8875 上,同一次调用只创建一个空的 Wallet 目录,权限为继承,没有 ESE 文件出现,也没有施加限制性访问控制列表。

研究者对此的说明是,目录的创建发生在被守卫的 ESE 打开之前,因此修复后仍会留下一个空目录。

一条看起来”没修干净”的残留,其实是守卫位置的结果,不是漏修。 它的实际意义是给排查留下了一个可观察的前后差异:修复后仍可能出现空 Wallet 目录,但其中不应出现任何 ESE 文件。

5.4 判读补丁层时的边界

本篇在补丁这一层有一定局限,需要写明。

组件是闭源的,没有公开的补丁提交可逐行比对。上面五个函数的修复后行为清单,以及特性名与内部编号,全部来自研究者的比对结论,本文无法在公开材料范围内复核。因此本章的表述方式一律是”研究者给出的比对结论为”,而不是”修复方式是”。

这一点直接限制了可下的结论:本文能确认的是修复已随 7 月更新发布、修复构建号是多少、修复后差异是什么;本文不能确认的是补丁修改了哪几行、该特性开关的默认状态与启用条件。 后者如果由第三方逆向另行验证,结论可能更细。

5.5 同一组件在 2026 年的三条提权编号

WalletService 在同一年的七个月里被记入三条提权编号,全部来自厂商清单,可逐条核对。

| 编号 | 发布日 | 向量要点 | | — | — | — | | CVE-2026-20853 | 2026-01-13 | PR:N,无需任何权限 | | CVE-2026-32080 | 2026-04-14 | AC:H,攻击复杂度高 | | CVE-2026-49176 | 2026-07-14 | PR:L,AC:L |

三条的定级都是 Important,exploited 字段都是 No,可利用性评级都是 “Exploitation Less Likely”。

这三条的根因分别落在竞态、内存生命周期与路径信任三类上,互不相同。 同一组件在一年内被三个不同方向的问题击中,说明的不是某一个函数写错了,而是这个组件承载的信任假设比较多:它要处理调用者身份、调用者路径与调用者提供的数据库,三样东西都来自低权限一侧。

需要留一句边界:这只能说明该组件的披露密度较高,不能据此推断它的实际风险高于其他组件。厂商对三条都给出了相同的可利用性评级。

5.6 从 PoC 到可集成组件用了十三天

时间线里已经摆出的一个数字,值得单独说:研究者 PoC 仓库创建日(2026-07-16)到可集成组件仓库创建日(2026-07-29)之间隔了 13 天,从补丁日算起是 15 天。

后者的公开描述写明它是一个可从中等完整性会话(即标准用户)直接使用的本地提权工具,会完成载体的布置、Documents 的重定向、服务的触发,并在交互会话里以 NT AUTHORITY\SYSTEM 运行指定的命令行。这已经不是验证性脚本,而是可以直接装进现成攻击框架的模块。

这条链的公开顺序决定了它的现实风险形态: 补丁已经发布,但存量系统不会在一周内全部更新。PoC 在补丁后两天公开,等于给尚未更新的系统提供了一份现成的利用路径,而 15 天后出现的封装又把这个门槛降了一档。

换言之,这份披露的威胁不在于它是否被在野利用过,而在于它把”补丁已发布”与”补丁已安装”之间的时间差变成了可利用窗口。

六、结束语

这次披露有一个不常见的次序:修复在前,利用在后。补丁发布时该漏洞既未被在野利用,也未被公开披露,厂商按常规给了 Important 与 7.8 分;两天后,完整的 PoC 上线;15 天后,可集成组件出现。

这个次序把本地提权类漏洞的处置逻辑摆得更清楚了。这类漏洞本身不提供初始入口,它改变的是入口之后的权限余量。真正决定风险的不是补丁是否发布,而是补丁发布到安装之间的那段窗口,以及这段窗口里有多少台机器允许低权限账户本地登录。

本篇留下两条待外部复核的项:机制描述与修复形态均只有一个来源,本文已逐处标注;该披露的机制部分未获厂商确认,这不构成异常,闭源组件不提供机制说明是常态,而厂商本次在定级、范围、修复号与致谢四项上是完整的。

一条链能否成立,取决于几个条件是否同时出现;而防御要做的,是让其中任意一个条件无法同时满足。 就本例而言,最靠近根因的那一个是:不以最高身份去打开一个由较低身份选定了位置的数据库。

七、参考

厂商公告(MSRC 更新指南)https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-49176受影响产品清单(含知识库编号与修复构建号)https://api.msrc.microsoft.com/sug/v2.0/en-US/affectedProduct?$filter=contains(cveNumber,'CVE-2026-49176')
编号记录CVE.org 记录页https://cve.org/CVERecord?id=CVE-2026-49176CVE.org 记录接口https://cveawg.mitre.org/api/cve/CVE-2026-49176NVD 详情页https://nvd.nist.gov/vuln/detail/CVE-2026-49176
厂商文档ESE 回调参数(含 JET_paramEnablePersistedCallbacks)https://learn.microsoft.com/en-us/windows/win32/extensible-storage-engine/callback-parametersJET_USERDEFINEDDEFAULT 结构(含 szCallback 与安全说明)https://learn.microsoft.com/en-us/windows/win32/extensible-storage-engine/jet-userdefineddefault-structureSHSetKnownFolderPath 函数(每用户已知文件夹的权限要求)https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shsetknownfolderpath
研究者材料技术笔记:CVE-2026-49176&nbsp;Exploit Development: WalletService&nbsp;toSYSTEMhttps://davidcarliez.github.io/blog/cve-2026-49176-walletservice-to-system/PoC仓库:DavidCarliez/CVE-2026-49176_LPE_POC(创建于2026-07-16)https://github.com/DavidCarliez/CVE-2026-49176_LPE_POC可集成组件仓库(创建于2026-07-29)https://github.com/777erp/CVE-2026-49176_BOF
同一组件同期编号CVE-2026-20853(2026-01-13,CWE-362)https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-20853CVE-2026-32080(2026-04-14,CWE-416)https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-32080
在野状态已知被利用漏洞目录(2026-09-18 版本,未收录本编号)https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
补丁日背景MicrosoftJuly2026&nbsp;PatchTuesdayfixesmassive570flaws,3zero-days,BleepingComputer,LawrenceAbrams,2026-07-14https://www.bleepingcomputer.com/news/microsoft/microsoft-july-2026-patch-tuesday-fixes-massive-570-flaws-3-zero-days/

END

公众号内容都来自国外等平台- 搜索的内容通过结合编写 –

 提供整洁 – 广告已关

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:Ots安全 《CVE-2026-49176 深度解析:Windows WalletService 本地提权链》

评论:0   参与:  0