
Reprodutores de prova de conceito para a vulnerabilidade de path traversal do Apache Camel (CVE-2026-66906) em camel-azure-storage-blob, demonstrando gravação arbitrária de arquivos via path traversal no nome do blob, com detalhes das versões afetadas e corrigidas.
downloadBlobToFile path traversalReprodutores de prova de conceito executáveis para a mesma vulnerabilidade do Apache Camel, um por runtime:
| 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 (inclui Camel 4.20.0) |
Ambas são versões afetadas (o problema é corrigido em 4.14.9 / 4.18.4 / 4.22.0), e ambas demonstram o mesmo defeito: o consumidor do camel-azure-storage-blob baixa blobs do contêiner para o sistema de arquivos local, no diretório nomeado pela opção fileDir, construindo o destino local como new File(fileDir, client.getBlobName()) — o nome remoto do blob exatamente como o SDK do Azure o relatou, com nenhuma normalização e nenhuma verificação de que o local resolvido permanece dentro de fileDir. O nome do blob não é controlado pela rota: o consumidor lista o contêiner (BlobConsumer.createBatchExchangesFromContainer) e baixa todos os blobs. Portanto, um blob cujo nome contenha segmentos ../ é gravado fora de fileDir (CWE-22, path traversal → escrita arbitrária de arquivos).
Cada subdiretório é autocontido (com seu próprio Dockerfile, docker-compose.yml que inicia um emulador Azurite e README). Em resumo, para qualquer um deles:
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
Saída esperada em uma compilação afetada (ambas as variantes):
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 |
|---|---|
| Componente | camel-azure-storage-blob (Spring Boot: camel-azure-storage-blob-starter; Quarkus: camel-quarkus-azure-storage-blob) |
| CWE | CWE-22 (Limitação Incorreta de um Nome de Caminho a um Diretório Restrito — Path Traversal) |
| Vetor de ataque | Um blob de contêiner cujo nome contém segmentos ../, baixado pelo consumidor com fileDir definido |
| Impacto | Escrita arbitrária de arquivos fora do diretório fileDir configurado |
| Versões Afetadas | De 4.0.0 antes de 4.14.9, de 4.15.0 antes de 4.18.4, de 4.19.0 antes de 4.22.0 |
| Versões Corrigidas | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-23942 |
| Crédito | n0mi1k; Hiep Nguyen |
O consumidor agora resolve e restringe o destino do download ao diretório fileDir configurado (via AzureFileNameHelper.resolveWithinDirectory), rejeitando nomes de blob que tentariam escapar dele. A mesma correção cobre os componentes irmãos camel-azure-storage-datalake (CVE-2026-60093).
Este repositório é publicado para fins educacionais e defensivos: ajudar os usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. O arquivo gravado é um marcador benigno em /tmp. Não use este material contra sistemas que você não possui ou opera.