Skip to main content

Automatiza la corrección de vulnerabilidades en dependencias de Python con Snyk

Escrito por

26 de febrero de 2020

0 minutos de lectura

Nos complace anunciar que mejoramos la compatibilidad con Python en Snyk Open Source. Así, los desarrolladores pueden corregir vulnerabilidades en dependencias con la ayuda de pull requests de corrección automatizados.

El índice de paquetes de Python (PyPI) registró más de 14 mil millones de descargas durante 2018, una cifra impresionante desde cualquier perspectiva (debido a un error en el servicio de estadísticas de PyPI a mediados de año, es probable que la cifra real sea mucho mayor). Este número refleja no solo la amplia adopción de Python como lenguaje de programación (el lenguaje n.º 2 en la actualidad, según GitHub), sino también el desafío de usar software de código abierto: muchos de estos paquetes incorporan dependencias vulnerables, tanto directas como indirectas, en los proyectos. Snyk ha informado sobre algunos ejemplos durante el último año, incluido un artículo sobre paquetes maliciosos.

Con esta última mejora, Snyk Open Source ayuda a los desarrolladores de Python a crear aplicaciones más seguras. Además de encontrar estas dependencias vulnerables, les ofrece pasos automatizados para corregirlas, todo dentro de sus flujos de trabajo de desarrollo existentes. Para ello, Snyk crea un árbol de dependencias a partir del archivo requirements.txt incluido en un proyecto de pip. Luego, estas dependencias se analizan con la base de datos de vulnerabilidades de Snyk y cualquier problema corregible que se encuentre activa automáticamente un pull request de corrección.

Importa tus proyectos de Python

Snyk ofrece varias integraciones con repositorios de código basados en Git, como GitHub, GitHub Enterprise, GitLab, Bitbucket Server y Bitbucket Cloud. Estas te permiten analizar, monitorear y corregir fácilmente vulnerabilidades de seguridad y problemas de licencias en tus proyectos de Python, como parte de tus flujos de trabajo de administración de código y desarrollo.

Veamos un ejemplo de cómo funciona con una aplicación de Python de muestra alojada en GitHub.

En este ejemplo, ya iniciamos sesión en Snyk con nuestras credenciales de GitHub. Por eso, Snyk configuró automáticamente la integración y ahora muestra una lista de todos los repositorios disponibles.

Pantalla de selección de repositorios de Snyk que muestra repositorios de GitHub con the-example-app.py seleccionado para realizar pruebas

En la pantalla Importar, selecciona el proyecto de Python que quieres que Snyk analice y haz clic en Agregar repositorios seleccionados. Snyk analiza todos los repositorios que seleccionaste en busca de archivos de manifiesto e importa una instantánea de cada archivo por separado.

Se muestra la página Proyectos. Cuando Snyk termine de importar el proyecto de Python, verás un mensaje de confirmación en la parte superior de la página que te pedirá actualizarla. Después de actualizarla, verás tu proyecto de Python, identificado con el logotipo de Python y junto con los demás proyectos que hayas integrado.

Panel de Snyk Projects que muestra repositorios de GitHub con recuentos de vulnerabilidades altos, medios y bajos.

Como muestran las cifras de este ejemplo, Snyk encontró varias vulnerabilidades en el proyecto importado. Para examinarlas más de cerca, selecciona la aplicación de Python en la lista de proyectos para expandirla y luego haz clic en el enlace requirements.txt.

Ahora verás un informe completo del análisis de tu proyecto.

Panel del proyecto de Snyk que muestra un archivo de requisitos de Python con dos vulnerabilidades y recomienda actualizar Flask de la versión 0.12.2 a la 0.12.3.

En la parte superior de la página se muestran varios metadatos del proyecto, como la cantidad de vulnerabilidades encontradas y la cantidad de rutas por las que se incorporan.

También verás recomendaciones para corregir algunos de los problemas encontrados (¡otra función nueva de la que pronto te contaremos más!). En este caso, actualizar la dependencia flask de la versión 0.12.3 a la versión 0.12.3 corrige dos problemas de gravedad alta.

Panel de recomendaciones de corrección que muestra la actualización de Flask 0.12.2 a 0.12.3 para solucionar problemas de validación incorrecta de entradas y denegación de servicio

Pull requests de corrección

Más abajo se muestran todas las vulnerabilidades encontradas en tus dependencias, junto con información contextual que puede ayudarte a priorizar los problemas y comenzar a corregirlos, si es necesario.

Panel de vulnerabilidades que muestra un problema de denegación de servicio de alta gravedad en Flask, con detalles de remediación y opciones para abrir un pull request con la corrección.

Los distintos filtros del lado izquierdo de la página te ayudan a navegar por los problemas encontrados. Por ejemplo, puedes filtrar por gravedad para corregir primero las vulnerabilidades de gravedad alta o por nivel de madurez del exploit, un indicador de qué tan peligrosa es una vulnerabilidad (más información sobre la madurez de los exploits aquí).

Para las vulnerabilidades para las que Snyk encontró una corrección, puedes crear un pull request desde Snyk con solo hacer clic en Corregir esta vulnerabilidad.

Informe de vulnerabilidades de seguridad de gunicorn que muestra un problema de gravedad media de contrabando de solicitudes HTTP y recomienda actualizar a versiones más recientes.

La compatibilidad mejorada con Python también permite activar automáticamente pull requests para nuevas vulnerabilidades, según tu configuración (más detalles a continuación). Los pull requests que abre Snyk muestran información contextual que te ayuda a entender por qué se activó el pull request, qué cambios aplicará la corrección a tus dependencias y más detalles sobre la vulnerabilidad que busca corregir.

pull request de GitHub del bot de Snyk que muestra correcciones para dos dependencias vulnerables de Python en requirements.txt.

Pull requests de prueba

Cada pull request nuevo con cambios en el archivo requirements.txt se analiza automáticamente para asegurarse de que no incorpores nuevas vulnerabilidades de seguridad en tu proyecto. Si se encuentran vulnerabilidades, el pull request no supera la prueba de seguridad y puedes decidir si quieres continuar con su fusión.

pull request de GitHub que muestra una verificación de seguridad fallida con siete vulnerabilidades, una verificación de licencia exitosa y ningún conflicto de fusión.

Puedes configurar toda esta automatización. Es posible desactivar tanto los pull requests de prueba como los de corrección. En el caso de los pull requests de prueba, también puedes controlar las condiciones para que no se aprueben.

Página de configuración de Snyk que muestra las comprobaciones de pull request habilitadas, las condiciones de error y los pull requests de corrección automática con parches para dependencias vulnerables.

Seguridad que prioriza a los desarrolladores con Snyk

Mantenerte al tanto de las dependencias vulnerables puede considerarse una de las mejores prácticas de seguridad para Python. Es más fácil decirlo que hacerlo, ¿verdad? La facilidad para incorporar código de terceros en los proyectos y el crecimiento general de la adopción del código abierto hacen que sea cada vez más complicado obtener visibilidad y control sobre este código.

Snyk se diseñó para ayudar a los desarrolladores a superar este desafío con una herramienta fácil de usar que se integra de forma nativa en los flujos de trabajo existentes y ayuda a automatizar el proceso de detección y corrección de vulnerabilidades en dependencias de código abierto.

La corrección automatizada para Python está disponible en todos los planes de Snyk Open Source, incluido nuestro plan gratuito, que permite realizar análisis ilimitados de proyectos de código abierto. Para probarla, crea una cuenta (con el enlace a continuación) y empieza a analizar. Mientras tanto, estos recursos te ayudarán a comenzar a proteger tus proyectos de Python:

¡Escribe código de forma segura!

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.