
Write-up técnico e PoC para CVE-2026-24009, demonstrando carregamento inseguro de YAML no docling-core e caminhos práticos de mitigação.
Este repositório contém uma prova de conceito (PoC) e um scanner simples demonstrando a CVE-2026-24009, onde o docling-core pode permitir execução de código ao carregar YAML controlado por atacante sob condições específicas de dependências.
Impacto: possível RCE durante o parsing de YAML Cadeia vulnerável (todos os requisitos):
docling-core >= 2.21.0 e < 2.48.4PyYAML < 5.4 (comportamento upstream associado à CVE-2020-14343)DoclingDocument.load_from_yaml(...) em YAML não confiávelCorreção: atualize o docling-core para >= 2.48.4 (muda para yaml.SafeLoader)
atualize o para
PyYAMLDoclingDocument.load_from_yaml() desserializa um DoclingDocument serializado em YAML. Em versões vulneráveis, ele carrega YAML usando um loader inseguro (yaml.FullLoader) quando o PyYAML é vulnerável, permitindo que construtores YAML maliciosos executem código durante o parsing (consulte a CVE-2020-14343 para mais informações).
docling-core: 2.48.3 (vulnerável)PyYAML: 5.3.1 (vulnerável)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"
Execute:
python check_loader.py
Em versões vulneráveis, load_from_yaml() usa:
data = yaml.load(f, Loader=yaml.FullLoader)
python repro_docling_load.py
Comportamento esperado:
repro_docling_load.py levanta um ValidationError (esperado)/tmp/docling_cve_poc_markerIsso demonstra que a execução ocorreu durante o parsing de YAML, antes de DoclingDocument.model_validate(...) falhar.
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 mostra yaml.SafeLoaderPyYAMLAtualizar o PyYAML para >= 5.4 mitiga o comportamento upstream associado à CVE-2020-14343.
Se a atualização não for possível, evite carregar YAML não confiável com loaders inseguros. Force yaml.SafeLoader ao desserializar YAML não confiável.
docling (mapeamento de dependências)Embora esta CVE esteja no docling-core, o consumidor mais comum é o docling. Uma faixa ampla de dependências no docling não prova vulnerabilidade por si só; o que importa é o ambiente resolvido (lockfiles / pacotes instalados) e se os caminhos de importação de YAML são usados.
Este repositório inclui collect_versions.py, que mapeia:
docling-core do pyproject.tomldocling-core do uv.lock (ou poetry.lock em tags mais antigas)A partir dos dados extraídos, as versões potencialmente vulneráveis do docling (a restrição permite vulnerável + o lock fixa vulnerável) são:
>= v2.27.0 e <= v2.57.0Este é um indicador de resolução de dependências, não uma prova de que os fluxos de trabalho padrão do
doclingalcançamload_from_yaml()em entrada não confiável.
repro_docling_load.py — executor mínimo da PoCcheck_loader.py — imprime o loader YAML usado por load_from_yaml()scanner/ — um scanner simples baseado em dependências (verificação opcional de sink direto)collect_versions.py — auxiliar para mapear tags do docling para versões fixadas de docling-core