Exclusivo del ecosistema .NET: el 75 % de las 20 vulnerabilidades principales tiene una calificación de gravedad alta
Hayley Denbraver
25 de julio de 2019
0 minutos de lecturaTe damos la bienvenida a nuestro nuevo informe de seguridad: información sobre la seguridad del código abierto en .NET. Este informe se divide en tres publicaciones:
Una particularidad del ecosistema .NET: el 75 % de las veinte vulnerabilidades principales tienen una clasificación de gravedad alta
Nuestro informe en PDF, elaborado con mucho esmero, reúne toda esta información y mucho más en un solo lugar, y puedes descargarlo gratis.
Introducción
En la primera parte de este informe, conocimos el ecosistema .NET y vimos cómo es un proyecto típico en cuanto a dependencias directas e indirectas. En esta parte, examinaremos las veinte vulnerabilidades conocidas que aparecen con mayor frecuencia en los análisis de proyectos de Snyk. También veremos las bibliotecas asociadas a esas vulnerabilidades. Para conocer los tipos y niveles de gravedad de las vulnerabilidades conocidas en todo el ecosistema, consulta la sección final del informe.
Las vulnerabilidades más comunes en los proyectos .NET
Ahora veamos las diez bibliotecas que más afectan a nuestros usuarios en este momento, ya que aparecen con mayor frecuencia en los análisis de proyectos de Snyk. Primero, revisemos las características de las diez principales y luego profundicemos en tres de ellas, que presentan vulnerabilidades particularmente interesantes. La tabla incluye las versiones mínimas a las que debes actualizar para usar una versión sin vulnerabilidades.

Al revisar esta tabla, hay algunos aspectos que se destacan. En primer lugar, el servidor web multiplataforma ASP.NET Core Kestrel es muy popular y presenta varias vulnerabilidades de gravedad alta, derivadas de distintas bibliotecas relacionadas.
En segundo lugar, la cantidad total de vulnerabilidades de estas bibliotecas suele ser baja, pero su gravedad suele ser alta. Con la Snyk Vulnerability Database y los datos del registro de NuGet, analicemos las tres principales para conocer cómo se usan, qué tan populares son y qué vulnerabilidades conocidas contienen.
system.net.http
system.net.http proporciona una interfaz de programación para aplicaciones HTTP modernas. Incluye componentes de cliente HTTP que permiten a las aplicaciones consumir servicios web a través de HTTP, y componentes HTTP que pueden usar tanto clientes como servidores para analizar encabezados HTTP.

Popularidad
system.net.http tiene alrededor de 81 millones de descargas acumuladas. La versión actual (4.3.4) representa cerca de 3,4 millones de descargas. System.http.net registra un promedio de unas 31 000 descargas al día.
Vulnerabilidades
En cuanto a las vulnerabilidades de system.net.http, hay buenas y malas noticias. Primero, las buenas: la versión más reciente de esta biblioteca (4.3.4) no tiene vulnerabilidades conocidas. Si usas esta biblioteca, ¡actualízala a la versión más reciente!
Ahora, las malas noticias. Otras versiones de esta biblioteca incluyen varias vulnerabilidades de gravedad alta. Una de ellas solo está presente en versiones muy antiguas, pero hay cuatro vulnerabilidades de gravedad alta y una de gravedad media en las versiones anteriores a la 4.1.2 y en las versiones de la 4.3 a la 4.3.2, inclusive.
Estas vulnerabilidades son de varios tipos, entre ellos, divulgación de información, validación incorrecta de certificados, escalamiento de privilegios, omisión de autenticación y denegación de servicio. NuGet ofrece estadísticas interesantes sobre esta biblioteca, como las versiones que se han descargado y con qué frecuencia, e incluso incluye información detallada de las últimas seis semanas.
Lamentablemente, estas estadísticas muestran que solo el 16 % de las descargas de esta biblioteca en las últimas seis semanas correspondieron a la versión más reciente (la única completamente libre de vulnerabilidades conocidas). Esto significa que, durante las últimas seis semanas, el 84 % de las descargas del paquete correspondieron a versiones con varias vulnerabilidades conocidas de gravedad alta.

Las cifras de NuGet ofrecen un rayo de esperanza. La versión más reciente (4.3.4) lleva siete meses disponible, pero parece que su adopción se ha acelerado últimamente. La versión 4.3.4 se ha descargado aproximadamente 3,3 millones de veces, y 1,2 millones de esas descargas se realizaron en las últimas seis semanas.
system.io.pipelines
La biblioteca system.io.pipelines es una herramienta de administración de búferes de bytes con un único productor y un único consumidor. En pocas palabras, esta biblioteca facilita las operaciones de E/S (entrada/salida) de alto rendimiento en .NET.

Popularidad
system.io.pipelines se ha descargado aproximadamente 8,4 millones de veces, incluidas unas 600 000 descargas de la versión más reciente (4.5.3). La versión 4.6.0 está actualmente en vista previa.
Vulnerabilidades
Actualmente, solo se conoce una vulnerabilidad asociada a la biblioteca system.io.pipelines. Al igual que con la biblioteca system.net.http que mencionamos antes, hay buenas y malas noticias sobre la vulnerabilidad de system.io.pipelines.
Primero, las malas noticias. La única vulnerabilidad de gravedad alta asociada a esta biblioteca es una vulnerabilidad de denegación de servicio, que puede provocar que tu sitio web deje de funcionar. Tiene una puntuación de gravedad alta y, si se explota, puede impedir que usuarios legítimos accedan a tu sitio web, aumentar los costos de tus servidores y causarte muchos dolores de cabeza.
Ahora, las buenas noticias. La única vulnerabilidad de gravedad alta asociada a esta biblioteca es una vulnerabilidad de denegación de servicio.
¡Así es! Esto también son buenas noticias. A diferencia de otros tipos de vulnerabilidades, los ataques de denegación de servicio por lo general no buscan vulnerar la seguridad. Aunque una vulnerabilidad de este tipo puede causar muchos dolores de cabeza, es tranquilizador saber que, si bien probablemente afecte la disponibilidad de tu servicio, no es probable que provoque la pérdida de datos o información personal.
¿Nuestra recomendación? Actualiza system.io.pipelines a la versión 4.5.1 o una superior y mantente al tanto del estado de seguridad de esta nueva y útil biblioteca.
microsoft.aspnetcore.server.kestrel.core
La biblioteca microsoft.aspnetcore.server.kestrel.core es el componente central del servidor web multiplataforma ASP.NET Core Kestrel. Kestrel es un servidor basado en E/S asíncrona y orientado a eventos, y suele considerarse el servidor web preferido para las nuevas aplicaciones de ASP.NET.

Popularidad
microsoft.aspnetcore.server.kestrel.core registra más de 22 millones de descargas acumuladas. Cerca de 630 000 corresponden a la versión más reciente (2.2.0), que se lanzó a fines de 2018.
Vulnerabilidades
Actualmente, esta biblioteca tiene cuatro vulnerabilidades conocidas: dos vulnerabilidades de denegación de servicio de gravedad media, una vulnerabilidad de denegación de servicio de gravedad alta y una de escalamiento de privilegios de gravedad alta. La buena noticia es que las dos versiones más recientes (2.1.7 y 2.2.0) no tienen vulnerabilidades conocidas.
La mala noticia es que una biblioteca relacionada (microsoft.aspnetcore.server.kestrel.transport.abstractions) también figura entre las bibliotecas asociadas a las vulnerabilidades más comunes. Si usas microsoft.aspnetcore.server.kestrel.core, es probable que también uses otras bibliotecas con vulnerabilidades comunes.
Además, es importante recordar que Kestrel no es un servidor web con todas las funciones y suele ejecutarse detrás de otra biblioteca. La decisión de ejecutar Kestrel de forma independiente o detrás de una biblioteca como NGINX o IIS influye en cómo debes abordar la seguridad.
La siguiente tabla describe el resto de las 20 bibliotecas más populares que contienen las vulnerabilidades más comunes.

Ahora veamos los tipos y niveles de gravedad de las vulnerabilidades, así como las medidas para corregirlas.
Los tipos de vulnerabilidades más comunes en .NET
Entre las vulnerabilidades más comunes, encontramos distintos tipos. Sin embargo, más de la mitad de las vulnerabilidades de las diez principales son de denegación de servicio. La denegación de servicio (DoS) describe un conjunto de ataques cuyo objetivo es impedir que los usuarios legítimos a los que está destinado un sistema puedan acceder a él.
Sin embargo, más de la mitad de las vulnerabilidades de las diez principales son de denegación de servicio.

Esto tiene implicaciones interesantes para la seguridad porque, a diferencia de otros tipos de vulnerabilidades, los ataques DoS por lo general no buscan vulnerar la seguridad. En cambio, se enfocan en impedir que los usuarios legítimos accedan a sitios web y servicios, lo que provoca interrupciones.
Un tipo popular de ataque de denegación de servicio es el DDoS (denegación de servicio distribuida), que intenta saturar los canales de red del sistema al generar un gran volumen de tráfico desde muchas máquinas. En las bibliotecas de código abierto, las vulnerabilidades DoS permiten que los atacantes provoquen una caída o una interrupción grave del servicio al aprovechar una falla en el código de la aplicación o en el uso de bibliotecas de código abierto.
Dos tipos comunes de vulnerabilidades DoS son:
Alto consumo de CPU/memoria: un atacante envía solicitudes diseñadas para hacer que el sistema tarde un tiempo desproporcionado en procesarlas.
Caída: un atacante envía solicitudes diseñadas para hacer que el sistema deje de funcionar.
Aunque nadie quiere sufrir un costoso ataque de denegación de servicio ni la mala prensa, las interrupciones y la pérdida de ingresos que puede ocasionar, una brecha de seguridad que exponga información confidencial podría ser mucho peor.
Gravedad de las vulnerabilidades
La mala noticia que se desprende de estos datos es que tres cuartas partes de las vulnerabilidades más comunes tienen una clasificación de gravedad alta. Las vulnerabilidades de gravedad media representan la cuarta parte restante de las veinte principales. No encontramos vulnerabilidades de gravedad baja. Las puntuaciones CVSS oscilaron entre 5.3 y 8.8, con una mediana de 7.5.

El 75 % de las vulnerabilidades más comunes tiene una clasificación de gravedad alta.
Una tendencia general que hemos observado en el ecosistema .NET es que los proyectos solían tener pocas vulnerabilidades. Esto puede llevar a pensar que la seguridad puede quedar en segundo plano, pero las estadísticas de gravedad muestran por qué ese razonamiento es erróneo. Las vulnerabilidades conocidas quizá no sean tan comunes en el ecosistema .NET, pero las que sí existen pueden causar graves interrupciones y daños si no se corrigen.
Todas las vulnerabilidades se pueden corregir
Todas las vulnerabilidades incluidas entre las 20 principales de Snyk tenían una solución disponible.
La mayoría de las vulnerabilidades de las veinte principales pueden tener una clasificación de gravedad alta, pero también hay buenas noticias. Todas y cada una tenían una solución disponible. Es una excelente noticia. Es bueno conocer una vulnerabilidad de seguridad, aunque no haya una solución disponible, pero nada supera los consejos prácticos que ayudan a proteger mejor un proyecto.
¿Quieres saber más?
¿Te gustaría tener una visión general de las vulnerabilidades conocidas en el ecosistema? Encuentra la parte final de nuestro informe aquí.
Y, por supuesto, puedes descargar el informe completo gratis.