
Apache Camel의 camel-azure-storage-blob 경로 순회 취약점(CVE-2026-66906)에 대한 개념 증명(PoC) 재현 코드로, blob 이름 순회를 통한 임의 파일 쓰기를 시연하며 영향을 받는 버전과 수정된 버전 정보를 포함합니다.
downloadBlobToFile 경로 탐색동일한 Apache Camel 취약점에 대한 실행 가능한 PoC 재현 코드로, 런타임별로 하나씩 제공됩니다:
두 버전 모두 영향을 받는 버전입니다(문제는 4.14.9 / 4.18.4 / 4.22.0에서 수정됨). 두 버전 모두 동일한 결함을 보여줍니다: camel-azure-storage-blob 컨슈머는 컨테이너 블롭을 fileDir 옵션이 가리키는 디렉터리의 로컬 파일시스템에 다운로드하며, 로컬 대상 경로를 new File(fileDir, client.getBlobName())로 구성합니다 — 즉 Azure SDK가 보고한 원격 블롭 이름을 그대로 사용하며, 어떠한 정규화도 없고 해석된 위치가 fileDir 내부에 머무르는지에 대한 검사도 없습니다. 블롭 이름은 라우트로 제어되지 않습니다: 컨슈머는 컨테이너를 나열하고(BlobConsumer.createBatchExchangesFromContainer) 모든 블롭을 다운로드합니다. 따라서 이름에 ../ 세그먼트가 포함된 블롭은 fileDir 외부에 기록됩니다(CWE-22, 경로 탐색 → 임의 파일 쓰기).
각 하위 디렉터리는 자체적으로 완결되어 있습니다(각자의 Dockerfile, Azurite 에뮬레이터를 기동하는 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
영향을 받는 빌드(두 변형 모두)에서의 예상 출력:
Files inside the intended download directory /app/downloads:
- report.txt
File written OUTSIDE it, at /tmp/pwned-66906.txt: true
content: PWNED via path traversal — CVE-2026-66906
>>> PROVEN: the blob name's ../ segments escaped the configured fileDir directory ... : true
보안 권고: https://camel.apache.org/security/CVE-2026-66906.html
이제 컨슈머는 다운로드 대상 경로를 구성된 fileDir 디렉터리 내로 해석하고 제한합니다(AzureFileNameHelper.resolveWithinDirectory 사용). 이 디렉터리를 벗어나려는 블롭 이름은 거부됩니다. 동일한 수정이 형제 구성 요소인 camel-azure-storage-datalake(CVE-2026-60093)에도 적용됩니다.
이 저장소는 교육 및 방어 목적으로 게시되었습니다: Apache Camel 사용자가 취약점을 이해하고, 자신이 영향을 받는지 확인하며, 업그레이드로 문제가 해결되는지 검증하도록 돕기 위함입니다. 기록되는 파일은 /tmp 아래의 무해한 표시 파일입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.
| 런타임 | 디렉터리 | 스택 |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-azure-storage-blob 4.18.2 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (Camel 4.20.0 번들 포함) |
| 속성 | 값 |
|---|
| 구성 요소 | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (제한된 디렉터리로의 경로명 제한 미흡 — 경로 탐색) |
| 공격 벡터 | 이름에 ../ 세그먼트가 포함된 컨테이너 블롭이 fileDir이 설정된 컨슈머에 의해 다운로드됨 |
| 영향 | 구성된 fileDir 디렉터리 외부에 임의 파일 쓰기 가능 |
| 영향받는 버전 | 4.0.0 이상 4.14.9 미만, 4.15.0 이상 4.18.4 미만, 4.19.0 이상 4.22.0 미만 |
| 수정된 버전 | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| 공로 | n0mi1k; Hiep Nguyen |