Skip to main content

Optimizar la priorización con contexto profundo a nivel de aplicación

Escrito por

Michael Komraz

28 de julio de 2020

0 minutos de lectura

Priorizar las correcciones de vulnerabilidades es cada vez más difícil, tanto por el aumento constante del número de vulnerabilidades como por la complejidad de evaluar el riesgo que representan. Las vulnerabilidades no son iguales, y la variación de su riesgo está influenciada por diversos factores objetivos y subjetivos. Una priorización eficaz depende de evaluar estos factores con precisión.

CVSS se usa habitualmente para superar este desafío, pero tiene algunas limitaciones inherentes. Es cierto que CVSS v3 amplía la puntuación base y puede incluir métricas temporales y ambientales. Sin embargo, sigue sin tener en cuenta el contexto de la aplicación: CVSS no considera las diversas interdependencias e interacciones específicas entre la aplicación y las bibliotecas y funciones de código abierto que utiliza.

Aquí es donde entra en juego Reachable Vulnerabilities de Snyk.

Por qué importa “reachability”

La mayoría de las soluciones analiza tu aplicación para determinar qué dependencias de código abierto se incorporan a ella. Luego, compara esta lista con una base de datos de vulnerabilidades para generar un informe de las dependencias vulnerables.

Pero que haya una vulnerabilidad en una parte de tu código no significa necesariamente que toda la biblioteca sea vulnerable. En muchos casos, los desarrolladores usan solo una pequeña parte de una biblioteca o paquete, por lo que es muy posible que la función vulnerable no se “alcance” durante la ruta de ejecución de la aplicación. Por lo general, las vulnerabilidades que no se alcanzan no comprometen la aplicación en su conjunto y, por lo tanto, representan menos riesgo que las que sí se alcanzan.

Diagrama que muestra código propio y dependencias de código abierto, con funciones vulnerables marcadas como alcanzables o inalcanzables.

Reachable Vulnerabilities de Snyk puede analizar en profundidad el flujo de código de la aplicación y determinar si esta “alcanza” una función vulnerable. Después, los resultados de este análisis se pueden usar para priorizar de manera más eficaz.

Reachable Vulnerabilities en cifras

Mejoramos continuamente los algoritmos y las heurísticas que impulsan Reachable Vulnerabilities, pero podemos afirmar con confianza que el contexto que aporta Reachable Vulnerabilities reduce drásticamente la cantidad de vulnerabilidades que requieren atención urgente. De las vulnerabilidades encontradas en los 300 proyectos Java de Maven que probamos, solo el 2 % era realmente alcanzable por la aplicación. Se determinó que otro 20 % era potencialmente alcanzable.

Esto no significa que el 78 % restante de las vulnerabilidades sean falsos positivos. Al contrario: también es necesario clasificarlas y evaluarlas con ayuda de Priority Score de Snyk y otras capacidades de priorización. Sin embargo, usar Reachable Vulnerabilities como contexto te ayuda a identificar rápidamente las vulnerabilidades que debes corregir primero.

¿Cómo funciona?

Para determinar si una vulnerabilidad es alcanzable, usamos diversos algoritmos para crear un grafo de llamadas del código propietario de la aplicación y de sus dependencias de código abierto. El grafo de llamadas representa todas las rutas de ejecución de la aplicación y nos brinda la información necesaria para entender si llegan a la parte vulnerable de la dependencia.

Las distintas dependencias y funciones representadas en el grafo de llamadas se correlacionan con Snyk Intel Vulnerability Database, la base de datos de vulnerabilidades más completa, precisa y oportuna del mercado. La base de datos contiene información seleccionada manualmente, enriquecida y práctica sobre dependencias y sus funciones vulnerables, lo que garantiza que el análisis de Reachable Vulnerabilities genere resultados precisos.

La experiencia en seguridad de Snyk entra en juego cuando generar un grafo de llamadas no basta para determinar la reachability con precisión. Por ejemplo, en algunas aplicaciones, factores externos afectan el árbol de dependencias que se usa durante la ejecución. En otras, las vulnerabilidades que se consideran alcanzables no representan un riesgo, mientras que otras deben priorizarse como si fueran alcanzables, independientemente del grafo de llamadas. Reachable Vulnerabilities aplica técnicas heurísticas adicionales y lógica de análisis para garantizar resultados precisos.

Prueba tus proyectos con Reachable Vulnerabilities

Las pruebas de proyectos con Reachable Vulnerabilities se ejecutan mediante Snyk CLI. Solo tienes que agregar el parámetro --reachable-vulns al comando snyk test (nota: los proyectos deben compilarse antes de ejecutar la prueba):

snyk test --reachable-vulns

Snyk inicia el análisis. En segundo plano, Snyk crea el grafo de llamadas de la aplicación y lo correlaciona con los datos de vulnerabilidades de Snyk.

Al finalizar, los resultados de la prueba se muestran en la CLI. Estos resultados incluyen la cantidad de dependencias probadas, la cantidad de vulnerabilidades identificadas y cuántas de ellas se detectaron como alcanzables. Junto a cada vulnerabilidad se muestra un nivel de reachability y, debajo, una ruta desde el código de la aplicación hasta la función vulnerable.

Terminal que muestra los resultados de Snyk test para un proyecto de Maven, incluidos 59 problemas, 59 rutas vulnerables y dos vulnerabilidades alcanzables.

Hay tres niveles de reachability:

  • Alcanzable: se identificó una ruta clara desde la aplicación hasta la función vulnerable. Esta vulnerabilidad debe corregirse primero.

  • Potencialmente alcanzable: se encontraron indicios parciales de que la función vulnerable podría ser alcanzable. Esta vulnerabilidad debe revisarse.

  • Sin información: no hay suficiente información para determinar si la vulnerabilidad es alcanzable.

Prioriza con Reachable Vulnerabilities

La interfaz de Snyk ofrece una forma más sencilla de priorizar con Reachable Vulnerabilities dentro de los proyectos y entre ellos. Para usar Reachable Vulnerabilities en la interfaz de Snyk, ejecuta el siguiente comando de la CLI:

snyk monitor --reachable-vulns

En la página del proyecto de la interfaz de Snyk, se agregan indicadores de reachability a las tarjetas de problemas, junto con los otros tipos de indicadores que se usan para priorizar: la gravedad y Exploit Maturity. Además, los nuevos filtros de Reachable Vulnerabilities te permiten filtrar rápidamente las vulnerabilidades según su reachability:

Pantalla de detalles de vulnerabilidades de Snyk que muestra un problema de alta gravedad alcanzable y filtros para vulnerabilidades alcanzables.

Para ayudarte a corregir rápidamente las vulnerabilidades alcanzables, Snyk también muestra información detallada sobre la ruta exacta por la que la aplicación llama a la función vulnerable.

Página de detalles del problema de seguridad que muestra una vulnerabilidad de deserialización de gravedad alta en Jackson databind, con información sobre el exploit y su corrección

Los datos de reachability también están disponibles en la página Informes > Problemas, para que puedas supervisar y hacer un seguimiento de tus vulnerabilidades a lo largo del tiempo con mayor facilidad.

Panel de seguimiento de problemas con filtros para prioridad, madurez del exploit, estado, posibilidad de corrección y reachability.

¡Empieza ahora!

Una evaluación del riesgo de vulnerabilidades precisa y rápida es clave para priorizar de manera eficaz. La precisión, a su vez, depende de tener acceso a información contextual sobre los factores objetivos y subjetivos relacionados con una vulnerabilidad. Ese tipo de contexto es difícil de obtener.

Al analizar en profundidad la ruta de ejecución de la aplicación y correlacionarla con los amplios datos de seguridad de Snyk, Reachable Vulnerabilities de Snyk proporciona el contexto profundo a nivel de aplicación que se necesita para evaluar el riesgo con precisión y priorizar en consecuencia.

Reachable Vulnerabilities está disponible en versión beta para todos los planes de pago de Snyk, Standard y superiores, y solo para proyectos Java (Maven). Regístrate para obtener una cuenta gratuita y pruébalo.

Comienza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.