
CVE-2026-46590 재현기: Apache Camel camel-pqc key-lifecycle 안전하지 않은 역직렬화(FileBasedKeyLifecycleManager의 레거시 .key 마이그레이션이 ObjectInputStream을 통해 수행됨), CVE-2026-40048의 불완전한 수정(4.18.3/4.21.0에서 수정됨)
동일한 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현 코드로, 런타임별로 하나씩 제공됩니다:
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-pqc 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (Camel 4.20.0 번들 포함) |
둘 다 영향을 받는 버전이며(4.18.3 / 4.21.0에서 수정됨), 동일한 결함을 보여줍니다:
FileBasedKeyLifecycleManager는 양자 내성(post-quantum) 키를 PKCS#8/X.509 JSON으로 저장하지만, 레거시
(Java 직렬화) 키 파일은 여전히 원시 ObjectInputStream을 사용해 ObjectInputFilter 없이 다시 마이그레이션합니다 — 이는
CVE-2026-40048의 불완전한 수정 잔재입니다. getKey(keyId)는 migrateLegacyKey()로 폴백하며, 이 메서드는 공격자가
심어 둔 <keyId>.key 파일을 역직렬화합니다. KeyPair로의 캐스트는 readObject()가 반환된 후에만
발생하므로, 조작된 객체가 먼저 실행됩니다 (CWE-502).
각 하위 디렉터리는 자체 Dockerfile, docker-compose.yml, README를 갖춘 독립적인 프로젝트입니다. 간단히
말해, 둘 중 어느 쪽이든:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
보안 권고: https://camel.apache.org/security/CVE-2026-46590.html
이 재현 코드는 공개적으로 알려졌고 수정된 취약점에 대해 보안 연구 및 승인된 테스트 전용으로 제공됩니다. 명시적인 허가 없이 시스템을 대상으로 사용하지 마십시오.
| 속성 | 값 |
|---|
| 구성 요소 | camel-pqc |
| 영향받는 클래스 | org.apache.camel.component.pqc.lifecycle.FileBasedKeyLifecycleManager#migrateLegacyKey (migrateLegacyMetadata 포함), 그리고 HashicorpVault / AwsSecretsManager 형제 클래스들 |
| CWE | CWE-502 (신뢰할 수 없는 데이터의 역직렬화) |
| 영향 | 레거시 키/메타데이터 값을 읽을 때 키 관리 애플리케이션에서 코드 실행 |
| 영향받는 버전 | 4.18.0 이상 4.18.3 미만, 4.19.0 이상 4.21.0 미만 (camel-pqc 키 관리자는 4.16.0 이전에는 존재하지 않으므로 4.14.x는 영향받지 않음) |
| 수정된 버전 | 4.18.3, 4.21.0 |
| JIRA | CAMEL-23726 (PR apache/camel#23912, 백포트 #23914) |
| 공로 | Yu Bao (PayPal) |