
Воспроизводители Proof-of-concept для уязвимости обхода пути в Apache Camel (CVE-2026-66906) в camel-azure-storage-blob, демонстрирующие произвольную запись файлов через обход имени blob, с указанием затронутых и исправленных версий.
downloadBlobToFile обход путиРабочие proof-of-concept репродюсеры одной и той же уязвимости Apache Camel — по одному на каждый рантайм:
| Runtime | Directory | Stack |
|---|
| 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 (bundles Camel 4.20.0) |
Обе версии — затронутые (проблема исправлена в 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, docker-compose.yml, поднимающим эмулятор Azurite, и 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
| Property | Value |
|---|---|
| Компонент | 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 |
Консультация: https://camel.apache.org/security/CVE-2026-66906.html
Теперь потребитель сопоставляет и ограничивает целевой путь загрузки каталогом fileDir (через AzureFileNameHelper.resolveWithinDirectory), отклоняя имена блобов, которые могли бы выйти за его пределы. Это же исправление распространяется на родственные компоненты camel-azure-storage-datalake (CVE-2026-60093).
Этот репозиторий опубликован в образовательных и защитных целях: помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление устраняет её. Записываемый файл — безвредная метка в /tmp. Не используйте этот материал против систем, которыми вы не владеете и которые не эксплуатируете.