Skip to main content

Las vulnerabilidades de ejecución remota de código, cross-site scripting y denegación de servicio representan 2/3 de las vulnerabilidades conocidas en el ecosistema .NET

Escrito por
Headshot of Hayley Denbraver

Hayley Denbraver

25 de julio de 2019

0 minutos de lectura

Te 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 artículos:

Nuestro práctico informe en PDF, elaborado con esmero, reúne toda esta información y mucho más en un solo lugar, ¡y puedes descargarlo gratis!

¿Qué nos puede decir Snyk sobre la seguridad en el ecosistema .NET?

Ahora que analizamos las vulnerabilidades más frecuentes, echemos un vistazo general al ecosistema .NET. ¿Qué tipos de vulnerabilidades son comunes en este ecosistema? ¿Se mantiene la tendencia de vulnerabilidades de gravedad alta cuando analizamos el ecosistema en su conjunto?

Tipos de vulnerabilidades

La siguiente tabla desglosa los tipos de vulnerabilidades presentes en el ecosistema .NET que representan al menos el 1 % del total. Incluye la cantidad de vulnerabilidades distintas de cada tipo que se encontraron en la base de datos de vulnerabilidades de Snyk y su porcentaje del total. A pesar de la gran variedad, solo tres tipos de vulnerabilidades representan la mayoría de las encontradas. Las vulnerabilidades de ejecución remota de código (RCE), cross-site scripting (XSS) y denegación de servicio (DoS) representan 2/3 de las vulnerabilidades de .NET encontradas en la base de datos de vulnerabilidades de Snyk.

Gráfico de barras de tipos de vulnerabilidades, encabezado por la ejecución remota de código con un 41%, seguida del scripting entre sitios con un 13,2% y la denegación de servicio con un 12,4%.

Las vulnerabilidades de ejecución remota de código (RCE), cross-site scripting (XSS) y denegación de servicio (DoS) representan 2/3 de las vulnerabilidades de .NET encontradas en la base de datos de vulnerabilidades de Snyk.

En detalle: vulnerabilidades

En esta sección encontrarás un repaso práctico para conocer mejor los tres tipos principales de vulnerabilidades del ecosistema .NET.

Ejecución remota de código

La ejecución remota de código es un tipo de vulnerabilidad que ocurre cuando un atacante puede ejecutar comandos o código arbitrarios en tu aplicación. La ejecución del código puede realizarse a través de una red y, por lo tanto, no está limitada a una ubicación geográfica específica. Una vulnerabilidad relacionada es la inyección de comandos.

Ilustración de una laptop con ventanas de código y comandos de terminal con las etiquetas “ProcessBuilder()”, “exec” y “bash”

Cross-site scripting

Un ataque de cross-site scripting ocurre cuando un atacante engaña a una aplicación o sitio web legítimo para que acepte una solicitud como si proviniera de una fuente confiable. Esto se logra saliendo del contexto de la aplicación web; luego, la aplicación entrega esos datos a sus usuarios junto con otro contenido dinámico confiable, sin validarlos.

Ilustración de una laptop que muestra código y un script enmascarado, con el texto visible “<script>” y “document.cookie” que representa un ataque de scripting entre sitios.

Denegación de servicio

La denegación de servicio es una familia de ataques cuyo objetivo es impedir que los usuarios legítimos accedan a un sistema. A diferencia de otros tipos de vulnerabilidades, los ataques DoS generalmente no buscan vulnerar la seguridad. En cambio, se enfocan en dejar sitios web y servicios fuera de servicio para los usuarios legítimos.

Ilustración isométrica de un disco duro, módulos de memoria y un símbolo de acceso bloqueado conectados por líneas de neón, que representa la protección contra ataques de denegación de servicio.

Las vulnerabilidades conocidas de .NET suelen tener un nivel de gravedad alto

Antes, al analizar las 20 vulnerabilidades más frecuentes, vimos que la mayoría tenía un nivel de gravedad alto. ¿Se mantiene esta tendencia al considerar todas las vulnerabilidades de .NET en la base de datos de Snyk? ¡Sí! Las vulnerabilidades de gravedad alta representan el 70,7 % del total. Las de gravedad media representan la siguiente proporción más grande, con un 26,9 %. Solo el 2,4 % de las vulnerabilidades de .NET en la base de datos de Snyk se consideran de gravedad baja.

Las vulnerabilidades de gravedad alta representan el 70,7 % del total. Las de gravedad media representan la siguiente proporción más grande, con un 26,9 %.

Esto podría dar una impresión desalentadora sobre la seguridad de .NET, ya que la proporción de vulnerabilidades de gravedad alta es considerable. Sin embargo, al momento de escribir esto, todas las vulnerabilidades detectadas por Snyk en un análisis de dependencias tenían una solución disponible. Aunque no podemos estar 100 % seguros de por qué ocurre esto, es posible que se deba en parte al respaldo que Microsoft brinda al ecosistema .NET.

Al momento de escribir esto, todas las vulnerabilidades detectadas por Snyk en un análisis de dependencias tenían una solución disponible.

En detalle: cómo corregir vulnerabilidades

Pero ¿qué implica corregir una vulnerabilidad? En esta sección te explicamos rápidamente el proceso.

Actualizar

Cuando se detecta una vulnerabilidad, quienes mantienen el proyecto suelen incluir una corrección en una versión futura, si es posible, aunque el plazo puede variar mucho. Mantener las versiones actualizadas suele ser una buena forma de estar al tanto de las vulnerabilidades de seguridad. A veces, actualizar una dependencia es difícil. Esto puede deberse a que las dependencias interactúan entre sí y con tu código.

Dependencias directas e indirectas

Por lo general, corregir vulnerabilidades en dependencias directas es sencillo: actualiza la dependencia a la versión mínima que incluye la corrección. Corregir vulnerabilidades en dependencias indirectas requiere dos cosas: una versión corregida de la dependencia indirecta y una versión de la dependencia directa que use esa versión corregida. Si se cumplen ambas condiciones, actualizar la dependencia directa correspondiente a una versión que use la versión corregida de la dependencia indirecta solucionará el problema. Si no hay una corrección disponible para la dependencia directa, los desarrolladores pueden actualizar la dependencia indirecta para resolver el problema. Sin embargo, esto puede causar problemas de compatibilidad entre las dependencias.

Conclusión

En el ecosistema .NET, la cantidad de vulnerabilidades por paquete es baja, pero suelen tener un nivel de gravedad alto. Esto significa que probablemente se necesite menos tiempo para resolver los problemas (menor inversión), pero que se están abordando problemas de seguridad potencialmente peligrosos (alto retorno). En otras palabras, corregir las vulnerabilidades conocidas en los paquetes de .NET que usas es una medida de seguridad con un alto retorno de inversión. En Snyk, nuestro objetivo es ayudar a las personas a usar código abierto y mantenerse seguras. Para lograrlo, creamos herramientas que permiten encontrar y corregir automáticamente vulnerabilidades conocidas en las dependencias. Pero también es importante identificar y divulgar correctamente las nuevas vulnerabilidades. Actualmente, el ecosistema .NET no cuenta con un lugar centralizado para reportar vulnerabilidades en bibliotecas de código abierto. Snyk es una Autoridad de Numeración de CVE (CNA), lo que significa que podemos asignar un número CVE a una nueva vulnerabilidad (básicamente, un identificador) y agregarla a las bases de datos pertinentes. Como CNA, Snyk puede ayudarte a reportar vulnerabilidades de manera responsable. Puedes obtener más información sobre este proceso aquí: https://snyk.io/vulnerability-disclosure.

¡Gracias!

Gracias por leer nuestro nuevo informe sobre la seguridad de .NET. Esperamos que te haya gustado. Queremos ayudarte a usar código abierto y mantenerte seguro, así que próximamente encontrarás más recursos como este. Recuerda que puedes descargar gratis el informe completo.

Descarga el informe sobre información sobre la seguridad del código abierto en .NET.