Skip to main content

Primeros pasos con Snyk para desarrollar en Python de forma segura

Escrito por
blog feature secure python dev

4 de agosto de 2021

0 minutos de lectura

Si eres desarrollador de Python y quieres proteger tus aplicaciones fácilmente, ¡estás en el lugar indicado! Snyk te ayuda a proteger todo el código de tu app de Python —tu propio código, las bibliotecas de código abierto que incorporas, tus contenedores y tu infraestructura como código (IaC)— mediante una integración fluida en tus flujos de trabajo de desarrollo actuales.

La plataforma Snyk se compone de cuatro productos, cada uno diseñado para ayudarte a proteger los distintos componentes de tu app de Python de la forma más sencilla posible:

  • Snyk Code para encontrar y corregir problemas de seguridad y calidad en tu propio código Python.

  • Snyk Open Source para encontrar y corregir vulnerabilidades de seguridad y problemas de licencias en los paquetes de Python de código abierto que incorporas para crear tu app.

  • Snyk Container para encontrar y corregir vulnerabilidades de seguridad en tus imágenes de contenedor de Python.

  • Snyk Infrastructure as Code para encontrar y corregir vulnerabilidades de seguridad en el código que configura la implementación de tus apps de Python.

En este artículo, veremos lo fácil que es integrar las pruebas de seguridad de Snyk en tu forma de trabajar actual. El plan gratuito de Snyk es más que suficiente para probar los distintos pasos que se describen a continuación y también para cualquier proyecto pequeño.

Protege tu app de Python desde el principio

Como desarrollador, cuanto antes detectes los problemas, más fácil será corregirlos. Corregir una vulnerabilidad crítica después de haber empaquetado y enviado tu código lleva mucho más tiempo que hacerlo antes en el proceso.

Consejo profesional: Puedes probar y usar Snyk gratis para proyectos de código abierto. Para usar Snyk Open Source o Snyk Code mediante un complemento de IDE, no tienes que darle a Snyk acceso a tus repositorios de GitHub. La forma más fácil de probar Snyk es crear una cuenta gratuita y analizar un repositorio de código abierto. No hace falta instalar nada, y la integración se completa en segundos.

Snyk te ofrece varias formas de proteger tu código desde las primeras etapas del desarrollo: en tu IDE, con Advisor y con Snyk CLI.

IDE

También puedes usar Snyk para proteger tu código desde tu IDE. Por ejemplo, el complemento de Snyk para PyCharm es compatible con Snyk Open Source y Snyk Code, y te ayuda a encontrar y corregir fácilmente vulnerabilidades conocidas en tus dependencias de código abierto, así como problemas de seguridad y errores en tu propio código.

El complemento es fácil de configurar y puedes descargarlo e instalarlo, como cualquier otro complemento de JetBrains, directamente desde tu IDE.

Desde PyCharm, ve a Preferences y luego a Plugins, busca Snyk en el marketplace de JetBrains y haz clic en OK para descargar e instalar el complemento.

Luego, conecta el complemento con tu cuenta de Snyk. Para hacerlo, haz clic en el botón Connect your IDE to Snyk en la vista del complemento y sigue las instrucciones para autenticarte.

¡Eso es todo! Ahora solo tienes que ejecutar una prueba de Snyk. Haz clic en el botón Analyze now! para iniciar las pruebas de seguridad de Snyk. En unos segundos, el complemento te mostrará una lista de los distintos tipos de problemas detectados, agrupados en tres categorías:

  • Seguridad de código abierto: vulnerabilidades conocidas en las dependencias directas e indirectas (transitivas) de código abierto que incorporas al proyecto

  • Seguridad del código: debilidades de seguridad detectadas en tu propio código

  • Calidad del código: problemas de calidad en tu propio código

PyCharm muestra un proyecto de Python con hallazgos de seguridad de Snyk, incluidas vulnerabilidades de inyección de comandos y recorrido de rutas en package_index.py.

En el caso de los problemas detectados en tu propio código, por ejemplo, el complemento detalla el flujo de datos y señala los archivos y las líneas pertinentes que dan lugar al problema. Puedes hacer clic en el nombre del archivo para abrirlo rápidamente en la línea exacta donde se origina el problema. El análisis del flujo de datos te ayuda a identificar los problemas y a ver cómo se propagan por la aplicación, para que sea más fácil comprender y seguir los problemas complejos.

Pero el complemento no se queda ahí. Además de mostrarte qué está mal en el código, también incluye ejemplos de cómo otras personas han corregido el problema, para que puedas actuar más rápido.

Plugin de seguridad de Snyk en un IDE que muestra vulnerabilidades en código Python y una diferencia de código con cambios resaltados

Snyk Advisor

Snyk Advisor es una herramienta gratuita de investigación en línea que puede ayudarte a decidir qué paquetes de código abierto o imágenes base de contenedor usar. Incluye todos los proyectos de PyPi, así como imágenes base de Python de Docker Hub. Como desarrollador de Python, puedes usar Snyk Advisor para investigar distintos paquetes e imágenes y conocer su estado general y de seguridad antes de incorporarlos a tu proyecto.

Página de Snyk Advisor para el paquete de Python Jinja2 que muestra una puntuación de salud de 99/100, gráficos de popularidad y mantenimiento, y detalles de seguridad

En el caso del proyecto analizado en el paso anterior, investigar el paquete Jinja2 habría revelado que la versión 3 no solo es la más popular, sino que también está libre de vulnerabilidades.

CLI

Snyk CLI es una potente herramienta gratuita que puedes usar para ejecutar análisis de seguridad de Snyk en tu entorno de desarrollo local, de forma manual o como parte de tu canalización de CI/CD. Ofrece una larga lista de argumentos que puedes usar para extraer detalles específicos de los resultados del análisis de Snyk y personalizar el proceso de prueba. 

Nota: Snyk CLI se basa en Node.js y npm, SCOOP o Homebrew. Debes tenerlos instalados antes de usar Snyk CLI.

Configurar Snyk CLI es sencillo. Puedes usar npm o Homebrew para instalarlo rápidamente; luego, solo necesitas autenticarte con tu cuenta de Snyk:

npm install -g snyk
snyk auth

Solo falta un paso para analizar tu proyecto de Python: ejecuta el comando snyk test desde la carpeta raíz del proyecto.

Para las pruebas de Snyk Open Source, también tendrás que instalar las dependencias con:

pip install -r requirements.txt 
snyk test

Consejo profesional: Puedes generar el archivo requirements.txt de un proyecto si activas el entorno virtual y usas el comando pip freeze > requirements.txt.

Snyk no solo nos proporciona una lista de dependencias vulnerables y problemas de licencias, sino también información adicional para corregirlos, como las versiones recomendadas a las que actualizar algunas dependencias.

En el caso de el proyecto usado para este artículo, Snyk marca una vulnerabilidad de gravedad media introducida por la versión 2.11.1 del paquete Jinja y recomienda una actualización menor a la versión 2.11.3 para corregirla.

Terminal que muestra a Snyk analizando nueve dependencias de Python e identificando un paquete Jinja2 vulnerable con una actualización recomendada.

También puedes usar Snyk CLI para recibir notificaciones sobre vulnerabilidades recién divulgadas o nuevas correcciones para vulnerabilidades existentes. Para hacerlo, usa:

snyk monitor

"Los resultados están disponibles en la app de Snyk, en la URL proporcionada, y recibirás una notificación si se divulgan vulnerabilidades nuevas y relevantes.

Panel del proyecto de Snyk que muestra una vulnerabilidad de denegación de servicio por expresión regular de gravedad media en Jinja2, en una aplicación Python Flask

También puedes usar la misma CLI para analizar tus contenedores de Python en busca de problemas de seguridad y tu infraestructura como código (IaC). La compatibilidad de Snyk Code con la CLI estará disponible pronto. ¡No te lo pierdas!

Con el mismo proyecto, prueba a analizar la imagen de contenedor de la aplicación con el siguiente comando (tendrás que crear la imagen antes de analizarla):

snyk test --docker debian --file-Dockerfile

Snyk CLI analizará la imagen en busca de problemas y te dará algunos consejos para actualizar la imagen base.

Terminal que muestra a Snyk analizando una imagen de Docker de Debian y detectando vulnerabilidades en tar, bash y glibc.

Por último, puedes analizar tu código con Snyk Code. Usa el comando:

snyk code test .

La CLI analizará el proyecto local y mostrará los resultados.

Terminal que muestra la CLI de Snyk Code detectando un secreto codificado de alta gravedad en un archivo de configuración de Python

Consulta la guía rápida de CLI para obtener más consejos y trucos sobre Snyk CLI.

Los complementos de IDE de Snyk, Snyk Advisor y Snyk CLI están disponibles gratis y ofrecen análisis ilimitados para proyectos de Python de código abierto.

Integra la seguridad en tus repositorios de Python

Según la última encuesta de la comunidad de Python, realizada en 2019, el 90 % de los desarrolladores de Python usa sistemas de gestión de código fuente (SCM), como GitHub. No sería sorprendente que el porcentaje fuera aún mayor si les hiciéramos esa pregunta a los desarrolladores de Python en 2021.

Como gran parte de tu tiempo y tus procesos de desarrollo se desarrollan en estos sistemas, poder integrar la seguridad fácilmente sin ralentizar el desarrollo puede ser muy valioso. ¿Cómo? Aquí tienes algunos ejemplos:

  • Para asegurarte de no introducir código vulnerable en tu repositorio de Python, ¿qué tal si analizaras automáticamente cada nuevo pull request para detectar problemas?

  • Para asegurarte de que tu aplicación de Python esté en buen estado y actualizada, ¿qué tal si se generaran automáticamente pull requests para actualizar los paquetes de Python obsoletos?

  • Para corregir rápidamente las vulnerabilidades recién divulgadas, ¿qué tal si recibieras una notificación y un pull request con la corrección recomendada para resolver el problema?

  • Para automatizar la seguridad como parte de tu proceso de CI/CD, ¿qué tal si agregaras pruebas de seguridad como una GitHub Action o como parte de tus canalizaciones de Bitbucket?

  • Para asegurarte de que tu código propietario sea seguro, ¿qué tal si pudieras analizarlo rápidamente para detectar problemas de seguridad e identificar cómo fluyen los datos maliciosos por tu app, superpuestos a tu propio código?

Snyk te ofrece todo esto. En solo unos pasos, podrás importar tu proyecto de Python a Snyk para asegurarte de que esté debidamente protegido.

En Snyk, ve a Integrations, luego a GitHub y selecciona tu proyecto de Python para importarlo a Snyk. Al importar el nuevo proyecto, Snyk analizará automáticamente TODOS los componentes que lo conforman y los mostrará como subproyectos individuales en la página Projects:

Panel de Snyk Projects que muestra el repositorio python-flask-sample-app con análisis de código, deployment.yaml, Dockerfile y requirements.txt.

Por ejemplo, al abrir el deployment.yaml file, podrás consultar información sobre los problemas que Snyk Infrastructure as Code detectó en las configuraciones de implementación de Kubernetes de la aplicación.

Panel de problemas de seguridad que muestra un YAML de implementación de Kubernetes y una advertencia de que el contenedor se ejecuta sin control del usuario root

Una vez importado, Snyk supervisa continuamente tu proyecto de Python. Si aparecen nuevas vulnerabilidades en tus dependencias de código abierto o nuevas correcciones para vulnerabilidades existentes, se generará automáticamente un pull request.

pull request de GitHub de Snyk bot para actualizar Jinja2 de 2.11.1 a 2.11.3 y corregir dependencias vulnerables de Python

Snyk también abre pull requests automáticamente en otros casos. Puedes controlar su ritmo y frecuencia para evitar que te lleguen demasiados pull requests. Encontrarás más información sobre las correcciones de Snyk en la documentación de Snyk.

Las integraciones de Snyk con SCM están disponibles gratis y ofrecen análisis ilimitados para proyectos de Python de código abierto. Los productos de Snyk compatibles varían según el SCM.

Automatiza la seguridad de Python como parte de CI/CD

Integrar las pruebas de seguridad de Python en tu proceso de CI es una excelente forma de detectar vulnerabilidades antes de que tu código llegue a producción. Esta capa adicional de seguridad te permite detectar problemas incluso si no realizaste pruebas manuales en tu entorno local. 

Snyk se integra con las principales herramientas de CI/CD, como Jenkins, CircleCI y TeamCity. Además, como mencionamos antes, puedes usar Snyk CLI como un paso en cualquier canalización automatizada. Veamos un ejemplo: agregar las pruebas de seguridad de Snyk a un flujo de trabajo de GitHub Actions.

Snyk ofrece una Action para todas las versiones más recientes de Python, incluidas Python 3.6, 3.7 y 3.8. En este caso, usaremos la action para automatizar las pruebas de seguridad del mismo proyecto de Python que hemos analizado a lo largo de este artículo. 

Primero, define tu token de API de Snyk como secreto en la configuración de tu repositorio (Settings †’ Secrets). Luego, abre la pestaña Actions y crea un nuevo flujo de trabajo personalizado con la Python Snyk Action:

name: Example workflow for Python using Snyk
on: push
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/python@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

Como era de esperar, la misma vulnerabilidad que detectamos en la prueba de CLI anterior hizo que nuestra compilación fallara:

Trabajo de seguridad de GitHub Actions que muestra a Snyk analizando un proyecto de Python con Flask e informando una vulnerabilidad en una dependencia.

Como la Action se basa en Snyk CLI, puedes usar todos los argumentos que admite para ajustar el comportamiento de las pruebas de seguridad de Snyk como parte de tu proceso de CI.

¡Desarrolla rápido. Mantente protegido!

Python es ideal para los desarrolladores que quieren avanzar rápido. Es un lenguaje muy versátil, fácil de escribir y cuenta con una gran variedad de bibliotecas de código abierto que permiten agregar funcionalidades a tus aplicaciones rápidamente. Cuando sea el momento de publicar tu app, Docker, Red Hat y otras empresas ofrecen muchas imágenes base de contenedor de Python fáciles de usar. Incluso puedes escribir tus configuraciones de Kubernetes e infraestructura en Python.

Avanzar rápido y mantener la seguridad no son cosas incompatibles. Esperamos que este artículo te haya mostrado lo fácil que es integrar la seguridad en tu flujo de trabajo de desarrollo de Python actual, ya sea en tu entorno de desarrollo local, como parte integral de tu flujo de trabajo basado en Git o junto con tu proceso de compilación automatizado y, lo más importante, ¡sin tener que reducir el ritmo!

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA en 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y mantiene en verde la compilación y las pruebas.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.