
Analyse technique et PoC pour CVE-2026-24009, démontrant le chargement YAML non sécurisé dans docling-core et les pistes pratiques d’atténuation.
Ce dépôt contient une preuve de concept (PoC) et un scanner simple démontrant la CVE-2026-24009, où docling-core peut permettre l'exécution de code lors du chargement de YAML contrôlé par un attaquant dans des conditions de dépendances spécifiques.
Impact : RCE potentielle lors de l'analyse YAML Chaîne vulnérable (toutes les conditions requises) :
docling-core >= 2.21.0 et < 2.48.4PyYAML < 5.4 (comportement en amont associé à la CVE-2020-14343)DoclingDocument.load_from_yaml(...) sur un YAML non fiableCorrectif : mettre à niveau docling-core vers >= 2.48.4 (bascule vers yaml.SafeLoader)
mettre à niveau vers
PyYAMLDoclingDocument.load_from_yaml() désérialise un DoclingDocument sérialisé en YAML. Dans les versions vulnérables, il charge le YAML à l'aide d'un loader non sécurisé (yaml.FullLoader) lorsque PyYAML est vulnérable, permettant à des constructeurs YAML malveillants d'exécuter du code pendant l'analyse (voir CVE-2020-14343 pour plus d'informations).
docling-core : 2.48.3 (vulnérable)PyYAML : 5.3.1 (vulnérable)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"
Exécutez :
python check_loader.py
Dans les versions vulnérables, load_from_yaml() utilise :
data = yaml.load(f, Loader=yaml.FullLoader)
python repro_docling_load.py
Comportement attendu :
repro_docling_load.py lève une ValidationError (attendue)/tmp/docling_cve_poc_markerCela démontre que l'exécution a eu lieu pendant l'analyse YAML, avant que DoclingDocument.model_validate(...) n'échoue.
docling-core (recommandé)python -m pip install --upgrade "docling-core==2.48.4"
python check_loader.py
python repro_docling_load.py
Attendu :
check_loader.py affiche yaml.SafeLoaderPyYAMLLa mise à niveau de PyYAML vers >= 5.4 atténue le comportement en amont associé à la CVE-2020-14343.
Si la mise à niveau n'est pas possible, évitez de charger du YAML non fiable avec des loaders non sécurisés. Imposez yaml.SafeLoader lors de la désérialisation de YAML non fiable.
docling (mappage des dépendances)Bien que cette CVE concerne docling-core, le consommateur le plus courant est docling. Une large plage de dépendances dans docling ne prouve pas en soi la vulnérabilité ; ce qui compte, c'est l'environnement résolu (lockfiles / paquets installés) et l'utilisation ou non des chemins d'importation YAML.
Ce dépôt inclut collect_versions.py, qui mappe :
docling-core depuis pyproject.tomldocling-core depuis uv.lock (ou poetry.lock dans les anciens tags)À partir des données extraites, les versions potentiellement vulnérables de docling (la contrainte autorise la version vulnérable + le lock épingle la version vulnérable) sont :
>= v2.27.0 et <= v2.57.0Il s'agit d'un indicateur de résolution de dépendances, et non d'une preuve que les flux de travail par défaut de
doclingatteignentload_from_yaml()sur des entrées non fiables.
repro_docling_load.py — exécuteur PoC minimalcheck_loader.py — affiche le loader YAML utilisé par load_from_yaml()scanner/ — un scanner simple basé sur les dépendances (vérification facultative du sink direct)collect_versions.py — outil d'aide pour mapper les tags docling vers les versions épinglées de docling-core