Skip to main content

Anunciamos correcciones automatizadas para vulnerabilidades en dependencias de .NET

Escrito por

17 de noviembre de 2021

0 minutos de lectura

Nos complace anunciar una mejor compatibilidad con aplicaciones .NET en Snyk Open Source, que permite a los desarrolladores corregir vulnerabilidades en dependencias de .NET con recomendaciones prácticas y pull requests automatizados.

Al momento de escribir este artículo, NuGet, el administrador de paquetes para .NET respaldado por Microsoft y estándar de facto, cuenta con 276,266 paquetes únicos, descargados en promedio más de mil millones de veces por semana. En 2020, solo después de npm, NuGet registró el mayor crecimiento interanual en cuanto a la cantidad de paquetes agregados.

Estas cifras reflejan la popularidad del framework .NET, pero también uno de los principales desafíos que enfrentan los equipos de desarrollo de .NET: gestionar y mitigar el riesgo de seguridad que representan las vulnerabilidades conocidas en estos paquetes. A menudo, estas vulnerabilidades se encuentran en dependencias transitivas, es decir, paquetes incorporados por otros paquetes. Esto reduce la visibilidad y complica la corrección necesaria.

Las nuevas capacidades de Snyk Open Source facilitan que los desarrolladores no solo identifiquen con precisión las vulnerabilidades en sus dependencias directas y transitivas de .NET, sino que también las corrijan automáticamente.

Seguridad de .NET en Snyk Open Source

La identificación y corrección de vulnerabilidades en dependencias de .NET en Snyk Open Source se basan en dos procesos clave: el análisis preciso del árbol de dependencias y su posterior correlación con Snyk Intel, la base de datos de vulnerabilidades líder del mercado de Snyk.

Análisis de dependencias

En el ecosistema .NET, hay varios niveles de dependencias: algunas son evidentes y otras están completamente ocultas para los desarrolladores.

Para identificar correctamente las vulnerabilidades de una aplicación .NET determinada, es necesario resolver estas dependencias con precisión.

Resolvemos las dependencias de manera diferente en Snyk CLI y en los sistemas de gestión de código fuente (SCM), como Azure Repos, GitHub, etc. Por ejemplo, en CLI, según cómo administres las dependencias de tu proyecto, como con PackageReference o packages.config, analizamos tu archivo obj/project.assets.json en el primer caso y el directorio de paquetes en el segundo. Este enfoque nos permite lograr una gran precisión.

El análisis de proyectos mediante la integración con SCM requiere un proceso diferente, ya que los archivos generados mencionados anteriormente no están disponibles. Para solucionarlo, seguimos el algoritmo de resolución de dependencias de NuGet para construir un árbol de dependencias. Cabe mencionar que las dependencias de tiempo de ejecución (proporcionadas por el entorno, también conocidas como metapaquetes) se resolverían con mayor precisión en CLI si la máquina host usara un SDK de tiempo de ejecución similar al del servidor que ejecuta la aplicación.

Inteligencia sobre vulnerabilidades

Una vez determinado el árbol de dependencias, Snyk Open Source correlaciona la lista de dependencias con Snyk Intel. Snyk Intel contiene una lista exhaustiva de vulnerabilidades de .NET (un 440 % más que la siguiente base de datos disponible públicamente) y ofrece información precisa y práctica para facilitar una corrección rápida, incluidas las versiones afectadas del paquete y la versión a la que se debe actualizar para resolver el problema. En total, Snyk Intel contiene más de 700 vulnerabilidades de .NET, de las cuales el 63 % son de gravedad crítica o alta.

El caso del paquete UbracoForms es un ejemplo interesante. Se usa para crear formularios y cuestionarios dentro de las aplicaciones, y UbracoForms se ha descargado cientos de miles de veces. Aunque la versión más reciente del paquete, la 8.8.0, no tiene vulnerabilidades, las versiones anteriores incluyen una vulnerabilidad crítica de ejecución remota de código (RCE).

Página de Snyk Vulnerability Database que muestra una vulnerabilidad crítica de ejecución remota de código con una calificación de 9.8 en el paquete NuGet UmbracoForms.Core.

Snyk Open Source usa esta información para calcular la corrección necesaria, que se refleja tanto en las recomendaciones de corrección como en los pull requests de corrección que se generan automáticamente.

Veámoslo más de cerca.

Recomendaciones de corrección para .NET en Snyk Open Source

Snyk se integra con sistemas SCM basados en Git, incluidos GitHub, GitHub Enterprise, Azure Repos, GitLab, Bitbucket Server y Bitbucket Cloud. Así, puedes importar fácilmente tus proyectos y luego encontrar y corregir las vulnerabilidades (y los problemas de licencias) que se detecten, todo como parte de tu flujo de trabajo de desarrollo habitual.

Importar un proyecto es muy sencillo. Solo ve a la página Projects, haz clic en Agregar proyecto en la esquina superior derecha y selecciona el tipo de proyecto que quieres importar (por ejemplo, GitHub, Bitbucket, etc.) y el repositorio que lo contiene. Para mostrarte cómo funciona, importaré esta aplicación de ejemplo, que tiene vulnerabilidades intencionales.

Al importar el proyecto, Snyk lo analiza automáticamente para detectar problemas. En este ejemplo, Snyk Code identificó un problema en mi código personalizado (1), mientras que Snyk Open Source identificó una lista más larga de problemas en los paquetes .NET de código abierto que estoy usando (2).

Panel de proyectos de Snyk con proyectos filtrados, recuentos de gravedad de los problemas y un proyecto de .NET expandido con resultados del análisis de código

Al hacer clic en el archivo del proyecto .NET, puedes examinar estos problemas más de cerca.

Panel del proyecto de Snyk que muestra 18 problemas, incluida una vulnerabilidad crítica de ejecución de código arbitrario en Halibut, en un proyecto de .NET

Se identificaron 18 problemas en total y Snyk ayuda a corregirlos de varias maneras.

Primero, en la pestaña Dependencias, se muestra un árbol completo de dependencias, que te permite ver todos los paquetes .NET que se usan para crear tu proyecto y los problemas que generan, tanto vulnerabilidades de seguridad conocidas como problemas de licencias:

Interfaz del árbol de dependencias que muestra los paquetes del proyecto, las dependencias anidadas de .NET y opciones de búsqueda y filtros para vulnerabilidades y problemas de licencias

Puedes filtrar el árbol para ver solo las dependencias vulnerables o las que presentan un problema de licencia. Así obtienes una imagen clara de cómo se introdujeron los problemas, ya sea de forma directa o a través de dependencias transitivas.

Luego, en la pestaña Correcciones, Snyk muestra recomendaciones para corregir vulnerabilidades. No todos los problemas se pueden corregir, pero cuando es posible, podrás ver la ruta de actualización exacta necesaria para aplicar la corrección.

Nota: Snyk Open Source recomienda una ruta de actualización para las vulnerabilidades identificadas en dependencias directas y transitivas, pero solo si existe una nueva versión de la dependencia directa que corrija la vulnerabilidad.

En nuestro ejemplo, Snyk nos indica que actualizar el paquete TinyMCE de la versión 4.8.2 a la 5.6.0 corregirá 4 vulnerabilidades diferentes:

Panel de vulnerabilidades en dependencias que muestra una actualización de TinyMCE de la versión 4.8.2 a la 5.6.0, con varios problemas de scripting entre sitios

Volvamos a la pestaña principal Problemas. Aquí, Snyk Open Source ofrece mucha información para ayudarte a revisar la lista de problemas y priorizar las correcciones. Esto incluye una puntuación de prioridad en la esquina superior derecha de la tarjeta del problema, que te indica rápidamente cuán urgente es (aquí puedes obtener más información sobre la puntuación de prioridad de Snyk), así como la ruta de actualización.

En el ejemplo de abajo, Snyk Open Source identificó una vulnerabilidad crítica en el paquete Halibut y recomienda actualizar a la versión 4.4.7:

Panel de seguridad de dependencias que muestra una vulnerabilidad crítica de ejecución de código arbitrario en Halibut y la recomendación de actualizar de la versión 4.4.4 a la 4.4.7

Para corregir la vulnerabilidad, puedes generar manualmente un pull request al hacer clic en el botón Corregir esta vulnerabilidad. Se abrirá una página con todas las vulnerabilidades que puedes corregir mediante un pull request, y podrás elegir una o varias:

Pantalla de Snyk Open Source con una lista de vulnerabilidades de software agrupadas según si hay correcciones disponibles, parciales o no disponibles.

En este caso, me quedaré con la única vulnerabilidad que quiero corregir: la del paquete Halibut.

Al hacer clic en Abrir un PR de corrección en la parte inferior de la página, se genera el PR y se abre para que pueda revisarlo en el repositorio correspondiente de GitHub:

pull request de GitHub que muestra que Snyk actualiza Halibut de la versión 4.4.4 a la 4.4.7 para corregir una vulnerabilidad crítica de ejecución arbitraria de código.

El pull request incluye todo el contexto que necesito para decidir si lo fusiono o no, incluida información sobre la vulnerabilidad y el alcance de la corrección sugerida.

pull request de GitHub que muestra una actualización de seguridad en la que la versión del paquete Halibut cambia de 4.4.4 a 4.4.7

Snyk también generará automáticamente un pull request en tu repositorio si se identifica una nueva vulnerabilidad o si hay una nueva corrección disponible para una de tus vulnerabilidades existentes.

Para asegurarte de no introducir accidentalmente nuevos problemas en tu proyecto, Snyk Open Source también analiza automáticamente cualquier pull request nuevo que tú u otro colaborador del repositorio abra, en busca de vulnerabilidades o licencias problemáticas:

Formulario de pull request de GitHub para actualizar dotNETGoofV2.Website.csproj y agregar el paquete Handsonstable

¡Comienza ahora!

El ecosistema .NET es relativamente complejo en comparación con otros ecosistemas. Para gestionar y mitigar eficazmente los riesgos que representan los paquetes .NET de código abierto, es importante no solo interpretar con precisión el árbol de dependencias, sino también contar con el contexto y los flujos de trabajo necesarios para actuar y corregir las vulnerabilidades detectadas.

Las nuevas capacidades de corrección de Snyk Open Source ayudan a los equipos de desarrollo y seguridad a encontrar los distintos problemas en sus aplicaciones, corregirlos activamente como parte de su trabajo diario y evitar que surjan nuevos problemas. Encontrarás más información para comenzar en nuestra documentación oficial de Snyk para .NET.

Si aún no lo has hecho, regístrate en Snyk y pruébalo. ¡Que disfrutes corrigiendo vulnerabilidades!

Empieza con los desafíos de Capture the Flag

Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.