BiranPeretz/docling-core-CVE-2026-24009
GitHub: BiranPeretz/docling-core-CVE-2026-24009
针对 docling-core YAML 反序列化漏洞 (CVE-2026-24009) 的技术分析、概念验证代码和依赖扫描工具集。
Stars: 0 | Forks: 0
# CVE-2026-24009 — docling-core 不安全的 YAML 反序列化 (PoC + 笔记)
本仓库包含一个概念验证(PoC)和一个简单的扫描器,用于演示 **CVE-2026-24009**。在特定的依赖条件下,当 `docling-core` 加载由攻击者控制的 YAML 时,可能导致代码执行。
## 太长不看
**影响:** YAML 解析期间可能发生 RCE
**漏洞链(均需满足):**
- `docling-core` **>= 2.21.0 且 < 2.48.4**
- `PyYAML` **< 5.4**(与 CVE-2020-14343 相关的上游行为)
- 应用程序对**不可信的 YAML** 调用 `DoclingDocument.load_from_yaml(...)`
**修复:** 将 `docling-core` 升级至 **>= 2.48.4**(切换至 `yaml.SafeLoader`)
**替代修复:** 将 `PyYAML` 升级至 **>= 5.4**
## 背景 / 根本原因
`DoclingDocument.load_from_yaml()` 用于反序列化经 YAML 序列化的 `DoclingDocument`。在受影响版本中,当 `PyYAML` 存在漏洞时,该方法使用不安全的加载器(`yaml.FullLoader`)加载 YAML,这允许恶意 YAML 构造器在解析期间执行代码(更多信息请参阅 CVE-2020-14343)。
## 测试环境 (PoC)
- 操作系统: Ubuntu 24.04
- Python: 3.12.3
- `docling-core`: 2.48.3 (受影响)
- `PyYAML`: 5.3.1 (受影响)
## 复现
### 1) 创建虚拟环境
```
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install "docling-core==2.48.3" "PyYAML==5.3.1"
```
### 2) (可选) 确认易受攻击的加载器
运行:
```
python check_loader.py
```
在受影响版本中,`load_from_yaml()` 使用:
```
data = yaml.load(f, Loader=yaml.FullLoader)
```
### 3) 运行 PoC
```
python repro_docling_load.py
```
预期行为:
- `repro_docling_load.py` 抛出 `ValidationError` (预期)
- 创建本地标记文件: `/tmp/docling_cve_poc_marker`
这演示了执行发生在 `DoclingDocument.model_validate(...)` 失败之前的 **YAML 解析期间**。
## 缓解措施 / 补丁验证
### 缓解措施 1 — 升级 `docling-core` (推荐)
```
python -m pip install --upgrade "docling-core==2.48.4"
python check_loader.py
python repro_docling_load.py
```
预期结果:
- `check_loader.py` 显示 `yaml.SafeLoader`
- PoC 失败并报 YAML 构造器错误,且**未创建标记文件**
### 缓解措施 2 — 升级 `PyYAML`
将 `PyYAML` 升级到 `>= 5.4` 可缓解与 CVE-2020-14343 相关的上游行为。
### 缓解措施 3 — 强制安全加载
如果无法升级,请避免使用不安全的加载器加载不可信的 YAML。在反序列化不可信 YAML 时强制使用 `yaml.SafeLoader`。
## 关于下游 `docling` 暴露情况的说明 (依赖映射)
虽然此 CVE 位于 `docling-core`,但最常见的使用者是 `docling`。`docling` 中宽泛的依赖范围**本身并不证明**存在漏洞;关键在于**已解析**的环境(lockfiles / 已安装的包)以及是否使用了 YAML 导入路径。
本仓库包含 `collect_versions.py`,它映射了:
- `pyproject.toml` 中声明的 `docling-core` 约束
- `uv.lock`(或旧标签中的 `poetry.lock`)中固定的 `docling-core` 版本
从提取的数据来看,**可能受影响**的 `docling` 版本(约束允许受影响版本 + lock 文件固定为受影响版本)包括:
- `>= v2.27.0` 且 `<= v2.57.0`
## 仓库内容 (概览)
- `repro_docling_load.py` — 最小化 PoC 运行器
- `check_loader.py` — 打印 `load_from_yaml()` 使用的 YAML 加载器
- `scanner/` — 简单的基于依赖的扫描器(可选的直接汇聚点检查)
- `collect_versions.py` — 辅助将 `docling` 标签映射到固定的 `docling-core` 版本的工具
标签:API密钥检测, CISA项目, CVE-2026-24009, DNS 反向解析, docling-core, FullLoader, PoC, PyYAML, RCE, SafeLoader, 不安全的YAML反序列化, 代码执行, 依赖混淆, 反序列化漏洞, 恶意代码分类, 攻击链, 数据展示, 文档解析安全, 暴力破解, 服务器监控, 漏洞复现, 漏洞缓解, 红队, 编程工具, 输入验证, 远程代码执行, 逆向工具