
Технический разбор и PoC для CVE-2026-24009, демонстрирующие небезопасную загрузку YAML в docling-core и практические пути смягчения последствий.
Этот репозиторий содержит proof-of-concept (PoC) и простой сканер, демонстрирующие CVE-2026-24009, где docling-core может обеспечить выполнение кода при загрузке управляемого атакующим YAML при определенных условиях зависимостей.
Воздействие: потенциальное RCE во время разбора YAML Уязвимая цепочка (все условия обязательны):
docling-core >= 2.21.0 и < 2.48.4PyYAML < 5.4 (поведение вышестоящего пакета, связанное с CVE-2020-14343)DoclingDocument.load_from_yaml(...) для недоверенного YAMLИсправление: обновите docling-core до >= 2.48.4 (переключается на yaml.SafeLoader)
обновите до
PyYAMLDoclingDocument.load_from_yaml() десериализует YAML-сериализованный DoclingDocument. В уязвимых версиях он загружает YAML с использованием небезопасного загрузчика (yaml.FullLoader), когда PyYAML уязвим, что позволяет вредоносным 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.SafeLoader при десериализации недоверенного YAML.
docling (сопоставление зависимостей)Хотя эта CVE находится в docling-core, наиболее распространенным потребителем является docling. Широкий диапазон зависимостей в docling сам по себе не доказывает уязвимость; важно разрешенное окружение (lockfiles / установленные пакеты) и то, используются ли пути импорта YAML.
Этот репозиторий включает collect_versions.py, который сопоставляет:
docling-core из pyproject.tomldocling-core из uv.lock (или poetry.lock в более старых тегах)Из извлеченных данных потенциально уязвимые версии docling (ограничение допускает уязвимую + lock закрепляет уязвимую):
>= v2.27.0 и <= v2.57.0Это индикатор разрешения зависимостей, а не доказательство того, что стандартные рабочие процессы
doclingдостигаютload_from_yaml()для недоверенного ввода.
repro_docling_load.py — минимальный запускатель PoCcheck_loader.py — выводит загрузчик YAML, используемый load_from_yaml()scanner/ — простой сканер на основе зависимостей (необязательная проверка прямого стока)collect_versions.py — помощник для сопоставления тегов docling с закрепленными версиями docling-core