As vulnerabilidades de segurança em software de código aberto geralmente levam mais de quatro anos para serem detectadas e divulgadas, de acordo com um estudo do GitHub, plataforma adquirida pela Microsoft há pouco mais de dois anos usada por desenvolvedores para hospedar códigos-fonte e arquivos.
A descoberta consta do relatório anual “State of the Octoverse”, do GitHub, para o qual foram analisados mais de 45 mil diretórios de código ativos com o intuito de obter informações sobre a segurança/vulnerabilidades em softwares de código aberto e as práticas dos desenvolvedores em relação a emissão de alertas e correção das falhas.
A vulnerabilidade é um problema no código de um projeto de software que pode ser explorado para danificar a confidencialidade, integridade ou disponibilidade deste ou de outros que usam seu código. As vulnerabilidades variam em tipo, gravidade e método de ataque. Depois de examinar um ano de dados coletados, por meio de seu gráfico de dependência, o levantamento descobriu que a maioria dos projetos no GitHub tem pelo menos uma dependência de código aberto.
O GitHub disponibiliza uma série de recursos que incluem alertas de segurança — baseados nos anteriores —, e um gráfico de dependência, que permite ao desenvolver listar todas as dependências para o seu repositório. Repositório é o local onde os componentes de um software é armazenado.
A análise do GitHub descobriu que a porcentagem é mais alta de vulnerabilidades é daqueles projetos de software que usam JavaScript (94%), Ruby (90%) e .NET (90%). A métrica usada pelo GitHub para avaliar os projetos de software é número de dependências diretas medianas, ou seja, a quantidade de linhas de código produzidas e o total de defeitos registrados durante um determinado período, entre outras.
Veja isso
Ataques a software de supply chain de código aberto aumentam 430%
DevOps: Violações se dão através de componentes de código aberto
O GitHub descobriu que os projetos JavaScript e Rudy apresentam o maior número de dependências diretas medianas (10 e 9, respectivamente, de uma escala de zero a 10), enquanto o JavaScript tem de longe o maior número de dependências transitivas medianas — ou seja, suas dependências diretas têm dependências adicionais.
Outra descoberta interessante é que a maioria das vulnerabilidades em software de código aberto é causada por erros, não por ataques maliciosos. “A análise de uma amostra aleatória de 521 alertas de nossos seis ecossistemas descobriu que 17% dos alertas estão relacionados a comportamento explicitamente malicioso, como tentativas de instalação de backdoor. Destes 17%, vem do ecossistema NPM (Node Package Manager), o gerenciador de pacotes padrão do Node.js. em tempo de execução do JavaScript”, diz o relatório.
O indicador mais flagrante de uma backdoor (porta dos fundos) é um invasor obtendo acesso de confirmação ao repositório de código-fonte de um pacote, geralmente por meio de um sequestro de conta. A última linha de defesa contra essas tentativas é a revisão cuidadosa por pares no pipeline de desenvolvimento, especialmente de mudanças de novos committers, pessoas que têm permissão para modificar o código-fonte de um projeto de software.
“Muitos projetos maduros contam com essa cuidadosa revisão por pares. Os invasores estão cientes disso, então muitas vezes tentam subverter o software fora do controle de versão em seus pontos de distribuição ou enganando as pessoas para obter versões maliciosas do código, por exemplo, digitando um nome de pacote”, acrescenta o documento.
“Não que as vulnerabilidades introduzidas por engano não possam ser tão perturbadoras quanto um ataque malicioso — elas podem, e são muito mais propensas a impactar projetos populares”, observa o GitHub. Adicione a isso a descoberta de que uma vulnerabilidade normalmente não é detectada por mais de quatro anos e você verá como os problemas podem surgir.