CVE-2026-66907
Apache Camel: Camel-Google-Storage: o consumidor anexou o nome do objeto remoto ao diretório downloadFileName configurado sem restringir o resultado
- Publicado
- 24 de ago. de 2026
- Atualizado
- 25 de ago. de 2026
- Atribuindo CNA
- apache
- Evidência observada
- 24 de ago. de 2026
CVSS primário
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:NBaixo · próximos 30 dias
- Percentil
- 46,1%
- Data do modelo
- 21 de set. de 2026
EPSS é uma estimativa estatística, não uma certeza ou uma medida de impacto. Combine-o com CVSS, status KEV, exposição e seu ambiente.
Resumo
Vulnerabilidade de travessia de caminho relativo no componente Google Storage do Apache Camel. Este problema afeta o Apache Camel: da versão 4.0.0 até antes da 4.14.9, da versão 4.15.0 até antes da 4.18.4, da versão 4.19.0 até antes da 4.22.0. O consumidor camel-google-storage baixa objetos do Google Cloud Storage para o sistema de arquivos local quando a opção downloadFileName está definida. Essa opção é documentada como uma pasta ou um nome de arquivo e, quando seu valor não contém token de expressão, o consumidor constrói o destino local acrescentando o nome do objeto a ela: evaluateFileExpression define o cabeçalho file-name do Exchange como o nome do objeto remoto e avalia downloadFileName + "/${file:name}". O token ${file:name} retorna o cabeçalho file-name literalmente, ao contrário de ${file:onlyname}, que aplica FileUtil.stripPath a ele. A string resultante era passada diretamente para new File(result) e blob.downloadTo(file.toPath()) sem normalização lexical e sem verificação de que o destino permanecia dentro do diretório configurado. O nome do objeto não é um dado controlado pela rota: o consumidor lista o bucket, itera sobre cada blob retornado e cria um exchange por objeto a partir de blob.getBlobId().getName() literalmente, e a opção filter, que poderia restringir esses nomes, não é aplicada de forma alguma, a menos que tenha sido explicitamente definida. Os nomes de objetos do Google Cloud Storage são chaves UTF-8 opacas que o serviço armazena e lista exatamente como foram escritas, sem canonicalização no lado do servidor, e uma barra (/) é apenas uma convenção de exibição para pseudodiretórios; portanto, uma chave contendo segmentos de diretório-pai sobrevive intacta ao ciclo de ida e volta. Um nome de objeto contendo esses segmentos, portanto, resolvia para um local fora do diretório downloadFileName configurado, permitindo que qualquer pessoa capaz de influenciar os nomes presentes no bucket consumido fizesse o Camel criar ou sobrescrever um arquivo em um local de sua escolha, com os privilégios do processo do Camel. Dependendo do que o processo pode gravar, sobrescrever um arquivo fora do diretório de download pode escalar além da perda de integridade desse arquivo. A opção downloadFileName é um parâmetro comum do consumidor e não carrega marcador de segurança; portanto, nada sinalizava aos usuários que seu valor não estava sendo imposto como limite de contenção. O defeito é exclusivo do consumidor; o produtor não possui destino de download para arquivo. Os outros consumidores de download de arquivos do Camel — camel-file, camel-ftp, camel-smb, camel-mina-sftp, camel-azure-files e os caminhos de download do Azure Storage — já restringiam seus downloads locais ao diretório configurado usando uma verificação de limite de segmento de caminho; camel-google-storage era o destino de download de armazenamento de objetos restante não coberto por esse trabalho. Recomenda-se que os usuários atualizem para a versão 4.22.0, que corrige o problema. Se os usuários estiverem no fluxo de versões LTS 4.14.x, sugere-se atualizar para 4.14.9. Se os usuários estiverem no fluxo de versões 4.18.x, sugere-se atualizar para 4.18.4. Para implantações que não podem atualizar imediatamente, defina a opção filter como uma expressão regular que aceite apenas nomes de objetos simples de segmento único, de modo que qualquer nome que contenha separador de caminho ou segmento de diretório-pai seja excluído antes que um exchange seja criado; observe que nenhuma filtragem é aplicada quando a opção fica sem definição e que a expressão é comparada com o nome completo do objeto. Como alternativa, atribua a downloadFileName uma expressão explícita que não propague o caminho remoto, por exemplo, uma baseada em ${file:onlyname} em vez do implícito ${file:name}, lembrando que um downloadFileName contendo uma expressão é tratado como controlado pelo autor da rota e não é coberto pela verificação de contenção adicionada na correção. Como defesa em profundidade, trate os nomes de objetos em qualquer bucket gravável externamente como entrada não confiável e não derive caminhos do sistema de arquivos local a partir deles.
Uso responsável
Use informações de vulnerabilidade apenas em sistemas que você possui ou está autorizado a testar. O Kitploit vincula-se a metadados de pesquisa pública e não armazena código de exploração ou cargas maliciosas.