Como mitigar vulnerabilidades de path traversal em Java com Snyk Code
6 de março de 2023
0 minutos de leituraPath traversal é um tipo de vulnerabilidade de segurança que pode ocorrer quando um aplicativo ou serviço web permite que um invasor acesse arquivos ou diretórios do servidor que estão fora da estrutura de diretórios prevista. Isso pode levar à leitura ou modificação não autorizada de dados confidenciais. No contexto de uploads de arquivos, uma vulnerabilidade de path traversal pode ocorrer quando um aplicativo não valida corretamente o caminho do arquivo especificado pelo usuário, permitindo que o invasor envie um arquivo malicioso cujo nome lhe dê acesso a arquivos restritos no servidor.
Prevenir path traversal em uploads de arquivos é fundamental para a segurança de aplicativos Java, pois ajuda a proteger dados confidenciais e impede o acesso não autorizado a arquivos e diretórios restritos. Neste artigo, vamos explorar em mais detalhes o path traversal em uploads de arquivos e mostrar como prevenir essa vulnerabilidade em aplicativos Java com o Snyk Code.
Seja você desenvolvedor ou apenas queira aprender mais sobre segurança em Java, este artigo traz informações e insights para ajudar a manter seus aplicativos Java seguros.
Entenda o path traversal em uploads de arquivos
Imagine um aplicativo que permite aos usuários enviar fotos de perfil. O aplicativo armazena as fotos em um diretório no servidor, como /images/profiles/. Se o aplicativo não validar corretamente o nome de arquivo especificado pelo usuário, um invasor poderá enviar um arquivo malicioso com um nome como ../../etc/passwd. Isso permitiria que ele acessasse arquivos confidenciais do sistema fora da estrutura de diretórios prevista.
Veja o exemplo abaixo de um aplicativo Spring Boot que usa Thymeleaf.
Formulários web são muito comuns para o upload de imagens. No upload, usamos o originalFilename do MultipartFile recebido. Se interceptarmos e inspecionarmos a chamada HTTP POST, veremos que filename é apenas metadado nesta solicitação HTTP, como mostrado na linha 24.

Com as ferramentas certas, é fácil alterar o nome do arquivo para o que quisermos! Ao mudar o nome para ../../../../../../../etc/passwd, nosso código enviará o arquivo para images/profiles/../../../../../../../etc/passwd. O caminho percorrerá os diretórios até chegar à raiz, e o arquivo substituirá /etc/passwd.
Como o Snyk Code detecta path traversal
Snyk Code é uma ferramenta SAST em tempo real que ajuda desenvolvedores Java a identificar vulnerabilidades nos aplicativos, incluindo path traversal em uploads de arquivos. A ferramenta usa análise estática baseada em um modelo avançado de machine learning para verificar seu código e identificar possíveis riscos de segurança.
Em relação ao path traversal, Snyk Code ajuda você a identificar trechos do código que usam caminhos de arquivo especificados pelo usuário sem a validação adequada. Por exemplo, ao conectar meu repositório do GitHub ao Snyk, o Snyk Code encontrou o problema de path traversal para mim na interface web.

Em seguida, usei o plugin do Snyk para IntelliJ IDEA com o Snyk Code ativado. A análise na minha máquina local durante o desenvolvimento já identificou o problema de path traversal no upload de arquivos. Além disso, também sugeriu algumas possíveis medidas de mitigação.

Com o Snyk Code, você pode identificar e corrigir proativamente essas vulnerabilidades de path traversal antes que sejam exploradas, ajudando a garantir a segurança do seu aplicativo e dos dados que ele processa.
Em resumo, o Snyk Code ajuda desenvolvedores Java a identificar vulnerabilidades de path traversal em uploads de arquivos, analisando o código e apontando trechos sem a validação adequada. Isso ajuda a garantir a segurança do seu aplicativo e a protegê-lo contra possíveis ataques.
Como mitigar path traversal em uploads de arquivos
A maneira mais fácil de corrigir uma vulnerabilidade de path traversal é evitar usar file.getOriginalFilename(). Se você gerar o nome do arquivo, terá controle total sobre o local em que ele será armazenado, pois esse local não será influenciado pela entrada do usuário.
No entanto, se você quiser preservar o nome original do arquivo, precisamos verificar se o local em que ele será armazenado é o local desejado. O Snyk Code (veja o exemplo do plugin para IDE) já indicou que podemos normalizar o caminho com normalize.
Vamos alterar o exemplo anterior para verificar se o caminho normalizado começa, pelo menos, com a pasta de upload prevista. Assim, evitamos problemas de path traversal.
Nota do editor: 31 de março de 2023
Este bloco de código foi atualizado.
É essencial prevenir vulnerabilidades de path traversal.
As vulnerabilidades de path traversal são uma ameaça séria à segurança de aplicativos web Java e estão entre os principais problemas de segurança encontrados pelo Snyk em código Java.
Desenvolvedores precisam conhecê-las e entender como preveni-las. Com a validação adequada e ferramentas como o Snyk Code para identificar possíveis vulnerabilidades, é possível ajudar a garantir a segurança dos aplicativos e protegê-los contra os riscos de ataques de path traversal. É fundamental lembrar que segurança é um processo contínuo: manter-se atento e agir proativamente para identificar e mitigar vulnerabilidades é essencial para preservar a segurança dos seus aplicativos Java.
Corrija suas vulnerabilidades de path traversal e ganhe brindes incríveis
O hackathon de correção de vulnerabilidades do Snyk, The Big Fix, está acontecendo de 14 de fevereiro a 14 de março. Participe da competição e corrija vulnerabilidades nos seus projetos pessoais ou em um projeto de código aberto que você usa com frequência. Se você acabou de descobrir uma vulnerabilidade de path traversal no seu aplicativo, inscreva seu projeto no The Big Fix. Corrigir uma única vulnerabilidade dá direito a uma camiseta exclusiva do Big Fix 2023. Quem fizer mais correções neste ano concorrerá a prêmios ainda mais incríveis.
E aí, está esperando o quê? Participe do The Big Fix e comece a proteger seu aplicativo hoje mesmo.

Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.



