Identifica, prioriza y corrige vulnerabilidades con Reachable Vulnerabilities para GitHub
28 de enero de 2021
0 minutos de lecturaImagina que eres programador de Java y acabas de decidir usar el análisis de Snyk Open Source para encontrar problemas de seguridad en tus bibliotecas de terceros. ¡Buena decisión!
Sin embargo, después de conectar tu repositorio al analizador de Snyk Open Source, descubres que tienes diez o quizá hasta 50 vulnerabilidades en los paquetes de los que dependes. La gran pregunta es: ¿por dónde empiezo?
En un mundo ideal, querrías corregir todas las vulnerabilidades y terminar con cero. Sabemos que no siempre es posible. Además, probablemente no puedas corregirlas todas al mismo tiempo. Lo mejor es empezar por las vulnerabilidades que más afectan tu aplicación y avanzar desde ahí. Veamos cómo funciona.
La aplicación
Creé una pequeña aplicación Java basada en Maven y la publiqué en GitHub. Esta aplicación recibe una URL y ejecuta una solicitud GET a esa dirección. El resultado se muestra como texto sin formato en la página de resultados. Puede ser el HTML de una página web o, por ejemplo, la salida de un endpoint REST. Para ejecutar las solicitudes, uso el cliente HTTP de Apache y algunas otras dependencias, como se muestra en el archivo pom.

Identifica vulnerabilidades de seguridad en tu repositorio de GitHub
Para identificar vulnerabilidades de seguridad en mis dependencias de código abierto, conecté mi repositorio de GitHub a Snyk. También habilité la función Reachable Vulnerabilities, que actualmente está en beta. Puedes encontrar esta opción en Settings -> Integration -> GitHub Edit Settings. Ten en cuenta que todo lo que uso aquí forma parte del nivel gratuito de Snyk.

Cuando Snyk termina de analizar mi repositorio de GitHub, veo que mi aplicación tiene muchas vulnerabilidades heredadas del paquete de código abierto que uso. Sin embargo, la función Reachable Vulnerabilities me muestra si se puede llegar a una vulnerabilidad desde código como el siguiente.

Prioriza la corrección de vulnerabilidades
La vulnerabilidad de validación incorrecta de entradas es un problema de gravedad alta en la versión 4.3.1 de httpclient de Apache. La interfaz de usuario de Snyk me muestra que se puede llegar a la función vulnerable mediante el método doPost de mi URLServlet. Este problema específico se debe a que una entrada URI no se valida correctamente y puede poner en riesgo tu software. Después de hacer algunas pruebas, encontré al menos uno de los problemas.
La URI puede separar las credenciales del nombre de host en una URI. Por ejemplo, http://bmv:pwd@snyk.io hace referencia al dominio snyk.io. Sin embargo, si agrego otro signo @ en la parte de la contraseña de las credenciales, puedo salir de la URL. En resumen, http://bmv:pwd@foojay.io:80@snyk.io me muestra el resultado del dominio foojay.io, no de snyk.io.

El indicador de reachability está disponible para la integración de GitHub en la plataforma Snyk para proyectos Java Maven. Es una herramienta esencial para priorizar la corrección de vulnerabilidades en tu aplicación. Cuando aparece este indicador, existe una ruta desde tu código hasta el método vulnerable del paquete importado.
Para calcular la reachability en la integración de GitHub, Snyk bifurca tu código y lo inspecciona. Creamos un grafo de llamadas y lo analizamos para identificar si existe una ruta hasta un método con una vulnerabilidad conocida. Si existe, la vulnerabilidad correspondiente recibe la etiqueta “reachable”. Además, que una vulnerabilidad sea reachable también influye en el puntaje de prioridad que aparece en la esquina superior derecha. Este puntaje combina varias heurísticas para ayudar a los desarrolladores a determinar qué vulnerabilidades son más dañinas en su contexto y, por lo tanto, deberían tener mayor prioridad al corregirlas.

Si me desplazo hacia abajo en la interfaz de Snyk, veo más vulnerabilidades, incluida una vulnerabilidad de denegación de servicio en el paquete snakeyaml. Observa que esta vulnerabilidad no tiene el indicador de reachability, ya que solo importo el paquete y nunca lo uso en mi programa de ejemplo.

Conclusión
Reachable Vulnerabilities para nuestra integración de GitHub es una función potente y gratuita que ayuda a todos nuestros usuarios a decidir mejor por dónde empezar a corregir vulnerabilidades y cuáles resolver primero.
Sin embargo, esto no significa que puedas ignorar sin riesgos las vulnerabilidades que no tienen el indicador de reachability. Siguen formando parte de tu aplicación y es posible que se activen de otras maneras.
En especial en Java, contamos con elementos como la API de reflexión. Además, todas las clases están disponibles a través del classpath. Esto significa que, si es posible ejecutar código arbitrario en tu aplicación, todas las clases disponibles pueden cargarse y explotarse.
Lo que quiero decir es que las vulnerabilidades a las que no se puede llegar directamente aún pueden explotarse mediante una cadena de eventos. Aun así, Reachable Vulnerabilities te permite saber por dónde empezar a hacer que tu aplicación sea mejor y más segura. ¿Qué esperas? ¡Crea una cuenta gratuita de Snyk y pruébalo!
La aplicación que se usa en esta publicación del blog está disponible en este repositorio de GitHub.
Comienza con Capture the Flag
Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.


