rauljvc8/CVE-2025-68616-Detecting-and-Patching-an-SSRF-in-WeasyPrint-with-Wazuh
GitHub: rauljvc8/CVE-2025-68616-Detecting-and-Patching-an-SSRF-in-WeasyPrint-with-Wazuh
该仓库记录了使用 Wazuh 检测 WeasyPrint 中的 SSRF 漏洞(CVE-2025-68616)并通过 PoC 复现和修补的全过程案例。
Stars: 0 | Forks: 0
# 从检测到修复:使用 Wazuh 追踪并修补 WeasyPrint 中的真实 SSRF (CVE-2025-68616)
## TL;DR
在 Kali Linux 机器上使用 **Wazuh**(开源 SIEM/XDR)进行个人练习时,**Vulnerability Detection** 模块在 **WeasyPrint** 包中识别出一个 **High (CVSS 7.5)** 级别的严重漏洞:SSRF 保护绕过(**CVE-2025-68616**)。我调查了这一发现,使用本地概念验证(PoC)复现了该问题,应用了该项目的修补版本,并验证了该漏洞已无法被利用。本仓库记录了完整的过程:检测、分析、PoC 和修复。
## 背景
**Wazuh** 是一个开源安全平台(SIEM + XDR),它结合了日志收集、文件完整性监控(FIM)、异常检测以及针对受监控主机上已安装软件的 **vulnerability detection**(漏洞检测)等功能,将软件包清单与 CVE 数据库(包括 NVD 等)进行交叉比对。
在本次练习中,Wazuh agent 运行在一台 **Kali GNU/Linux 2025.4** 机器上,并且 manager、indexer 和 dashboard 也都在本地运行。在得出这一发现之前,该环境已经具有正常运行的活动监控:PAM 登录会话、`sudo` 执行、监听端口更改以及 `rootcheck` 异常事件,所有这些都可在 **Threat Hunting** 模块中查看。
## 发现:CVE-2025-68616
Wazuh 的 **Vulnerability Detection** 模块在 `Kali` agent 上报告了 1 个 **High** 严重级别的漏洞,与 **weasyprint** 包相关。
### 技术细节 (NVD)
**WeasyPrint** 是一个将 HTML/CSS 转换为 PDF 文档的 Python 库,被广泛用于从 Web 应用程序生成报告、发票和动态文档。
- **CVE:** CVE-2025-68616
- **CVSS 3.x Base Score:** 7.5 (**High**)
- **Vector:** `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N`
- **CWE-918:** Server-Side Request Forgery (SSRF)
- **CWE-601:** URL Redirection to Untrusted Site ('Open Redirect')
- **Affected versions:** 先于 **68.0** (`cpe:2.3:a:kozea:weasyprint:*:*:*:*:*:*:*:*`, 直至但不包括 68.0)
- **Published (NVD):** 01/19/2026
**描述:** 在 68.0 版本之前,WeasyPrint 的 `default_url_fetcher` 中存在一个 SSRF 保护绕过漏洞。该漏洞允许攻击者访问内部网络资源(例如 `localhost` 服务或云元数据 endpoint),即使开发者已经实现了自定义的 `url_fetcher` 来阻止此类访问。发生这种情况是因为底层的 `urllib` 库会自动遵循 HTTP 重定向,而没有根据开发者的安全策略对新目标进行重新验证。68.0 版本包含针对此问题的补丁。
**参考:**
- 官方公告:[GHSA-983w-rhvv-gwmv](https://github.com/Kozea/WeasyPrint/security/advisories/GHSA-983w-rhvv-gwmv)
- 补丁提交:[b6a14f0...43f0e565](https://github.com/Kozea/WeasyPrint/commit/b6a14f0f3f4ce9c0c75c1a2d73cb1c5d43f0e565)
- Red Hat CVE:[access.redhat.com/security/cve/CVE-2025-68616](https://access.redhat.com/security/cve/CVE-2025-68616)
## 概念验证 (PoC)
为了在修补之前确认实际影响,我在系统上安装的易受攻击版本上搭建了一个本地利用场景。
**1. 克隆了已应用补丁的仓库**(main 分支,已经包含 68.0 版本的修复):
```
git clone https://github.com/Kozea/WeasyPrint.git
```
**2. 审查了修复后的代码**,特别是 `weasyprint/urls.py`,这里是 `default_url_fetcher` 逻辑和重定向处理所在的位置:
**3. 构建了一个恶意的 HTML 文件**,它试图通过 `iframe` 窃取本地系统文件,模拟 CVE 中描述的 SSRF / 未经授权的资源访问向量(注意:下方的文件名和文件内容均保持与执行时完全一致,并与截图中的终端输出相匹配):
```
cat << 'EOF' > ataque.html
PoC SSRF - WeasyPrint
Prueba de Exfiltración de Archivos Locales
Si el parche no está aplicado, el contenido de abajo debería mostrar el archivo /etc/passwd:
EOF python3 -m weasyprint ataque.html resultado_vulnerable.pdf xdg-open resultado_vulnerable.pdf ``` **4. 结果:** 当打开生成的 PDF 时,指向 `file:///etc/passwd` 的 `iframe` 显示为**空**,没有来自系统文件的任何内容。这证实了在修补后的版本上,访问未经授权资源的尝试已被正确拦截。 ## 修复 - 确认系统安装了**先于 68.0** 的 **WeasyPrint** 版本,存在 CVE-2025-68616 漏洞。 - 通过对官方仓库(包含补丁提交 `b6a14f0...` 的分支)执行 `git clone` 获取了修复后的代码。 - 通过上述 PoC 验证了修补后的版本**不再允许**通过 `iframe` 访问 `file:///etc/passwd` 资源。 ## 结论与经验教训 - Wazuh 的 **Vulnerability Detection** 模块使得识别已安装依赖项中真实存在的高严重性漏洞成为可能,而无需手动进行包扫描。 - 将 Wazuh 警报与 NVD 中的官方 CVE 记录进行交叉比对,是理解确切攻击向量(通过绕过 `url_fetcher` 执行 SSRF)的关键,这发生在尝试复现它之前。 - 在个人且隔离的环境中构建受控的 PoC,使得验证实际影响并客观确认补丁的有效性成为可能,而不是单纯信任版本号。 - 此工作流程(检测 → 分析 → PoC → 修复 → 验证)完美体现了专业安全环境中预期的漏洞管理生命周期。 *本次实践是在个人、隔离的环境(本地运行的 Kali Linux + Wazuh)中出于教育目的进行的。未访问任何第三方系统。*标签:CISA项目, GPT, PB级数据处理, PoC, SSRF, Wazuh, 安全运维, 暴力破解, 漏洞管理, 逆向工具