Skip to main content

Corrija vulnerabilidades no código automaticamente com IA

Escrito por
feature ai ide dark

14 de outubro de 2024

0 minutos de leitura

Na biblioteca de workshops para clientes de SecRel da Snyk, temos um chamado Breaking AI. Esse workshop aborda como assistentes de IA generativa, como copilot e codium, podem ajudar desenvolvedores a escrever código mais rápido. A grande lição do workshop é que assistentes de IA são como desenvolvedores juniores recém-saídos de um bootcamp de programação: superempolgados e prestativos, mas você realmente precisa revisar o código que eles escrevem (sem desmerecer quem está começando — precisamos dessas pessoas, e elas são incríveis!). No workshop, mostramos como combinar assistentes de IA e Snyk dá a você um superpoder: escrever código com rapidez e segurança.

Para citar um chef famoso, a Snyk agora “elevou o nível” com o recurso Deep Code AI Fix. O Snyk Code sempre ofereceu boas recomendações de correção ao encontrar uma vulnerabilidade de segurança. Ele também apresentava três boas referências de outros projetos de código aberto com a mesma vulnerabilidade e mostrava como esses projetos a corrigiram. Agora, graças a dados cuidadosamente selecionados pela equipe de pesquisa de segurança da Snyk, a um modelo híbrido de IA que combina o poder da IA generativa e simbólica e a modelos de aprendizado de máquina, a Snyk pode corrigir automaticamente muitas vulnerabilidades de segurança comuns diretamente no seu IDE favorito.

Neste blog, vou demonstrar como aproveitar ao máximo o Deep Code AI Fix (DCAIF) em um projeto de exemplo em Java que usamos nos nossos workshops. Você encontra o código-fonte aqui. OBSERVAÇÃO: este projeto tem vulnerabilidades intencionais e não deve ser usado em nenhum ambiente de produção.

Diversão com um app de programação de conferências

Se você já participou de uma conferência de tecnologia ou palestrou em uma, sabe que um dos maiores desafios é criar e apresentar a programação.

O app de referência é uma versão péssima disso (NÃO sou um bom desenvolvedor front-end!), mas é útil para mostrar como o código pode funcionar tecnicamente e, ao mesmo tempo, ser inseguro.

É um app Spring Boot que usa o mecanismo de templates Thymeleaf. Na inicialização, ele gera dados aleatórios de palestrantes, títulos de palestras e descrições usando a popular biblioteca faker. Os títulos e as descrições das palestras vêm todos do texto do livro O Guia do Mochileiro das Galáxias. OBSERVAÇÃO: nem todos os títulos e descrições são totalmente apropriados para o ambiente de trabalho. Você foi avisado!

Cada palestrante gerado para o evento também tem uma página dedicada, onde você pode ver a lista de suas palestras na conferência. Vamos nos concentrar nessa parte do app.

Para compilar e executar o app, rode o seguinte:

mvn clean install
mvn spring-boot:run

Ao executar o app, além do banner habitual do Spring Boot e de outras mensagens, você verá algo parecido com isto:

Access talks for heath.davis at: http://localhost:8081/talks?username=heath.davis
Access talks for russell.bernier at: http://localhost:8081/talks?username=russell.bernier
Access talks for kenyetta.jones at: http://localhost:8081/talks?username=kenyetta.jones
Access talks for howard.bailey at: http://localhost:8081/talks?username=howard.bailey
Access talks for buddy.jast at: http://localhost:8081/talks?username=buddy.jast
Access talks for jeanice.kertzmann at: http://localhost:8081/talks?username=jeanice.kertzmann
Access talks for deborah.hamill at: http://localhost:8081/talks?username=deborah.hamill
Access talks for horacio.renner at: http://localhost:8081/talks?username=horacio.renner
Access talks for winfred.schuster at: http://localhost:8081/talks?username=winfred.schuster
Access talks for tommie.hane at: http://localhost:8081/talks?username=tommie.hane
Access talks for micah at: http://localhost:8081/talks?username=micah

OBSERVAÇÃO: o resultado não será exatamente igual, pois os palestrantes e suas palestras são gerados aleatoriamente cada vez que você inicia o app.

Se você clicar em um dos links ou copiá-lo e colá-lo, verá a página de um palestrante com a lista de suas palestras:

Página de conferência de Java com uma lista pesquisável de palestras, incluindo nomes dos palestrantes, títulos, descrições e datas de início e término.

Vamos jogar: encontre a vulnerabilidade

Dê uma olhada em TalkController.java. É assim que a página de um palestrante é renderizada. Você consegue identificar a vulnerabilidade?

Não queremos que você tenha que confiar apenas nos seus olhos! Queremos que desenvolvedores trabalhem rápido E escrevam código seguro.

Uso o IntelliJ Idea para escrever meus aplicativos Java. Também uso a extensão da Snyk para IDEs. A boa notícia é que existem extensões da Snyk para os IDEs mais populares, com suporte a uma ampla variedade de linguagens de programação.

Se quiser acompanhar e ainda não tiver uma conta da Snyk, você pode criar uma gratuitamente aqui.

Já mencionei que este app tem muitas vulnerabilidades? É porque o usamos nos nossos workshops. A que quero destacar está em TalkController.java:

IDE exibindo uma vulnerabilidade de cross-site scripting destacada em TalkController.java, com descobertas do Snyk e uma comparação com a correção de escape de HTML
  1. Mostra que foi encontrada uma vulnerabilidade de Cross-site Scripting (XSS)

  2. Mostra um diff de um dos três projetos de código aberto com a mesma vulnerabilidade. Ele mostra como ela foi corrigida (o trecho em verde).

  3. A linha ondulada vermelha indica onde está a vulnerabilidade no código.

Todas essas informações são muito úteis para resolver o problema. Porém, repare no pequeno ícone de raio (⚡️) à esquerda da vulnerabilidade em #1. Ele indica que essa vulnerabilidade pode ser corrigida automaticamente.

Se você passar o mouse sobre a linha ondulada vermelha, verá a opção Corrigir este problema:

Editor de código exibindo um alerta de vulnerabilidade de cross-site scripting e uma correção sugerida para uma entrada de parâmetro HTTP não sanitizada.

Antes de vermos o resultado do Deep Code AI Fix, vamos conferir o que o copilot faria por nós.

Este é o prompt que passei ao copilot na linha 42 e o código que ele insere:

// guard against XSS
username = username.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

Isso pode funcionar contra ataques ingênuos, mas será que funciona contra todos os tipos de ataques XSS? Não tenho tanta certeza. Na verdade, quando executo novamente a verificação da Snyk, a vulnerabilidade XSS continua lá.

Vamos conferir a correção da Snyk:

String usernameStr = "<h1>" + HtmlUtils.htmlEscape(username) + "'s talks<h1>";

Agora, isso me agrada. A solução usa uma abordagem idiomática e esperada, com uma biblioteca integrada do Spring Boot: HtmlUtils. Tenho confiança de que ela vai sanitizar completamente a entrada: username. Uma nova verificação da Snyk mostra que a vulnerabilidade foi eliminada.

Notificação da Snyk parabenizando você por corrigir uma vulnerabilidade de cross-site scripting (XSS), com opções de feedback positivo e negativo

Aprovado! A correção automática da Snyk não só resolveu a vulnerabilidade, como também usou uma abordagem compatível com o framework em questão — neste caso, o Spring Boot.

O DCAIF não vai deixar você mais lento

Neste post, mostrei como o Deep Code AI Fix da Snyk vai além de recomendar correções e pode corrigir o problema por você. Você também pode confirmar a eficácia da correção ao verificar que a vulnerabilidade de segurança original foi eliminada.

Na Snyk, adoramos os assistentes de IA, mas eles não são muito bons em segurança. Nossa pesquisa mostra que as IAs generativas disponíveis tendem a gerar código inseguro praticamente na mesma proporção que as pessoas — cerca de 40% das vezes. Isso faz sentido, já que soluções puramente generativas, como o Copilot, treinam seus modelos principalmente com código existente. A abordagem híbrida da Snyk, que combina IA simbólica, IA generativa, aprendizado de máquina e treinamento selecionado pela nossa equipe de segurança, oferece resultados que priorizam a segurança.

Comece a proteger o código gerado por IA

Crie sua conta gratuita da Snyk e comece a proteger o código gerado por IA em minutos. Ou agende uma demonstração com um especialista para ver como a Snyk pode atender às necessidades de segurança dos seus desenvolvedores.

Leia mais

blog feature snyk container custom base recommendations
Blog

AppSec agentiva: o desenvolvimento de software se tornou agentivo. A segurança, não.

O desenvolvimento impulsionado por IA está avançando mais rápido do que os fluxos de trabalho de segurança tradicionais. O AppSec agentivo da Snyk usa agentes de segurança para encontrar, corrigir e verificar vulnerabilidades continuamente, enquanto as pessoas definem os critérios.

blog feature ai violet
Blog

VulnBump: agentes de IA conseguem corrigir dependências vulneráveis sem quebrar o build?

O VulnBump testa agentes de IA em 307 atualizações reais de dependências. Uma correção só é considerada válida se eliminar a vulnerabilidade e mantiver o build e os testes funcionando.

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.