Corrija vulnerabilidades no código automaticamente com IA
14 de outubro de 2024
0 minutos de leituraNa 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:
Ao executar o app, além do banner habitual do Spring Boot e de outras mensagens, você verá algo parecido com isto:
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:

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:

Mostra que foi encontrada uma vulnerabilidade de Cross-site Scripting (XSS)
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).
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:

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:
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:
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.

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.



