Skip to main content

Como corrigir problemas de segurança em Java enquanto você programa no IntelliJ IDEA

Escrito por
Blog Design IntelliJ IDEA

8 de abril de 2021

0 minutos de leitura

Hoje, a responsabilidade dos desenvolvedores vai muito além de criar a aplicação. Além de desenvolver funcionalidades, é preciso cuidar da manutenibilidade, escalabilidade, confiabilidade e segurança das aplicações. Muitos desenvolvedores não sabem por onde começar quando o assunto é segurança. Além disso, a maioria das empresas ainda conta com uma equipe de segurança dedicada, em vez de integrar essa expertise às equipes de desenvolvimento.

Muitos desenvolvedores praticamente vivem no ambiente de desenvolvimento integrado (IDE). Uma boa IDE é como um canivete suíço: a ferramenta que você usa para quase tudo. Ter tudo o que preciso para criar, executar, testar, depurar e proteger minha aplicação em um só lugar torna uma boa IDE indispensável para muitos desenvolvedores.

O relatório sobre o ecossistema Java da Snyk do ano passado mostra que o IntelliJ IDEA é a IDE mais popular e mais usada no cenário de segurança em Java. Recentemente, a Snyk lançou um novo plugin de análise de vulnerabilidades para IDEs IntelliJ. Vamos ver como integrar a segurança e o desenvolvimento seguro a essa IDE usando o novo plugin.

Mas, antes, veja um resumo do que vamos abordar neste artigo:

Secure Coding with IntelliJ

Recomendo que você coloque o vídeo em tela cheia para conseguir ver os exemplos de código.

Snyk Vulnerability Scanner para IntelliJ IDEA

A Snyk já não tinha um plugin para IntelliJ IDEA?

Sim. Mas o plugin antigo era totalmente focado na análise do Snyk Open Source e ajudava a encontrar e corrigir vulnerabilidades em dependências de código aberto. O novo plugin também integra os recursos recém-lançados do Snyk Code, ajudando desenvolvedores em várias frentes.

Como instalar o plugin da Snyk para IDEs

A maneira recomendada de instalar o plugin é pelo marketplace do IntelliJ IDEA. Basta pesquisar por “snyk” no marketplace de plugins do IntelliJ IDEA para encontrá-lo.

Marketplace de plugins do IntelliJ IDEA exibindo resultados de busca pelo Snyk Vulnerability Scanner e um botão de instalação

Depois de instalar o plugin e reiniciar a IDE, você precisa autenticá-lo. Para usar o plugin, é necessário ter pelo menos uma conta gratuita da Snyk. Se você já tem uma conta da Snyk, basta entrar. Se ainda não conhece a Snyk, o processo de integração vai orientar você na criação de uma conta gratuita.

Integração do Snyk Code com o IntelliJ IDEA

Como mencionei, a versão anterior do plugin da Snyk para IntelliJ IDEA aproveitava apenas os recursos do Snyk Open Source. Ela permitia analisar seus projetos em busca de vulnerabilidades de segurança nas dependências de código aberto. Com o novo plugin, você também pode usar os recursos do Snyk Code junto com a análise do Snyk Open Source. O Snyk Code é um produto de segurança que analisa estaticamente seu código para detectar possíveis construções vulneráveis criadas por você ou pela sua equipe. Isso significa que, com um único plugin, você pode proteger toda a sua aplicação. Vamos experimentar.

Como corrigir vulnerabilidades de segurança no IntelliJ

Depois de analisar minha aplicação, vejo várias seções na tela. A primeira é a já conhecida análise do Snyk Open Source. Ela mostra que incluí bibliotecas — diretas ou transitivas — com vulnerabilidades conhecidas. Uma dessas bibliotecas vulneráveis é o snakeyaml, na versão 1.24. Essa versão está vulnerável a um ataque de negação de serviço. Expliquei como esse ataque funciona e como evitá-lo no artigo Como evitar vulnerabilidades na análise de YAML com snakeyaml em Java.

A solução é bem simples: basta atualizar para a versão 1.26 ou posterior para corrigir a vulnerabilidade. Vale lembrar que a versão com a correção não é necessariamente a mais recente. É a versão mais próxima que não contém a vulnerabilidade. Depois de atualizar a versão no meu arquivo pom e analisar a aplicação novamente, a vulnerabilidade desaparece. As recomendações práticas para corrigir vulnerabilidades fornecidas pelo plugin Snyk para IntelliJ IDEA são uma ótima orientação para resolver o problema.

Painel do IntelliJ IDEA e do Snyk destacando uma vulnerabilidade de negação de serviço no snakeYAML e sua correção na versão 1.26.

Análise de código em busca de vulnerabilidades de segurança

A seção seguinte traz informações sobre vulnerabilidades no código encontradas pelo plugin da Snyk. Os recursos do Snyk Code apontam falhas no meu código que podem causar vulnerabilidades de segurança específicas.

O primeiro problema é uma vulnerabilidade de “Path Traversal”. O plugin da Snyk para IntelliJ IDEA mostra onde está o problema e o fluxo de dados atual. No momento, estou gravando um arquivo em disco sem verificar o nome real do arquivo. Se o nome contiver algo como “../../../textfile.txt”, meu código não salvará o arquivo no local correto. Esse nome percorre os diretórios para trás e sai da pasta de destino. Com isso, o arquivo acaba em algum lugar do sistema onde não deveria estar. Mais importante ainda: dependendo das permissões do processo, ele pode substituir arquivos existentes em qualquer lugar do sistema fora da pasta de destino.

Painel de segurança de código do IntelliJ destacando uma vulnerabilidade de path traversal na linha 50 de UploadController.java, com o fluxo de dados até Files.write em evidência.

Para evitar isso, posso verificar se o caminho canônico do novo arquivo começa com o caminho do destino pretendido, como no exemplo abaixo.

Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
String target = new File(UPLOADED_FOLDER).getCanonicalPath();
if (path.toFile().getCanonicalPath().startsWith(target)) {
   Files.write(path, bytes);
}

Assim, o path traversal deixa de funcionar, pois o arquivo não será salvo fora da pasta de destino. Depois de analisar minha aplicação novamente, vejo que o Snyk Code confirma isso.

Vamos ver outro exemplo. De acordo com a análise do código, criei uma vulnerabilidade de injeção de SQL em MessageController.java, na linha 33. Ao analisar o fluxo de dados, vejo que a injeção de SQL propriamente dita está em MessageRepo.java. É muito útil que o Snyk Code consiga analisar vários arquivos para encontrar esse problema entre arquivos, já que poucas ferramentas têm esse recurso. Por causa do MessageController, a injeção de SQL fica exposta ao mundo externo e representa uma ameaça imediata que preciso corrigir.

Interface do Snyk destacando uma vulnerabilidade de injeção de SQL com um fluxo de dados em cinco etapas pelo código Java do controlador e do repositório.

Agora que conheço o problema, vou corrigir o código em MessageRepo.java. Em vez de concatenar o parâmetro diretamente à consulta, vou usar uma instrução preparada com parâmetros de consulta. Se eu implementar a instrução preparada como no exemplo abaixo e analisar minha aplicação novamente, o plugin deixará de sinalizar a vulnerabilidade.

String query = "SELECT * FROM message WHERE text LIKE ?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, text);
ResultSet result = statement.executeQuery();

Para saber mais sobre como prevenir injeções de SQL, confira também nosso prático guia rápido de prevenção contra injeção de SQL.

Qualidade do código

Além de analisar vulnerabilidades de segurança nas dependências de código aberto e no seu próprio código, o plugin da Snyk para IntelliJ IDEA também pode ajudar você a melhorar a qualidade do código.

No exemplo abaixo, o plugin da Snyk aponta que não estou fechando algumas conexões. Isso pode causar vazamentos de recursos e deve ser evitado fechando os recursos em um bloco finally.

Plugin do Snyk para IntelliJ exibindo problemas de qualidade de código de gravidade média em MessageRepo.java, incluindo avisos de ausência de close em consultas e instruções de banco de dados.

Integre a segurança ao IntelliJ IDEA hoje mesmo

O Snyk Vulnerability Scanner para IntelliJ IDEA é, na prática, uma solução completa para quem desenvolve em Java. Ao combinar a potência da análise do Snyk Open Source com a do Snyk Code, você ganha uma ferramenta poderosa para evitar falhas de segurança na sua aplicação. O recurso de qualidade do código também é um ótimo complemento para a equipe. Você pode configurar o plugin de acordo com suas preferências — por exemplo, desativar a análise de qualidade do código.

Mesmo assim, desenvolvedores Java como você e eu precisam assumir a responsabilidade pelas aplicações que criam. Isso inclui evitar problemas de segurança. Com o plugin da Snyk para IntelliJ IDEA, você pode fazer isso com praticidade, usando sua IDE favorita. Que tal experimentar?

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.

Leia mais

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Por que agentes de programação com IA continuam criando falhas de controle de acesso

Agentes de programação com IA podem gerar uma lógica de autorização que compila e passa pela revisão, mas permite que um tenant acesse os dados de outro. Saiba por que é difícil detectar falhas de controle de acesso e como evitá-las.