本仓库包含一个概念验证(PoC)和一个简单扫描器,用于演示 CVE-2026-24009,该漏洞中 docling-core 在特定依赖条件下加载攻击者控制的 YAML 时可能实现代码执行。
影响: YAML 解析期间可能发生远程代码执行(RCE) 易受攻击的依赖链(全部必需):
docling-core >= 2.21.0 且 < 2.48.4PyYAML < 5.4(与 CVE-2020-14343 相关的上游行为)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)。
docling-core:2.48.3(易受攻击)PyYAML:5.3.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"
运行:
python check_loader.py
在易受攻击的版本中,load_from_yaml() 使用:
data = yaml.load(f, Loader=yaml.FullLoader)
python repro_docling_load.py
预期行为:
repro_docling_load.py 抛出 ValidationError(预期行为)/tmp/docling_cve_poc_marker这证明代码执行发生在 YAML 解析期间,早于 DoclingDocument.model_validate(...) 失败之前。
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.SafeLoaderPyYAML将 PyYAML 升级至 >= 5.4 可缓解与 CVE-2020-14343 相关的上游行为。
如果无法升级,请避免使用不安全的加载器加载不受信任的 YAML。在反序列化不受信任的 YAML 时,强制使用 yaml.SafeLoader。
docling 暴露的说明(依赖映射)虽然此 CVE 存在于 docling-core 中,但最常见的消费者是 docling。docling 中宽泛的依赖范围本身并不能证明存在漏洞;关键在于解析后的环境(锁文件 / 已安装的包)以及是否使用了 YAML 导入路径。
本仓库包含 collect_versions.py,用于映射:
pyproject.toml 中声明的 docling-core 约束uv.lock(或旧标签中的 poetry.lock)中固定的 docling-core 版本根据提取的数据,可能易受攻击的 docling 版本(约束允许易受攻击版本 + 锁文件固定为易受攻击版本)为:
>= v2.27.0 且 <= v2.57.0这是依赖解析的指示器,并非证明默认的
docling工作流会在不受信任的输入上调用load_from_yaml()。
repro_docling_load.py — 最小 PoC 运行器check_loader.py — 打印 load_from_yaml() 使用的 YAML 加载器scanner/ — 一个简单的基于依赖的扫描器(可选的直接接收点检查)collect_versions.py — 用于将 docling 标签映射到固定的 docling-core 版本的辅助工具