Skip to main content

78% das vulnerabilidades estão em dependências indiretas, o que torna a correção complexa

Escrito por
the state of open source small

26 de fevereiro de 2019

0 minutos de leitura

Boas-vindas ao relatório anual da Snyk sobre o estado da segurança de código aberto de 2019. Este relatório está dividido em várias publicações:

Ou baixe nosso simpático relatório em PDF, feito à mão, com todas essas informações e muito mais em um só lugar.

Baixe o Relatório sobre o estado da segurança de código aberto de 2019

Dependências indiretas

É difícil imaginar como era escrever software sem nenhuma dependência de código aberto. Gerenciar as dependências de um projeto é uma tarefa importante que exige o cuidado necessário para acompanhar corretamente as bibliotecas das quais você depende. Afinal, a aplicação que você implanta reúne seu código e suas dependências.

A maioria das dependências no npm, no Maven e no Ruby é indireta, solicitada pelas poucas bibliotecas definidas explicitamente. As vulnerabilidades em dependências indiretas representam 78% do total de vulnerabilidades.

A Snyk analisou mais de um milhão de projetos em snapshots e descobriu que as vulnerabilidades em dependências indiretas representam 78% do total. Isso reforça a necessidade crucial de ter uma visão clara da árvore de dependências e de identificar com precisão as particularidades de um caminho vulnerável para corrigir essas vulnerabilidades.

É claro que encontrar vulnerabilidades em uma dependência é apenas o primeiro passo. Identificar com precisão todos os caminhos na árvore de dependências pelos quais é possível chegar à dependência vulnerável é uma questão mais complexa.

Além disso, sugerir as etapas necessárias para eliminar a vulnerabilidade e, ao mesmo tempo, preservar a compatibilidade entre as dependências é um desafio ainda maior e muito mais interessante.

Gráfico de barras empilhadas a 100% que mostra a proporção de dependências diretas e indiretas no PyPI, PHP Packagist, Maven Central, RubyGems e npm.

Riscos e impactos

Apenas um em cada três desenvolvedores consegue corrigir uma vulnerabilidade de gravidade alta ou crítica em um dia ou menos

Para a maioria, não deve ser surpresa que, no relatório State of the Octoverse deste ano, do GitHub, segurança seja a categoria mais popular de aplicativos de integração de projetos, com mais de uma integração para desenvolvedores. Veja uma citação da Gartner, empresa de análise do setor, em um relatório recente sobre segurança de aplicações que destaca a importância de as organizações testarem a segurança o quanto antes no ciclo de vida das aplicações.

Quase metade (43%) das pessoas entrevistadas tem pelo menos 20 dependências diretas, o que reforça a necessidade de monitorar vulnerabilidades de código aberto introduzidas por essas bibliotecas

Quanto mais usamos software de código aberto, mais riscos acumulamos, pois incorporamos código de terceiros que pode conter vulnerabilidades agora ou no futuro. Além disso, o risco não se resume à segurança do código: também envolve a conformidade das licenças do código adotado e a possibilidade de esse código violar a própria licença.

"As empresas devem usar ferramentas de análise de composição de software (SCA) regularmente para auditar repositórios que contenham ativos de software, como sistemas de controle de versão e de gerenciamento de configuração, e garantir que o software desenvolvido e/ou utilizado pela empresa atenda aos padrões, às regras e às regulamentações de segurança e legais. Os desenvolvedores de aplicações devem ter acesso a ferramentas de SCA para inspecionar os componentes que pretendem usar."

Mark Horvath

Hype Cycle For Application Security 2018, Gartner

Tome uma atitude

A composição de aplicações é complexa. Quem mantém sistemas operacionais e desenvolve software pode tomar medidas para melhorar a segurança dos projetos que possui e para os quais contribui.

Quem mantém projetos de código aberto

Se você mantém um projeto de código aberto, deve oferecer versões seguras do seu código e definir uma estratégia de comunicação com quem o utiliza. Isso pode beneficiar outros projetos e aplicações e, provavelmente, também os seus.

  • Sempre que possível, faça revisões seguras de código com seus colegas e siga as práticas recomendadas de codificação segura. Inclua considerações de segurança na lista de verificação da revisão de código e oriente quem faz a revisão para que saiba o que procurar.

  • Faça auditorias regulares do seu código em busca de vulnerabilidades, por exemplo, com análise estática e dinâmica, que pode ser automatizada no fluxo de desenvolvimento para facilitar a identificação de vulnerabilidades antes que se tornem públicas.

  • Defina claramente um processo simples para comunicar divulgações responsáveis, usando sua própria política ou encaminhando os relatos a um programa existente. Para demonstrar seu compromisso com a segurança, considere adotar uma política SECURITY.MD e um selo que indique o nível de segurança do projeto.

  • Implemente uma estratégia de segurança integrada desde o início do desenvolvimento (shift left) para que sua equipe tenha visibilidade dos problemas de segurança durante o desenvolvimento, na CI e até mesmo na criação de pull requests, reduzindo ao máximo a chance de código vulnerável entrar nos seus projetos.

Desenvolvedores de código aberto

Ao usar componentes de código aberto, é sua responsabilidade entender completamente as dependências diretas e indiretas dos seus projetos, incluindo as possíveis falhas de segurança nessa árvore de dependências. Considere adotar as seguintes diretrizes de segurança:

  • Faça auditorias regulares do seu código com uma ferramenta que detecte automaticamente vulnerabilidades nas dependências de terceiros, ofereça recomendações de correção à sua equipe e monitore as dependências do projeto mesmo após a implantação.

  • Siga as políticas de divulgação responsável ao relatar uma vulnerabilidade de segurança, para não colocar os usuários em risco. Se não souber como fazer isso, considere comunicar a vulnerabilidade a uma empresa de segurança que possa orientar você durante o processo, como o programa de divulgação responsável da Snyk.

  • Inscreva-se nos canais de comunicação de segurança das suas dependências de código aberto, caso existam, para ficar sabendo de possíveis vulnerabilidades assim que forem divulgadas.

Continue lendo nossas publicações com as principais conclusões:

Comece a resolver desafios de capture the flag

Aprenda a resolver desafios de capture the flag assistindo sob demanda ao nosso workshop virtual introdutório.