
Write-up técnico y PoC para CVE-2026-24009, que demuestra la carga insegura de YAML en docling-core y rutas prácticas de mitigación.
Este repositorio contiene una prueba de concepto (PoC) y un escáner simple que demuestran la CVE-2026-24009, donde docling-core puede permitir la ejecución de código al cargar YAML controlado por un atacante bajo condiciones específicas de dependencias.
Impacto: posible RCE durante el análisis de YAML Cadena vulnerable (todos los requisitos):
docling-core >= 2.21.0 y < 2.48.4PyYAML < 5.4 (comportamiento ascendente asociado con CVE-2020-14343)DoclingDocument.load_from_yaml(...) sobre YAML no confiableSolución: actualizar docling-core a >= 2.48.4 (cambia a yaml.SafeLoader)
actualizar a
PyYAMLDoclingDocument.load_from_yaml() deserializa un DoclingDocument serializado en YAML. En versiones vulnerables, carga YAML usando un cargador inseguro (yaml.FullLoader) cuando PyYAML es vulnerable, lo que permite que constructores YAML maliciosos ejecuten código durante el análisis (consulte CVE-2020-14343 para más información).
docling-core: 2.48.3 (vulnerable)PyYAML: 5.3.1 (vulnerable)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"
Ejecute:
python check_loader.py
En versiones vulnerables, load_from_yaml() usa:
data = yaml.load(f, Loader=yaml.FullLoader)
python repro_docling_load.py
Comportamiento esperado:
repro_docling_load.py lanza un ValidationError (esperado)/tmp/docling_cve_poc_markerEsto demuestra que la ejecución ocurrió durante el análisis de YAML, antes de que DoclingDocument.model_validate(...) falle.
docling-core (recomendado)python -m pip install --upgrade "docling-core==2.48.4"
python check_loader.py
python repro_docling_load.py
Esperado:
check_loader.py muestra yaml.SafeLoaderPyYAMLActualizar PyYAML a >= 5.4 mitiga el comportamiento ascendente asociado con CVE-2020-14343.
Si no es posible actualizar, evite cargar YAML no confiable con cargadores inseguros. Fuerce yaml.SafeLoader al deserializar YAML no confiable.
docling aguas abajo (mapeo de dependencias)Si bien esta CVE está en docling-core, el consumidor más común es docling. Un rango amplio de dependencias en docling no prueba la vulnerabilidad por sí mismo; lo que importa es el entorno resuelto (archivos de bloqueo / paquetes instalados) y si se utilizan rutas de importación YAML.
Este repositorio incluye collect_versions.py, que mapea:
docling-core desde pyproject.tomldocling-core desde uv.lock (o poetry.lock en etiquetas más antiguas)A partir de los datos extraídos, las versiones de docling potencialmente vulnerables (la restricción permite la vulnerable + el bloqueo fija la vulnerable) son:
>= v2.27.0 y <= v2.57.0Esto es un indicador de resolución de dependencias, no una prueba de que los flujos de trabajo predeterminados de
doclinglleguen aload_from_yaml()con entrada no confiable.
repro_docling_load.py — ejecutor mínimo de la PoCcheck_loader.py — imprime el cargador YAML usado por load_from_yaml()scanner/ — un escáner simple basado en dependencias (verificación opcional de sumidero directo)collect_versions.py — ayuda a mapear las etiquetas de docling a versiones fijadas de docling-core