🇰🇷 한글 설명
Apache Camel Docling 컴포넌트에서 경로 제한 우회(경로 순회) 취약점이 발견되었습니다. 기존 validatePathSafety 검사가 상대 경로 순회만 차단하고 절대 경로는 검사하지 않아, CamelDoclingCustomArguments 헤더를 통해 Camel 프로세스가 접근 가능한 임의의 디렉터리를 docling 명령줄에 지정할 수 있습니다.
💡 쉬운 설명
외부에서 조작된 설정 값이 프로그램에 전달되면, 허용되지 않은 폴더 위치까지 접근할 수 있는 문제입니다. 영향 범위는 해당 서버 프로세스가 읽을 수 있는 디렉터리로 제한됩니다.
🇺🇸 원문 (English)
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') vulnerability in Apache Camel Docling component.
This issue affects Apache Camel: from 4.15.0 before 4.18.5, from 4.19.0 before 4.22.2.
DoclingProducer builds the command line of the external docling tool and appends to it the custom arguments supplied in the CamelDoclingCustomArguments header, a list of strings whose flags the fix for CVE-2026-40047 restricted to an allowlist. That fix also introduced validatePathSafety to keep path-like argument values inside the intended directory, but the method only looked for relative traversal: it rejected a value containing a traversal sequence such as ../ and a value whose normalized form still held a .. element. It never checked whether a value was an absolute path, and an absolute path without traversal segments contains neither, so it passed unchanged. Every path-like value went through this check, whether it was a separate list element following its flag or was attached to the flag after an equals sign, so an absolute path was accepted in either form, for example as the directory given to the allowlisted --artifacts-path flag, which tells docling where to find its model artifacts. Such a value reached the docling command line as given, so a party able to choose the custom arguments could point the docling process at any directory the Camel process can access, outside the working directory that the check was meant to keep path values in, which is the outcome the CVE-2026-40047 fix set out to prevent. Only the CLI mode, which is the default, passes custom arguments to docling. The header belongs to the Camel header namespace, which consumers applying Camel's default header filtering, such as the JMS and Kafka consumers, remove from incoming messages, so the issue is reached where a route forwards externally influenced values into the header or where a consumer maps incoming headers without that filtering.
Users are recommended to upgrade to version 4.23.0, which fixes the issue. If users are on the 4.22.x releases stream, then they are suggested to upgrade to 4.22.2. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.5. The 4.15.x to 4.17.x and 4.19.x to 4.21.x release lines reached end of life before this issue was resolved and will not receive a fix, so deployments on them must move to a supported release. For deployments that cannot upgrade immediately, do not build the CamelDoclingCustomArguments header from values that originate outside the deployment, remove that header from messages that arrive from outside before they reach a docling endpoint, and make sure that consumers which map incoming message headers drop the Camel header namespace, so that only the route itself chooses the custom arguments.
📍 영향받는 시스템
Apache Camel 4.15.0~4.18.5 미만, 4.19.0~4.22.2 미만 (CLI 모드 Docling 컴포넌트 사용 환경)
⚔️ 공격 벡터
외부 입력이 CamelDoclingCustomArguments 헤더에 전달되거나 헤더 필터링 없이 수신 메시지 헤더가 매핑될 때, 공격자가 절대 경로를 --artifacts-path 등의 인자로 주입
🛡️ 대응 방법
Apache Camel 4.23.0 이상(4.22.x는 4.22.2, 4.18.x는 4.18.5)으로 업그레이드하고, 임시 조치로 외부 값으로 해당 헤더를 구성하지 않도록 하며 외부 메시지의 CamelDoclingCustomArguments 헤더를 제거
🔧 검증 코드
출력된 jar 파일명의 버전이 4.23.0 이상(또는 4.22.2, 4.18.5 등 해당 라인의 패치 버전)이면 조치 완료이며, 파일이 없거나 이전 버전이면 업그레이드가 필요합니다.
find / -name 'camel-docling*.jar' 2>/dev/null | head -5