
Reprodutor de prova de conceito executável para CVE-2026-79984, uma path traversal no Apache Camel camel-mina-sftp, com fixtures de servidor SFTP malicioso e builds afetados vs. corrigidos.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o consumidor mina-sftp — que
deriva da mesma classe base RemoteFileConsumer que os demais consumidores de arquivos remotos — constrói o caminho
remoto absoluto de cada arquivo consultado concatenando o diretório configurado com o nome informado na listagem de
diretório do servidor, sem normalização lexical e sem verificação de contenção. Esse caminho torna-se então o operando
para recuperação (sempre), e para exclusão ou renomeação quando delete=true, move, preMove, moveFailed ou
readLock=rename estão configurados.
Um nome de entrada de diretório SFTP é uma string de protocolo bruta fornecida pelo servidor, portanto um servidor comprometido, malicioso ou multi-inquilino pode informar um nome que não é um único segmento de caminho.
Este é o irmão
mina-sftpdo CVE-2026-79983 (camel-ftp); ambos compartilham a mesma causa raiz e a mesma correção.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina-sftp 4.22.0 (afetado; corrigido 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mina-sftp 3.39.0 (Camel 4.22.0, afetado; controle corrigido 3.40.0 / Camel 4.22.1) |
O
camel-mina-sftpfoi introduzido no Camel 4.18.0, portanto o componente não existe no Camel 4.15.0 empacotado pelo Camel Quarkus de numeração mais recente; este reprodutor usa o Camel Quarkus 3.39.0 (Camel 4.22.0, afetado), com 3.40.0 (Camel 4.22.1) como controle corrigido. Ambos os módulos, portanto, demonstram o comportamento afetado e o corrigido.
A aplicação incorpora um servidor SFTP deliberadamente malicioso (Apache MINA SSHD). Ele serve uma árvore de
diretórios temporária real, mas reescreve, em sua resposta SSH_FXP_READDIR, o nome de um arquivo no diretório consultado /upload para a
string de travessia d/../../outside.txt (por meio de uma sobrescrita de getShortName). O nome não começa com um ponto, portanto
a regra de arquivo oculto do Camel não o captura, e /upload + d/../../outside.txt resolve para /outside.txt, um
nível acima do diretório consultado. Um consumidor mina-sftp simples consulta /upload.
normal.txt quanto o /outside.txt que escapa.normal.txt e ignora a entrada que escapa, registrando
Skipping file as it resolves outside the starting directory: upload/d/../../outside.txt.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Saída esperada na build afetada:
name=[d/../../outside.txt] <<< FILE FROM OUTSIDE THE POLLED DIRECTORY
content: OUTSIDE-SECRET (/outside.txt, a file the consumer should never reach)
name=[normal.txt] (inside)
| Propriedade | Valor |
|---|---|
| Componente | camel-mina-sftp (esquema mina-sftp) |
| CWE | CWE-22 (Limitação Imprópria de um Nome de Caminho a um Diretório Restrito) |
| Severidade | ALTA |
| Vetor de ataque | Um nome de entrada READDIR (fornecido pelo servidor) que não é um único segmento de caminho |
| Impacto | Leitura — e, com delete/move/readLock=rename, exclusão ou renomeação — de arquivos fora do diretório consultado, usando as credenciais do endpoint |
| Versões Afetadas | A partir de 4.18.0 antes de 4.18.5, a partir de 4.19.0 antes de 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24487 |
| Crédito | Dilrevx da NSSL, SJTU |
Aviso: https://camel.apache.org/security/CVE-2026-79984.html
GenericFileConsumer.isWithinStartingDirectory (sobrescrito por RemoteFileConsumer, do qual o consumidor mina-sftp
deriva) compacta o caminho resolvido e verifica, nos limites dos segmentos de caminho, que ele permanece dentro do
diretório consultado; uma entrada que resolva para fora é ignorada com um aviso, enquanto as entradas legítimas ainda são processadas.
Verifique a chave de host do servidor, restrinja o consumidor com filter/antInclude/include para aceitar apenas nomes
de segmento único, e evite delete/move/preMove/moveFailed/readLock=rename contra servidores cujas listagens não são
totalmente confiáveis. Quando possível, restrinja a conta do servidor ao diretório consultado.
Este repositório é publicado para fins educacionais e defensivos: para 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 servidor malicioso e o "segredo" são fixtures locais inertes. Não use este material contra sistemas que você não possui ou opera.