
CVE-2026-24009에 대한 기술 분석 자료 및 PoC로, docling-core의 안전하지 않은 YAML 로딩을 시연하고 실질적인 완화 방안을 제시합니다.
이 저장소는 CVE-2026-24009를 입증하는 개념 증명(PoC)과 간단한 스캐너를 포함합니다. 이 취약점은 특정 종속성 조건에서 docling-core가 공격자가 제어하는 YAML을 로드할 때 코드 실행을 가능하게 합니다.
영향: YAML 파싱 중 잠재적 RCE 취약한 체인(모두 필요):
docling-core >= 2.21.0 및 < 2.48.4PyYAML < 5.4 (CVE-2020-14343과 관련된 업스트림 동작)DoclingDocument.load_from_yaml(...) 호출수정: docling-core를 >= 2.48.4로 업그레이드 (yaml.SafeLoader로 전환)
대체 수정: PyYAML을 로 업그레이드
DoclingDocument.load_from_yaml()은 YAML로 직렬화된 DoclingDocument를 역직렬화합니다. 취약한 버전에서는 PyYAML이 취약할 때 안전하지 않은 로더(yaml.FullLoader)를 사용하여 YAML을 로드하므로, 악의적인 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이는 DoclingDocument.model_validate(...)가 실패하기 전에 YAML 파싱 중에 실행이 발생했음을 입증합니다.
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.SafeLoader를 표시PyYAML 업그레이드PyYAML을 >= 5.4로 업그레이드하면 CVE-2020-14343과 관련된 업스트림 동작이 완화됩니다.
업그레이드가 불가능한 경우, 안전하지 않은 로더로 신뢰할 수 없는 YAML을 로드하지 마십시오. 신뢰할 수 없는 YAML을 역직렬화할 때 yaml.SafeLoader를 강제하십시오.
docling 노출에 대한 참고 사항 (종속성 매핑)이 CVE는 docling-core에 있지만, 가장 일반적인 소비자는 docling입니다. docling의 광범위한 종속성 범위는 그 자체로 취약성을 입증하지 않습니다. 중요한 것은 해석된(resolved) 환경(lockfile / 설치된 패키지)과 YAML 가져오기 경로가 사용되는지 여부입니다.
이 저장소에는 다음을 매핑하는 collect_versions.py가 포함되어 있습니다:
pyproject.toml에서 선언된 docling-core 제약 조건uv.lock(또는 이전 태그의 poetry.lock)에서 고정된 docling-core 버전추출된 데이터에서 잠재적으로 취약한 docling 버전(제약 조건이 취약한 버전을 허용하고 lock이 취약한 버전을 고정)은 다음과 같습니다:
>= v2.27.0 및 <= v2.57.0이는 종속성 해석 지표일 뿐, 기본
docling워크플로우가 신뢰할 수 없는 입력에 대해load_from_yaml()에 도달한다는 증명은 아닙니다.
repro_docling_load.py — 최소 PoC 실행기check_loader.py — load_from_yaml()이 사용하는 YAML 로더 출력scanner/ — 간단한 종속성 기반 스캐너 (선택적 직접 싱크 확인)collect_versions.py — docling 태그를 고정된 docling-core 버전에 매핑하는 헬퍼