Identifique, priorize e corrija vulnerabilidades com Reachable Vulnerabilities para GitHub
28 de janeiro de 2021
0 minutos de leituraImagine que você é um programador Java e acabou de decidir usar a análise do Snyk Open Source para encontrar problemas de segurança nas bibliotecas de terceiros que utiliza. Boa escolha!
No entanto, depois de conectar seu repositório ao scanner do Snyk Open Source, você descobre que há dez — ou talvez até 50 — vulnerabilidades nos pacotes dos quais depende. A grande questão é: por onde começar?
Em um mundo ideal, você corrigiria todos os problemas até chegar a zero vulnerabilidades. Sabemos que isso nem sempre é viável. Além disso, talvez você não consiga corrigir todas de uma vez. O melhor é começar pelas vulnerabilidades mais graves que afetam sua aplicação e priorizar a correção delas. Veja como isso funciona.
A aplicação
Criei uma pequena aplicação Java baseada em Maven e a publiquei no GitHub. Ela recebe uma URL e faz uma solicitação GET para esse endereço. O resultado é exibido como texto simples na página de resultados. Pode ser o HTML de uma página da web ou, por exemplo, a resposta de um endpoint REST. Uso o cliente HTTP do Apache e algumas outras dependências para executar as solicitações, como mostra o arquivo pom.

Identifique vulnerabilidades de segurança no seu repositório do GitHub
Para identificar vulnerabilidades de segurança nas minhas dependências de código aberto, conectei meu repositório do GitHub ao Snyk. Também ativei o recurso Reachable Vulnerabilities, que está atualmente na versão Beta. Você encontra essa opção em Configurações -> Integração -> Editar configurações do GitHub. Vale lembrar que tudo o que uso aqui faz parte do plano gratuito do Snyk.

Quando o Snyk termina de analisar meu repositório do GitHub, vejo que minha aplicação tem várias vulnerabilidades herdadas do pacote de código aberto que utilizo. No entanto, o recurso Reachable Vulnerabilities mostra se uma vulnerabilidade pode ser alcançada pelo código, como no exemplo abaixo

Priorize a correção de vulnerabilidades
A vulnerabilidade de validação inadequada de entrada é um problema de alta gravidade na versão 4.3.1 do httpclient do Apache. A interface do Snyk mostra que a função vulnerável pode ser alcançada pelo método doPost da minha URLServlet. O problema específico é que uma entrada URI não é validada corretamente, o que pode comprometer seu software. Depois de alguns testes, encontrei pelo menos um dos problemas.
A URI pode separar as credenciais do nome do host. Por exemplo, http://bmv:pwd@snyk.io aponta para o domínio snyk.io. Mas, se eu incluir outro sinal de @ na senha das credenciais, posso sair da URL. Resumindo, http://bmv:pwd@foojay.io:80@snyk.io me mostra o resultado do domínio foojay.io, e não de snyk.io.

O indicador de vulnerabilidade alcançável está disponível na integração com o GitHub da plataforma Snyk para projetos Java Maven. É uma ferramenta essencial para priorizar a correção de vulnerabilidades na sua aplicação. Quando esse indicador aparece, existe um caminho entre seu código e o método vulnerável do pacote importado.
Para calcular a alcançabilidade na integração com o GitHub, o Snyk cria um fork do seu código e o inspeciona. Criamos um grafo de chamadas e o analisamos para identificar se há um caminho até um método com uma vulnerabilidade conhecida. Se houver, a vulnerabilidade recebe o selo “reachable”. Além disso, o fato de uma vulnerabilidade ser alcançável também influencia a pontuação de prioridade exibida no canto superior direito. Essa pontuação combina várias heurísticas para ajudar desenvolvedores a identificar quais vulnerabilidades são mais prejudiciais no contexto da aplicação e, portanto, devem ter maior prioridade durante a correção.

Se eu rolar a tela para baixo na interface do Snyk, vejo outras vulnerabilidades, incluindo um problema de negação de serviço no pacote snakeyaml. Observe que essa vulnerabilidade não tem o indicador de alcançável, pois apenas importo o pacote e não o utilizo no programa de exemplo.

Conclusão
O recurso Reachable Vulnerabilities na integração com o GitHub é poderoso e gratuito. Ele ajuda todos os nossos usuários a decidir por onde começar e quais vulnerabilidades corrigir primeiro.
No entanto, isso não significa que seja seguro ignorar as vulnerabilidades que não têm o indicador de alcançável. Elas ainda fazem parte da sua aplicação e podem ser acionadas de outras formas.
Especialmente em Java, temos recursos como a API de reflexão. Além disso, todas as classes ficam disponíveis pelo classpath. Isso significa que, se for possível executar código arbitrário na sua aplicação, todas as classes disponíveis poderão ser carregadas e exploradas.
O que quero dizer é que vulnerabilidades que não podem ser alcançadas diretamente ainda podem ser exploradas em uma cadeia de eventos. Ainda assim, Reachable Vulnerabilities ajuda você a saber por onde começar para tornar sua aplicação melhor e mais segura! Então, o que está esperando? Crie uma conta gratuita no Snyk e experimente!
A aplicação usada nesta publicação do blog está disponível neste repositório do GitHub.
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.


