
camel-http의 OAuth2 토큰 캐시가 scope, resource 및 토큰 엔드포인트를 무시하는 CVE-2026-85317을 재현하는 실행 가능한 Spring Boot 개념 증명(proof-of-concept)과 패치된 대조 버전입니다.
camel-http의 OAuth2 클라이언트 토큰 캐시가 — JVM 전역 static 맵인데 — 항목의 키를 (uri, clientId, clientSecret)만으로 구성하여, 실제로 토큰의 형태를 결정하는 필드인 요청된 scope, 리소스 지시자(resource indicator), 토큰 엔드포인트를 누락한 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현기입니다. 따라서 이 필드들만 다른 두 엔드포인트가 캐시 항목을 공유하게 되어, 한 엔드포인트가 다른 scope, 다른 리소스에 대해, 또는 다른 인가 서버에 의해 발급된 토큰을 제공받을 수 있었습니다 — 즉 엔드포인트가 구성된 것보다 더 넓은 권한을 지닌 요청이 되거나, 발급 대상이 아닌 곳에 토큰이 제시되는 결과를 낳습니다(CWE-524).
Spring Boot 전용. 이 재현기는 단일 Camel Spring Boot 모듈을 제공합니다. 결함은
camel-http의 OAuth2 클라이언트에 있으며, 이는camel-quarkus-http확장에도 존재합니다. 그러나 해당 확장의 JVM 패키징에서는 엔드포인트 수준의oauth2*클라이언트 옵션이 Spring Boot에서와 같은 방식으로 적용되지 않습니다(토큰 캐시를 소유하는 OAuth2 요청 인터셉터가 연결되지 않아 토큰 엔드포인트가 호출되지 않음) — 이는 CVE-2026-85251에 문서화된 것과 동일한 제약입니다. Spring Boot 모듈은 영향을 받는 동작 및 수정된 동작을 모두 보여줍니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-http 4.22.0 (영향받음; 4.22.1에서 수정) |
드라이버는 수정 사항 자체의 회귀 테스트(HttpOAuth2TokenCachingTest)를 그대로 반영합니다. 프로세스 내부에서 두 개의 임시 HTTP 서버가 실행됩니다: 베어러 토큰을 발급하는 토큰 엔드포인트와, 그 토큰을 요구하는 **대상(target)**입니다. 검증기(/exploit/attack)는 다음을 수행합니다:
oauth2CacheTokens=true&oauth2Scope=read로 대상에 첫 번째 요청을 보냅니다 — 토큰이 발급되고 캐시됩니다;oauth2Scope=read+write만 다른, 그 외에는 동일한 두 번째 요청을 보냅니다.read 토큰을 재사용합니다 —
토큰 엔드포인트가 사라졌음에도(새 토큰을 발급하는 것이 불가능한 상황에서도) 요청이 성공합니다.HttpHostConnectException).cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: 2nd request 200 (reused read token); >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85317-http-oauth2-token-cache-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: 2nd request HttpHostConnectException; >>> Not exploited
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-http (OAuth2ClientConfigurer, 토큰 캐시) |
| CWE | CWE-524 (민감한 정보를 포함하는 캐시 사용) |
| 심각도 | MEDIUM |
| 공격 벡터 | 배포 환경에서 스코프, 리소스 지시자 또는 토큰 엔드포인트만 다른 여러 OAuth2 엔드포인트를 구성하며, 이들이 JVM 전역 토큰 캐시를 공유함 |
| 영향 | 엔드포인트가 다른 스코프/리소스/인가 서버용으로 발급된 토큰을 제공받음 — 구성된 것보다 넓은 권한이거나, 잘못된 대상에게 토큰이 제시됨 |
| 영향받는 버전 | 4.0.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24456 |
| 크레딧 | Claude Security Scan Tool |
권고문: https://camel.apache.org/security/CVE-2026-85317.html
OAuth2ClientConfigurer는 캐시 키 레코드
OAuth2URIAndCredentials를 확장하여 토큰 엔드포인트, 스코프 및 리소스 지시자를 포함하도록 하므로, 해당 필드 중
하나라도 다른 엔드포인트 간에 항목이 더 이상 공유되지 않습니다.
스코프, 리소스 지시자 또는 토큰 엔드포인트가 다른 엔드포인트를 별도의 JVM에서 실행하여 정적 캐시를 공유하지 않도록 하십시오.
이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며,
업그레이드로 문제가 해결되는지 검증할 수 있도록 돕기 위함입니다. 토큰
(xxx.yyy.zzz), 클라이언트 ID 및 시크릿은 무해한 자리 표시자이며 두 HTTP 서버 모두 프로세스 내에서 실행됩니다. 소유하거나
운영하지 않는 시스템에 이 자료를 사용하지 마십시오.