Exclusivo do ecossistema .NET: 75% das 20 principais vulnerabilidades têm classificação de alta gravidade
Hayley Denbraver
25 de julho de 2019
0 minutos de leituraConheça nosso novo relatório de segurança: insights sobre segurança de código aberto no .NET. O relatório está dividido em três artigos:
Exclusivo do ecossistema .NET: 75% das 20 principais vulnerabilidades têm classificação de alta gravidade
Nosso relatório em PDF, feito com todo o carinho, reúne todas essas informações e muito mais em um só lugar e pode ser baixado gratuitamente.
Introdução
Na primeira parte deste relatório, conhecemos o ecossistema .NET e discutimos como é um projeto típico em termos de dependências diretas e indiretas. Nesta parte, vamos examinar as vinte vulnerabilidades conhecidas mais encontradas nas análises de projetos do Snyk. Também vamos analisar as bibliotecas correspondentes a essas vulnerabilidades. Para uma discussão sobre os tipos e níveis de gravidade das vulnerabilidades conhecidas no ecossistema, consulte a seção final do relatório.
As vulnerabilidades mais comuns em projetos .NET
Agora, vamos ver as dez principais bibliotecas que mais afetam nossos usuários atualmente, pois são as que aparecem com mais frequência nas análises de projetos do Snyk. Primeiro, vamos analisar as características das dez principais e, em seguida, nos aprofundar em três bibliotecas que incluem vulnerabilidades particularmente interessantes. A tabela inclui as versões mínimas para as quais você precisa atualizar para usar uma versão sem vulnerabilidades.

Ao analisar esta tabela, alguns pontos chamam a atenção. Primeiro, o servidor web multiplataforma ASP.NET Core Kestrel é bastante popular e apresenta diversas vulnerabilidades de alta gravidade, provenientes de várias bibliotecas relacionadas.
Segundo, o número total de vulnerabilidades nessas bibliotecas costuma ser baixo, mas a gravidade geralmente é alta. Usando o Snyk Vulnerability Database e os dados do registro NuGet, vamos nos aprofundar nas três principais bibliotecas para entender como são usadas, qual é sua popularidade e quais vulnerabilidades conhecidas contêm.
system.net.http
system.net.http oferece uma interface de programação para aplicativos HTTP modernos. Isso inclui componentes de cliente HTTP que permitem que os aplicativos consumam serviços web por HTTP e componentes HTTP que podem ser usados por clientes e servidores para analisar cabeçalhos HTTP.

Popularidade
system.net.http tem cerca de 81 milhões de downloads acumulados. A versão atual (4.3.4) representa aproximadamente 3,4 milhões de downloads. A média de downloads de system.http.net é de cerca de 31 mil por dia.
Vulnerabilidades
Há boas e más notícias sobre as vulnerabilidades em system.net.http. Primeiro, as boas notícias: a versão mais recente dessa biblioteca (4.3.4) não tem vulnerabilidades conhecidas. Se você usa essa biblioteca, atualize para a versão mais recente!
Agora, as más notícias: outras versões dessa biblioteca incluem várias vulnerabilidades de alta gravidade. Uma delas está presente apenas em versões muito antigas, mas há quatro vulnerabilidades de alta gravidade e uma de gravidade média nas versões anteriores à 4.1.2 e nas versões de 4.3 a 4.3.2, inclusive.
Essas vulnerabilidades são de vários tipos, incluindo divulgação de informações, validação inadequada de certificados, escalonamento de privilégios, contorno de autenticação e negação de serviço. O NuGet fornece estatísticas interessantes sobre essa biblioteca, incluindo quais versões foram baixadas e com que frequência, além de informações detalhadas das últimas seis semanas.
Infelizmente, essas estatísticas mostram que apenas 16% dos downloads dessa biblioteca nas últimas seis semanas foram da versão mais recente (a única totalmente livre de vulnerabilidades conhecidas). Isso significa que, nesse período, 84% dos downloads do pacote foram de versões com várias vulnerabilidades conhecidas de alta gravidade.

Os números do NuGet trazem uma esperança. A versão mais recente (4.3.4) foi lançada há sete meses, mas parece que o ritmo de adoção vem aumentando. A versão 4.3.4 foi baixada aproximadamente 3,3 milhões de vezes, e 1,2 milhão desses downloads ocorreu nas últimas seis semanas.
system.io.pipelines
A biblioteca system.io.pipelines é uma ferramenta de gerenciamento de buffer de bytes com um único produtor e um único consumidor. Em resumo, ela facilita a realização de operações de E/S (entrada/saída) de alto desempenho no .NET.

Popularidade
system.io.pipelines foi baixada aproximadamente 8,4 milhões de vezes, incluindo cerca de 600 mil downloads da versão mais recente (4.5.3). A versão 4.6.0 está atualmente em versão prévia.
Vulnerabilidades
Atualmente, há apenas uma vulnerabilidade conhecida associada à biblioteca system.io.pipelines. Assim como na biblioteca system.net.http, discutida anteriormente, há boas e más notícias sobre a vulnerabilidade em system.io.pipelines.
Primeiro, as más notícias. A única vulnerabilidade de alta gravidade associada a essa biblioteca é uma vulnerabilidade de negação de serviço, capaz de derrubar seu site. Ela tem uma pontuação de gravidade alta e, se explorada, pode impedir que usuários legítimos acessem seu site, aumentar os custos do servidor e causar muitas dores de cabeça.
Agora, as boas notícias. A única vulnerabilidade de alta gravidade associada a essa biblioteca é uma vulnerabilidade de negação de serviço.
Isso mesmo! Essa também é uma boa notícia. Ao contrário de outros tipos de vulnerabilidade, os ataques de negação de serviço geralmente não têm como objetivo violar a segurança. Apesar das dores de cabeça que essa vulnerabilidade pode causar, é reconfortante saber que, embora possa afetar a disponibilidade do serviço, é improvável que leve à perda de dados ou informações pessoais.
Nossa recomendação? Atualize system.io.pipelines para a versão 4.5.1 ou superior e acompanhe o status de segurança dessa biblioteca nova e útil!
microsoft.aspnetcore.server.kestrel.core
A biblioteca microsoft.aspnetcore.server.kestrel.core é o componente central do servidor web multiplataforma ASP.NET Core Kestrel. O Kestrel é um servidor orientado a eventos e baseado em E/S assíncrona, e costuma ser considerado o servidor web preferido para novos aplicativos asp.net.

Popularidade
microsoft.aspnetcore.server.kestrel.core registra mais de 22 milhões de downloads acumulados. Cerca de 630 mil desses downloads são da versão mais recente (2.2.0), lançada no fim de 2018.
Vulnerabilidades
Essa biblioteca tem atualmente quatro vulnerabilidades conhecidas, incluindo duas vulnerabilidades de negação de serviço de gravidade média, uma de negação de serviço de alta gravidade e uma de escalonamento de privilégios também de alta gravidade. A boa notícia é que as duas versões mais recentes (2.1.7 e 2.2.0) não têm vulnerabilidades conhecidas.
A má notícia é que uma biblioteca relacionada (microsoft.aspnetcore.server.kestrel.transport.abstractions) também está entre as bibliotecas associadas às vulnerabilidades mais comuns. Se você usa microsoft.aspnetcore.server.kestrel.core, é provável que também use outras bibliotecas com vulnerabilidades comuns.
Além disso, é importante lembrar que o Kestrel não é um servidor web completo e costuma ser executado atrás de outra biblioteca. A decisão de executar o Kestrel de forma independente ou atrás de uma biblioteca como NGINX ou IIS afeta a maneira como você deve abordar a segurança.
As demais bibliotecas entre as 20 mais populares que contêm as vulnerabilidades mais comuns estão descritas na tabela a seguir.

Agora, vamos analisar os tipos e níveis de gravidade das vulnerabilidades, além das medidas de correção.
Os tipos de vulnerabilidade .NET mais comuns
Entre as vulnerabilidades mais comuns, encontramos diversos tipos. No entanto, mais da metade das vulnerabilidades entre as dez principais são de negação de serviço. Negação de serviço (DoS) é o nome dado a uma família de ataques cujo objetivo é tornar um sistema inacessível para seus usuários legítimos.
No entanto, mais da metade das vulnerabilidades entre as dez principais são de negação de serviço.

Isso tem implicações interessantes para a segurança, pois, ao contrário de outros tipos de vulnerabilidade, os ataques DoS geralmente não têm como objetivo violar a segurança. Em vez disso, procuram indisponibilizar sites e serviços para usuários legítimos, causando interrupções.
Um tipo popular de vulnerabilidade de negação de serviço é o DDoS (negação de serviço distribuída), um ataque que tenta sobrecarregar os canais de rede do sistema, gerando um grande volume de tráfego a partir de várias máquinas. Em bibliotecas de código aberto, vulnerabilidades DoS permitem que invasores provoquem esse tipo de interrupção ou colapso do serviço explorando uma falha no código do aplicativo ou no uso de bibliotecas de código aberto.
Dois tipos comuns de vulnerabilidades DoS são:
Alto consumo de CPU/memória: um invasor envia solicitações elaboradas para fazer o sistema levar um tempo desproporcional para processá-las.
Falha: um invasor envia solicitações elaboradas que podem fazer o sistema parar de funcionar.
Ninguém quer enfrentar um ataque de negação de serviço dispendioso e a publicidade negativa, a indisponibilidade e a perda de receita que podem acompanhá-lo. Ainda assim, uma violação de segurança que exponha informações confidenciais pode ser muito pior.
Gravidade das vulnerabilidades
A má notícia desses dados é que três quartos das vulnerabilidades mais comuns têm classificação de alta gravidade. As vulnerabilidades de gravidade média representam o quarto restante entre as vinte principais. Não encontramos vulnerabilidades de baixa gravidade. As pontuações CVSS variaram de 5,3 a 8,8, com mediana de 7,5.

75% das vulnerabilidades mais comuns têm classificação de alta gravidade.
Uma tendência geral que observamos no ecossistema .NET é que os projetos costumam ter poucas vulnerabilidades. Isso pode levar as pessoas a pensar que a segurança pode ficar em segundo plano, mas as estatísticas de gravidade mostram por que essa ideia é equivocada. As vulnerabilidades conhecidas podem ser menos comuns no ecossistema .NET, mas as que existem podem causar grandes interrupções e danos se não forem corrigidas.
Toda vulnerabilidade pode ser corrigida
Todas as vulnerabilidades entre as 20 principais do Snyk tinham uma correção disponível.
A maioria das vulnerabilidades entre as vinte principais pode ter classificação de alta gravidade, mas também há boas notícias: todas as vulnerabilidades entre as 20 principais do Snyk tinham uma correção disponível. Isso é uma excelente notícia. É bom conhecer uma vulnerabilidade de segurança mesmo quando não há uma correção disponível, mas nada melhor do que receber orientações práticas que ajudem a tornar um projeto mais seguro.
Quer saber mais?
Quer ter uma visão geral das vulnerabilidades conhecidas no ecossistema? Você encontra a parte final do nosso relatório aqui.
E, claro, você pode baixar o relatório completo gratuitamente.