
CVE-2026-85313을 재현하는 실행 가능한 Spring Boot 개념 증명으로, Apache Camel camel-jetty의 enableCORS가 자격 증명과 함께 모든 origin을 반사하는 문제와 수정된 버전의 대조군을 포함합니다.
enableCORS가 자격 증명이 포함된 모든 출처 접근을 허용함Jetty 엔드포인트에서 **enableCORS=true**를 설정하면 Jetty의 CrossOriginFilter가 기본 설정으로 설치되어, 모든 출처를 반영하고 자격 증명을 허용하는 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 도구입니다. CORS를 요청하기만 한 운영자는 모든 출처의 페이지가 엔드포인트에 자격 증명이 포함된 교차 출처 요청을 보내고 응답을 읽을 수 있는 정책을 얻게 됩니다. 반영된 출처와 Access-Control-Allow-Credentials: true의 조합은 Fetch 표준이 *로 표현하는 것을 거부하는 바로 그 자격 증명 포함 모든 출처 구성이며, 반영은 그 규칙을 우회하는 일반적인 방법입니다(CWE-942).
Spring Boot 전용. 이 재현 도구는 단일 Camel Spring Boot 모듈을 제공합니다. 결함은 Jetty HTTP 서버를 내장한
camel-jetty에 있습니다. Camel Quarkus에는camel-quarkus-jetty확장이 없습니다 — Quarkus는 Vert.x(platform-http)를 통해 HTTP를 제공합니다 — 따라서 재현할 Quarkus 대응물이 없습니다. (동반 권고문 CVE-2026-85316은platform-http-vertx의 동일한 결함 유형을 다룹니다.) Spring Boot 모듈은 영향을 받는 동작 및 수정된 동작을 보여줍니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-jetty 4.22.0 (영향 받음; 수정 버전 4.22.1), Jetty 12.1.11 |
하나의 프로세스에서 두 개의 Jetty 서버가 실행됩니다: 취약한 엔드포인트 /protected(포트 8081)는 enableCORS=true로 선언되고, 검증자 엔드포인트 /exploit/attack(포트 8080)은 공격자의 브라우저 역할을 합니다. 각 호출에서 검증자는 배포에서 승인한 적 없는 출처인 Origin: https://evil.example을 담아 /protected로 교차 출처 GET을 보내고, 돌아오는 CORS 헤더를 보고합니다.
Access-Control-Allow-Origin: https://evil.example을 반영하고 또한 Access-Control-Allow-Credentials: true를 반환합니다 — 모든 출처가 자격 증명이 포함된 응답을 읽을 수 있습니다.Access-Control-Allow-Credentials가 더 이상 전송되지 않습니다.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: ACAO reflected + ACAC: true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85313-jetty-cors-credentials-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: ACAO reflected, ACAC absent; >>> Not exploited
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-jetty (JettyHttpComponent, enableCORS) |
| CWE | CWE-942 (신뢰할 수 없는 도메인을 허용하는 관대한 교차 도메인 정책) |
| 심각도 | MEDIUM |
| 공격 벡터 | 임의의 오리진에 있는 페이지가 enableCORS=true만으로 구성된 엔드포인트로 자격 증명이 포함된 교차 오리진 요청을 보냄 |
| 영향 | 엔드포인트가 공격자의 오리진을 반영하고 자격 증명을 허용하므로, 공격자 페이지가 인증된 응답을 읽을 수 있음 |
| 영향받는 버전 | 4.0.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24450 |
| 크레딧 | Claude Security Scan Tool |
권고문: https://camel.apache.org/security/CVE-2026-85313.html
JettyHttpComponent는 이제 enableCORS가 설정되면 자체 CORS 기본값을
적용합니다. allowCredentials는 운영자가 명시적으로 구성하지 않는 한 기본값이 false입니다. 오리진 반영은
그대로 유지되므로, CORS를 활성화해도 자격 증명이 없는 요청에 대해서는 계속 동작합니다. 자격 증명이 포함된
교차 오리진 요청이 필요한 운영자는 filterInit.allowCredentials=true를 설정하고 filterInit.allowedOrigins에
오리진을 명시해야 하며, 명시하지 않으면 경고를 받습니다.
enableCORS가 설치하는 것에 의존하지 말고 CrossOriginFilter 매개변수를 명시적으로 구성하십시오.
filterInit.allowedOrigins에 허용할 오리진을 명시하고, 오리진을 명시하지 않았다면 filterInit.allowCredentials를
끄십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다. Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하고,
업그레이드로 문제가 해결되는지 검증할 수 있도록 돕기 위해서입니다. "공격자" 오리진은 무해한 자리 표시자
(https://evil.example)이며, 엔드포인트와 프로브 모두 재현 환경 내부에서 실행됩니다. 소유하거나 운영하지 않는
시스템에 이 자료를 사용하지 마십시오.