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反序列化, 代码执行, 依赖混淆, 反序列化漏洞, 恶意代码分类, 攻击链, 数据展示, 文档解析安全, 暴力破解, 服务器监控, 漏洞复现, 漏洞缓解, 红队, 编程工具, 输入验证, 远程代码执行, 逆向工具