
Technical write-up e PoC per CVE-2026-24009, che dimostrano il caricamento non sicuro di YAML in docling-core e percorsi pratici di mitigazione.
Questo repository contiene una proof-of-concept (PoC) e un semplice scanner che dimostrano la CVE-2026-24009, in cui docling-core può abilitare l'esecuzione di codice quando carica YAML controllato da un attaccante in specifiche condizioni di dipendenza.
Impatto: potenziale RCE durante il parsing YAML Catena vulnerabile (tutti i requisiti):
docling-core >= 2.21.0 e < 2.48.4PyYAML < 5.4 (comportamento a monte associato a CVE-2020-14343)DoclingDocument.load_from_yaml(...) su YAML non attendibileFix: aggiornare docling-core a >= 2.48.4 (passa a yaml.SafeLoader)
aggiornare a
PyYAMLDoclingDocument.load_from_yaml() deserializza un DoclingDocument serializzato in YAML. Nelle versioni vulnerabili, carica YAML utilizzando un loader non sicuro (yaml.FullLoader) quando PyYAML è vulnerabile, consentendo a costruttori YAML malevoli di eseguire codice durante il parsing (vedere CVE-2020-14343 per maggiori informazioni).
docling-core: 2.48.3 (vulnerabile)PyYAML: 5.3.1 (vulnerabile)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"
Eseguire:
python check_loader.py
Nelle versioni vulnerabili, load_from_yaml() utilizza:
data = yaml.load(f, Loader=yaml.FullLoader)
python repro_docling_load.py
Comportamento atteso:
repro_docling_load.py solleva una ValidationError (atteso)/tmp/docling_cve_poc_markerQuesto dimostra che l'esecuzione è avvenuta durante il parsing YAML, prima che DoclingDocument.model_validate(...) fallisca.
docling-core (consigliato)python -m pip install --upgrade "docling-core==2.48.4"
python check_loader.py
python repro_docling_load.py
Atteso:
check_loader.py mostra yaml.SafeLoaderPyYAMLL'aggiornamento di PyYAML a >= 5.4 mitiga il comportamento a monte associato a CVE-2020-14343.
Se l'aggiornamento non è possibile, evitare di caricare YAML non attendibile con loader non sicuri. Imporre yaml.SafeLoader durante la deserializzazione di YAML non attendibile.
docling (mappatura delle dipendenze)Sebbene questa CVE sia in docling-core, il consumatore più comune è docling. Un ampio intervallo di dipendenze in docling non dimostra di per sé la vulnerabilità; ciò che conta è l'ambiente risolto (lockfile / pacchetti installati) e se vengono utilizzati percorsi di importazione YAML.
Questo repository include collect_versions.py, che mappa:
docling-core da pyproject.tomldocling-core da uv.lock (o poetry.lock nei tag più vecchi)Dai dati estratti, le versioni di docling potenzialmente vulnerabili (il vincolo consente versioni vulnerabili + il lock blocca versioni vulnerabili) sono:
>= v2.27.0 e <= v2.57.0Questo è un indicatore di risoluzione delle dipendenze, non una prova che i flussi di lavoro predefiniti di
doclingraggiunganoload_from_yaml()su input non attendibili.
repro_docling_load.py — esecutore PoC minimalecheck_loader.py — stampa il loader YAML utilizzato da load_from_yaml()scanner/ — un semplice scanner basato sulle dipendenze (controllo opzionale del sink diretto)collect_versions.py — helper per mappare i tag di docling alle versioni bloccate di docling-core