
CVE-2026-85300에 대한 실행 가능한 Spring Boot 및 Quarkus 재현 프로그램으로, camel-pqc가 허용적인 umask에서 파생된 파일 권한으로 개인 키를 작성하는 것을 시연하고 수정 사항을 검증합니다.
camel-pqc의 FileBasedKeyLifecycleManager가 생성된 키 자료를 소유자로 제한하지 않고 프로세스 기본 umask가 만들어낸 권한으로 디스크에 기록했던 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현기입니다. umask가 그룹 또는 기타 사용자의 읽기를 허용하는 호스트(흔한 022)에서는 암호화되지 않은 개인 키를 다른 로컬 계정이 읽을 수 있었습니다. 노출 대상은 원격 발신자가 아니라 로컬 주체이지만, 해당되는 경우 그 결과는 완전합니다. 개인 키를 소유하면 배포가 그 키로 수행하는 모든 서명과 키 교환이 무력화됩니다.
| 런타임 | 디렉터리 | 스택 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-pqc 4.22.0 (영향받음; 4.22.1에서 수정됨) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-pqc (Camel 4.22.0, 영향받음; 수정된 대조군 CQ 3.40.0 / Camel 4.22.1) |
두 모듈 모두 영향받는 동작 및 수정된 동작을 보여줍니다. 두 모듈 모두 결함의 전제인 umask 022(흔한 기본값)에서 실행됩니다.
드라이버는 실제 FileBasedKeyLifecycleManager를 사용합니다. RSA 키 쌍을 새 디렉터리에 저장하고
(manager.storeKey("k1", keyPair, new KeyMetadata("k","RSA"))) 그런 다음 기록된 k1.private.json의 POSIX 권한을 읽습니다.
umask 022에서 rw-r--r--(0644) — 따라서 그룹과 기타 사용자가 암호화되지 않은 개인 키를 읽을 수 있습니다.rw-------(0600, 소유자 전용)로 기록됩니다.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: rw-r--r-- private key; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
umask 022 && java -jar target/cve-2026-85300-pqc-key-permissions-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw------- ; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): rw-r--r-- private key
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
umask 022 && java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: rw-------
| 속성 | 값 |
|---|---|
| 구성 요소 | camel-pqc (FileBasedKeyLifecycleManager.storeKey) |
| CWE | CWE-276 (잘못된 기본 권한) |
| 심각도 | MEDIUM |
| 공격 벡터 | 허용적인(예: 022) umask가 설정된 호스트에서 키 디렉터리를 읽을 수 있는 로컬 계정 |
| 영향 | 암호화되지 않은 개인 키가 다른 로컬 계정에 노출됨 |
| 영향받는 버전 | 4.12.0부터 4.18.5 이전, 4.19.0부터 4.22.1 이전 |
| 수정된 버전 | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24447 |
| 크레딧 | Claude Security Scan Tool |
권고문: https://camel.apache.org/security/CVE-2026-85300.html
Quarkus의 영향받는 모듈은 CQ 3.39.0(Camel 4.22.0)을 기반으로 빌드됩니다:
camel-quarkus-pqc가 처음으로 영향받는 Camel 버전에 매핑되는 지점이 바로 여기입니다(CQ 3.29.0 / Camel 4.15.0은 여기서 사용되는 파일 기반 키 수명 주기 관리자보다 앞선 버전입니다).
FileBasedKeyLifecycleManager는 이제 쓰기 전에 키 디렉터리와 각
개인 키 파일을 소유자로 제한하며(setPosixFilePermissions를 통한 rwx------ / rw-------, 비 POSIX 파일 시스템의 경우
java.io.File 폴백 사용), 재작성 시 기존에 존재하던 모든 사용자가 읽을 수 있는 키 파일을 강화합니다
(파일은 재생성되지 않고 잘리므로, 그렇지 않으면 이전 권한이 유지됩니다). 이미 허용적인 권한으로 작성된
키 자료는 노출된 것으로 간주하고 교체해야 합니다.
키 디렉터리를 서비스 계정만 접근할 수 있는 경로에 배치하고 프로세스 umask를 강화하십시오. 이미 허용적인 권한으로 작성된 키는 노출된 것으로 간주하고 교체하십시오.
이 저장소는 교육 및 방어 목적으로 게시되었습니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며, 업그레이드가 문제를 해결하는지 검증할 수 있도록 돕기 위함입니다. RSA 키 쌍은 프로세스 내에서 임시 디렉터리에 생성되며 검사 후 제거됩니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.