CVE-2026-83531
Apache Camel: Camel-Dynamic-Router 제어 엔드포인트가 제어 메시지로 제공된 조건자 표현식을 컴파일함
- 게시됨
- 2026. 10. 19.
- 업데이트됨
- 2026. 10. 20.
- CNA 할당 중
- apache
- 증거 관찰됨
- 2026. 10. 19.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H낮음 · 다음 30일
- 백분위수
- 57.9%
- 모델 날짜
- 2026. 10. 25.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
코드 생성의 부적절한 제어('코드 인젝션'), 표현식 언어 구문에 사용되는 특수 요소의 부적절한 중화('표현식 언어 인젝션') 취약점이 Apache Camel에 존재합니다. 이 문제는 Apache Camel 4.4.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 버전에 영향을 미칩니다. 4.4.0에서 도입된 dynamic-router-control 엔드포인트는 라우팅 참여자가 제어 메시지를 전송하여 Dynamic Router 구독을 관리할 수 있게 합니다. 구독 또는 업데이트 요청을 처리할 때 DynamicRouterControlProducer는 수신 메시지로부터 구독 predicate와 이를 컴파일하는 데 사용된 언어의 이름을 가져왔으며, 이는 DynamicRouterControlMessage 본문의 predicate 및 expressionLanguage 필드 또는 CamelDynamicRouterPredicate 및 CamelDynamicRouterExpressionLanguage 헤더에서 가져왔습니다. 그런 다음 DynamicRouterControlService는 CamelContext에서 해당 언어를 확인하고 표현식을 Predicate로 컴파일했으며, 허용 목록도, 옵트인도 없었습니다. 컴파일된 predicate는 채널의 규칙 기반에 추가되었고, 구독이 존재하는 동안 해당 dynamic-router 엔드포인트를 통해 라우팅되는 모든 exchange에 대해 평가되었습니다. 따라서 다른 JVM이나 애플리케이션의 라우팅 참여자에 관한 컴포넌트 문서에 나와 있듯이 외부 전송에서 제어 엔드포인트로 메시지를 전달하는 라우트가 있다면, 해당 전송에서 메시지를 보낼 수 있는 모든 행위자가 자신이 선택한 표현식을 제공할 수 있었고, 이는 Camel 프로세스의 권한으로 평가되었습니다. 클래스패스에서 사용 가능한 모든 표현식 언어를 선택할 수 있었으며, 항상 존재하고 헤더 경로에서 기본값이었던 simple 언어를 포함했기 때문에, 클래스패스에서 선택적 표현식 언어를 제거해도 이 문제를 방지할 수 없었습니다. 악용에는 라우트가 dynamic-router-control 엔드포인트로 전달하는 전송에서 메시지를 보낼 수 있는 능력이 필요하며, 그 외의 인증이나 사용자 상호작용은 필요하지 않습니다. 4.4.0 이전 릴리스는 영향을 받지 않는데, 해당 버전의 제어 채널은 라우트 작성자가 구성한 엔드포인트 URI에서만 predicate 표현식을 가져왔기 때문입니다. 사용자는 이 문제를 수정한 버전 4.23.0으로 업그레이드할 것을 권장합니다. 4.22.x 릴리스 스트림을 사용 중인 사용자는 4.22.1로 업그레이드할 것을 권장합니다. 4.18.x 릴리스 스트림을 사용 중인 사용자는 4.18.5로 업그레이드할 것을 권장합니다. 4.14.x 릴리스 스트림 및 그 이전 버전은 이 문제가 해결되기 전에 지원 종료에 도달하여 수정 사항을 받지 못하므로, 해당 라인에 배포된 환경은 지원되는 릴리스로 이동해야 합니다. 업그레이드 후에는 dynamic-router-control 엔드포인트에서 새로운 allowPredicateFromMessage 옵션이 활성화되지 않는 한 predicate 표현식이나 표현식 언어를 포함하는 제어 메시지는 거부됩니다. 이 옵션은 모든 제어 메시지 발신자가 신뢰할 수 있는 경우에만 활성화하십시오. 즉시 업그레이드할 수 없는 배포 환경의 경우, 신뢰할 수 없거나 공유된 전송에서 dynamic-router-control 엔드포인트로 메시지를 전달하지 마십시오. 제어 메시지가 그러한 전송을 통과해야 하는 경우, 발신자를 인증하고 각 구독의 predicate와 표현식 언어가 수신 메시지에서 가져오는 것이 아니라 라우트에 의해 설정되도록 하십시오. 예를 들어 엔드포인트에 도달하기 전에 CamelDynamicRouterPredicate 및 CamelDynamicRouterExpressionLanguage 헤더를 제거하고 DynamicRouterControlMessage의 predicate 및 expressionLanguage 필드를 비우십시오. 클래스패스에서 선택적 표현식 언어를 제거하는 것은 충분한 우회 방법이 아닙니다. 심층 방어로서 제어 엔드포인트에 공급되는 전송으로 누가 전송할 수 있는지 제한하고, 4.23.0 및 4.22.1에서는 dynamic-router 엔드포인트의 allowedSchemes 옵션을 설정하여 구독의 destinationUri가 지정할 수 있는 엔드포인트를 제한하십시오.
소스
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.