FelineKeeper/CVE-2025-50165-Windows-Graphics-Component-RCE
GitHub: FelineKeeper/CVE-2025-50165-Windows-Graphics-Component-RCE
针对 Windows 图像组件 JPEG 编码路径中未初始化指针漏洞(CVE-2025-50165)的 PoC 复现与漏洞分析工具包。
Stars: 0 | Forks: 0
# Windows 图形组件 RCE
Windows Imaging Component · 未初始化的 JPEG 编码指针 · 12/16 位重新编码
攻击流程 · 简介 · TL;DR · 根本原因 · 补丁 · 参考文献
## 🎯 攻击流程 & PoC 1. **构造 JPEG payload**:使用非标准位深(12/16 位)以确保在压缩期间触发易受攻击的代码路径。通过 Heap Spraying 分配包含受控数据(例如 ROP 链)的块(例如,大小约为 0x3ef7)。 2. **堆操作**:释放块使其可作为“受害块”被重用。这允许控制未初始化的函数指针。 3. **触发解引用**:在 `jpeg_finish_compress` 期间,该指针被调用,从而劫持控制流(RIP 控制)。 4. **ROP 链和 Shellcode**:使用 stack pivot gadget 重定向到 ROP 链。ROP 分配 RWX 内存(例如,通过 `VirtualAlloc`),复制 shellcode 并执行它。 - **构造 JPEG payload** (pop calc PoC) python poc_gen.py - 使用照片、Office、Edge 预览等打开在 `poc` 文件夹中生成的 JPEG payload。 ### 快速流水线 | 步骤 | 操作 | 输出 | |:----:|--------|--------| | **0** | 易受攻击的 **24H2** 虚拟机(无 2025 年 8 月补丁) | `WindowsCodecs.dll` < `10.0.26100.4851` | | **1** | **构造 JPEG payload** (pop calc PoC) | `poc\malicious.jpg`(或类似文件) | | **2** | 在 WIC 宿主应用程序中**打开 payload** | 缩略图 / 重新编码 → 触发 | | **3** | 观察 | `calc.exe` 生成 **或** 在 `jpeg_finish_compress` 中崩溃 | ### 底层原理(相同流程,技术视角) ``` python poc.py → poc/*.jpg │ ▼ User opens in Photos / Office / Edge / Explorer │ ▼ WindowsCodecs.dll ──► DECODE ✅ │ ▼ Re-encode / THUMBNAIL ──► jpeg_finish_compress() │ ▼ CALL [uninitialized compress_data_12 | _16] │ ▼ pop calc 💥 (or crash @ 0xBAADF00D) ``` ## 📖 简介 **CVE-2025-50165**(代号 **WICBreak**)是 Microsoft 的 **Windows Imaging Component**(`WindowsCodecs.dll`)中的一个 **CVSS 9.8 严重**漏洞。它存在于 JPEG **压缩**路径中:当 Windows 从罕见的 **12 位或 16 位**图像**重新编码**或生成**缩略图**时,它可能会在 `jpeg_finish_compress` 内部调用**未初始化的函数指针**(`compress_data_12` / `compress_data_16`)——从而将平凡无奇的图像格式转变为潜在的**远程代码执行**原语。Microsoft 于 **2025 年 8 月**针对 **Windows 11 24H2** 和 **Windows Server 2025** 发布了修复补丁;[Zscaler](https://www.zscaler.com/blogs/security-research/cve-2025-50165-critical-flaw-windows-graphics-component) 和 [ESET](https://www.welivesecurity.com/en/eset-research/revisiting-cve-2025-50165-critical-flaw-windows-imaging-component/) 表示头条新闻“打开一个 JPG,就被黑掉”夸大了其影响——**查看**通常保持安全,但**编码和缩略图流水线**值得关注。 ### 一句话概述 ## ⚡ 太长不看 | | | |---|---| | **内容** | **JPEG 压缩**期间 **`WindowsCodecs.dll`** 中未初始化的函数指针 | | **PoC** | `python poc.py` → 在照片 / Office / Edge 中打开 `poc/*.jpg` | | **触发时机** | 应用程序从 **12 位或 16 位** JPEG **重新编码**或生成**缩略图**时 | | **评分** | **9.8 严重** — `AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` | | **受影响版本** | **Windows 11 24H2** 和 **Windows Server 2025** 在 **10.0.26100.4851** 之前的版本 | | **修复** | 2025 年 8 月 Windows Update → [MSRC 指南](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-50165) | ## 🔬 根本原因 | 项目 | 详情 | |------|--------| | **DLL** | `WindowsCodecs.dll` | | **函数** | `jpeg_finish_compress` | | **Bug** | `compress_data_12` / `compress_data_16` 在解引用前**从未被初始化** | | **触发条件** | **编码**期间的 **12 位或 16 位** JPEG (`data_precision` = 12 或 16) | | **特征** | 崩溃 / 堆可能显示 **`0xBAADF00D`**(未初始化的 CRT 填充) | | **补丁** | 指针被设置为 `rawtranscode_compress_output_16` (DLL **≥ 10.0.26100.4946**) | ## 🧠 误区与事实 | 误区 | 事实 | |------|---------| | “打开任何恶意 JPG = 立即 RCE” | **解码/查看**通常**不会**触发该 Bug —— **重新编码**才会 | | “仅靠 `python poc.py` 就能黑掉机器” | 你仍然需要一个 **WIC 宿主**来为 `poc` 图像生成**缩略图 / 保存** | | “CVSS 9.8 = 明天就会出现蠕虫” | 可靠的漏洞利用需要 **堆整理** + **信息泄露** ([ESET](https://www.welivesecurity.com/en/eset-research/revisiting-cve-2025-50165-critical-flaw-windows-imaging-component/)) | | “桌面端可选择不打补丁” | **Server 2025** + **24H2** 集群:应视为 **P0** | ## 📊 概览 | 字段 | 值 | |--------|--------| | **CVE** | [CVE-2025-50165](https://nvd.nist.gov/vuln/detail/CVE-2025-50165) | | **代号** | **WICBreak** | | **组件** | `WindowsCodecs.dll` (WIC) | | **弱点** | [CWE-822](https://cwe.mitre.org/data/definitions/822.html) · [CWE-908](https://cwe.mitre.org/data/definitions/908.html) | | **研究** | [Zscaler](https://www.zscaler.com/blogs/security-research/cve-2025-50165-critical-flaw-windows-graphics-component) · [ESET](https://www.welivesecurity.com/en/eset-research/revisiting-cve-2025-50165-critical-flaw-windows-imaging-component/) | ## 💥 影响 | 维度 | Microsoft | 研究人员 | |-----------|-----------|-------------| | **机密性** | 高 | 取决于应用程序上下文 + 漏洞利用 | | **完整性** | 高 | WIC 使用者进程中的任意代码执行 | | **可用性** | 高 | **崩溃很容易**;稳定的 RCE 较难 | | **传递方式** | 网络 (CVSS) | 通常是**文件** → 本地 WIC | ## 🖥️ 谁会受到影响 | 产品 | 易受攻击版本 | 已修补(最低)版本 | |---------|------------|---------------| | **Windows 11 24H2** | < **10.0.26100.4851** | ≥ **10.0.26100.4851** | | **Windows Server 2025** | < **10.0.26100.4851** | ≥ **10.0.26100.4851** | ## ✅ 立即修补 1. 部署 **2025 年 8 月**(或之后)的累积更新。 2. 确认 OS 内部版本 **≥ 10.0.26100.4851**。 3. 在修补后的 VM 上重新测试 PoC —— **calc 不应生成**。 | 缓解措施 | 优先级 | |------------|----------| | 安装 Microsoft 安全更新 | **P0** | | 阻止不受信任的 Office 宏 / 外部内容 | 高 | | Office 工作负载使用标准用户 | 高 | ### 检测思路 - WER / 转储文件:`WindowsCodecs.dll` 中 `jpeg_finish_compress` 处的故障 - 意外的 `calc.exe` 作为照片 / Office / `dllhost` 的子进程 - 电子邮件附件中罕见的 **12/16 位** JPEG ## 🔗 参考文献 - [Microsoft MSRC — CVE-2025-50165](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-50165) - [NVD — CVE-2025-50165](https://nvd.nist.gov/vuln/detail/CVE-2025-50165) - [ESET — 重温 CVE-2025-50165](https://www.welivesecurity.com/en/eset-research/revisiting-cve-2025-50165-critical-flaw-windows-imaging-component/) - [Zscaler ThreatLabz](https://www.zscaler.com/blogs/security-research/cve-2025-50165-critical-flaw-windows-graphics-component) - [WIC JPEG 重新编码文档](https://learn.microsoft.com/en-us/windows/win32/wic/-wic-codec-jpegmetadataencoding) ## ⚠️ 免责声明 仅供**授权实验室研究**和补丁验证使用。仅测试您拥有或获准评估的系统。请勿将此 PoC 用于生产环境或进行分发。
CVE-2025-50165 · WICBreak
标签:端点可见性, 逆向工具