CVE-2026-95664
Apache Camel: Camel-AWS2-S3 프로듀서가 CamelAwsS3Key 헤더의 신뢰할 수 없는 S3 객체 키를 단순 표현식으로 평가함
- 게시됨
- 2026. 10. 26.
- 업데이트됨
- 2026. 11. 2.
- CNA 할당 중
- apache
- 증거 관찰됨
- 2026. 10. 30.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N낮음 · 다음 30일
- 백분위수
- 57.7%
- 모델 날짜
- 2026. 10. 31.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Apache Camel AWS2-s3 컴포넌트의 표현식 언어 구문에 사용되는 특수 요소의 부적절한 중화('Expression Language Injection') 취약점. 이 문제는 Apache Camel 4.8.0부터 4.18.5 이전, 4.19.0부터 4.22.2 이전 버전에 영향을 미칩니다. 업로드, 읽기 또는 삭제하는 객체에 대해 camel-aws2-s3 프로듀서는 CamelAwsS3Key 메시지 헤더에서 키를 가져오며, 해당 헤더가 없을 때만 엔드포인트에 구성된 keyName 옵션으로 대체합니다. 4.8.0부터 AWS2S3Utils.determineKey()는 결과 값에 ${ 또는 $simple{가 포함된 경우 해당 값을 Simple 언어에 전달하여 라우트가 동적 키를 사용할 수 있도록 했으며, 이 평가는 구성된 옵션뿐 아니라 헤더에서 가져온 값에도 적용되었습니다. 그러나 헤더는 라우트 구성이 아닙니다. aws2-s3 컨슈머는 생성하는 익스체인지에 CamelAwsS3Key를 설정할 때 읽은 객체의 키, 즉 버킷에 있는 객체의 이름을 사용합니다. 따라서 하나의 aws2-s3 엔드포인트에서 소비하여 다른 엔드포인트로 프로듀스하는 것 외에는 아무것도 하지 않는 라우트에서도 소비된 각 객체의 이름이 프로듀서에 도달했고, 두 마커 중 하나를 포함하는 이름은 라우트 작성자가 어떤 평가도 요청하지 않았음에도 표현식으로 평가되었으며, 헤더가 우선하기 때문에 프로듀서에 keyName을 구성해도 이를 방지하지 못했습니다. 라우트가 다른 메시지 콘텐츠에서 헤더로 복사한 키도 같은 방식으로 평가되었습니다. 따라서 그러한 라우트가 소비하는 버킷의 객체 이름을 선택할 수 있는 사람, 일반적으로 해당 버킷에 업로드할 수 있는 주체는 원하는 Simple 표현식을 Camel 프로세스에서 평가되도록 할 수 있었습니다. Simple 언어는 일반적으로 자격 증명을 담고 있는 JVM 시스템 속성, 환경 변수 및 구성 속성을 읽을 수 있으며, camel-bean이 클래스패스에 있는 경우 레지스트리의 빈에 대한 메서드를 호출할 수 있습니다. 평가된 결과는 프로듀서가 사용하는 키가 되었으므로, 값을 다시 읽으려면 대상 버킷의 객체 이름을 볼 수 있는 능력이 추가로 필요했지만, 메서드 호출은 그러한 능력 없이도 효과를 발휘했습니다. 소비되는 버킷의 객체 이름을 지정해야 한다는 필요성과 함께, 이것이 심각도가 중간으로 평가되는 이유입니다. 버킷 이름도 동일한 평가를 거쳤지만, 컨슈머는 자신의 엔드포인트에 구성된 버킷만 버킷 헤더에 넣을 뿐 원격 객체에서 파생된 값을 넣지 않으므로, 버킷 이름은 이 경로로 도달할 수 없었습니다. 4.8.0 이전 릴리스는 헤더의 키를 그대로 사용했으며 영향을 받지 않습니다. 사용자는 이 문제를 수정한 버전 4.23.0으로 업그레이드할 것을 권장합니다. 4.22.x 릴리스 스트림을 사용하는 경우 4.22.2로 업그레이드할 것을 권장합니다. 4.18.x 릴리스 스트림을 사용하는 경우 4.18.5로 업그레이드할 것을 권장합니다. 4.8.x부터 4.17.x, 그리고 4.19.x부터 4.21.x 릴리스 라인은 이 문제가 해결되기 전에 지원이 종료되었으며 수정 사항을 받지 못하므로, 해당 릴리스에 배포된 환경은 지원되는 릴리스로 이동해야 합니다. 업그레이드 후에는 메시지 헤더를 통해 제공된 키 또는 버킷 이름이 문자 그대로 사용되므로, 평가되지 않은 Simple 표현식을 CamelAwsS3Key 또는 CamelAwsS3OverrideBucketName 헤더에 넣었던 라우트는 대신 라우트 내에서 이를 평가해야 합니다(예: setHeader와 simple() 사용). 또는 엔드포인트의 keyName 또는 bucketName 옵션으로 구성해야 합니다. 즉시 업그레이드할 수 없는 배포 환경의 경우, 객체 이름이나 기타 신뢰할 수 없는 메시지 콘텐츠에서 파생된 키가 검사 없이 aws2-s3 프로듀서에 도달하지 않도록 하십시오. aws2-s3 컨슈머에서 aws2-s3 프로듀서로 익스체인지를 전달하는 라우트에서는 프로듀서 전에 removeHeader(“CamelAwsS3Key”)로 CamelAwsS3Key 헤더를 제거하여 엔드포인트에 구성된 keyName이 사용되도록 하거나, CamelAwsS3Key 헤더에 ${ 또는 $simple{가 포함된 익스체인지를 거부하십시오. 헤더가 keyName보다 우선하므로 keyName만 구성하는 것은 우회 방법이 아닙니다. 심층 방어로서, Camel 라우트가 소비하는 버킷에는 신뢰할 수 있는 주체만 쓸 수 있도록 허용하십시오.
소스
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.