requisitos.txt - instalación de pip requisitos.txt - congelación de pip requisitos.txt

Peligros ocultos de Requirements.txt: cómo la fijación de dependencias puede salvarte

requirements.txt: ¿Herramienta principal o amenaza oculta?

Todos los proyectos de Python lo tienen. Ese aspecto inocente requirements.txt Sentado en la raíz de su repositorio, el archivo pip install requirements.txt consume, es una lista de dependencias, claro, pero si no tienes cuidado, también puede ser una puerta abierta a compilaciones inestables, paquetes vulnerables y problemas de seguridad graves.

En esencia, requerimientos.txt controla qué paquetes de terceros extrae tu aplicación. Cuando ejecutas instalación de pip -r requirements.txtEl administrador de paquetes de Python instala todas las dependencias enumeradas. Pero aquí está el truco: si no fijas versiones exactas, estás... confiando en PyPI Servir siempre una versión segura, compatible y sin modificaciones. Así no funciona la seguridad de aplicaciones moderna.

Sin la fijación, las compilaciones pueden fallar. Peor aún, su aplicación podría ingerir paquetes maliciosos sin saberlo. Versiones abiertas (Matraz >=1.0, por ejemplo) o restricciones de versión flexibles (django~=3.2) son terreno fértil para la inyección de código inseguro. Por eso, es fundamental gestionar adecuadamente requerimientos.txt es una tarea de seguridad fundamental.

Dónde se congela pip y se descomponen los requisitos de instalación de pip.txt

congelación de pepitas es conveniente, pero también peligroso cuando se usa sin comprender lo que captura. Los desarrolladores a menudo generan requerimientos.txt usando Requisitos de congelación de pip.txt, esperando que bloquee su entorno. Sin embargo, la congelación no valida la seguridad ni el origen de las dependencias; simplemente elimina todo lo instalado, incluyendo los paquetes transitivos y potencialmente obsoletos.

Ahora imagina que un compañero de equipo, o tu CI, corre a ciegas instalación de pip -r requirements.txt. Si ese archivo incluye información obsoleta, vulnerable o incluso paquetes erróneosAcabas de automatizar un incidente de seguridad.

Ejemplo rápido:

# Developer's freeze output
pip freeze > requirements.txt
boto3==1.24.20
requests==2.27.1

⚠️ Ejemplo inseguro, no utilizar en producción

Ahora agrega esto a tu CI pipeline:

- name: Install dependencies
run: pip install -r requirements.txt

Confía en que el entorno es reproducible, que nada ha cambiado en PyPI y que cada dependencia sigue siendo seguro. Es una suposición enorme cuando se confía en Requisitos de congelación de pip.txt flujos de trabajo.

Amenazas reales para AppSec: errores tipográficos y confusión de dependencias en requirements.txt

A los atacantes les encantan los ecosistemas de código abierto. ¿Por qué? Porque los desarrolladores suelen confiar en los valores predeterminados y la confianza implícita. Así es como atacan usando requerimientos.txt:

  • Typosquatting:Subir un paquete malicioso con un nombre como solicitudes en lugar de solicitudes Un personaje menos y tu build será propiedad de alguien más.

solicitudes # ⚠️ Ejemplo ilustrativo, no un paquete real para instalar

  • Confusión de dependenciaSi su paquete interno no está fijado ni tiene un alcance privado, los atacantes pueden publicar una versión maliciosa en PyPI con el mismo nombre. Si su CI no valida las fuentes, instalará su paquete en lugar del suyo.

Ambos ataques explotan la falta de fijación estricta y control de la fuente en requerimientos.txt. Si el tuyo solo dice alguna biblioteca interna, y corres Requisitos de instalación de pip.txt En CI, podría obtener el paquete equivocado del lugar equivocado.

Asegurar requirements.txt en CI/CD Pipelines con Hashes y Pinning

Aquí te explicamos cómo endurecerlo requerimientos.txt contra amenazas del mundo real:

  • Pin versiones exactas: Siempre usa == para cada paquete en su requerimientos.txt. Sin comodines, sin rangos.
  • Usa –require-hashes:Esto hace instalación de pip -r requirements.txt verificar la integridad de cada paquete descargado.

Ejemplo:

flask==2.2.5 \
--hash=sha256:<actual_hash_here> 

⚠️ Ejemplo demostrativo, reemplazar con hash real en proyectos reales

  • Aísle sus compilacionesConstruye siempre en contenedores limpios y minimalistas. Nunca confíes ciegamente en la imagen base.
  • Utilice un índice PyPI privado:Aloja tu propio proxy/caché y refleja solo paquetes confiables.

Ejecutar análisis de dependencia:Integrar herramientas como pip-auditoría vea la sección SBOM-análisis basado en su pipelines.

Ejemplo de fragmento de acciones de GitHub:

- name: Secure install
  run: pip install --require-hashes -r requirements.txt

⚠️ Educativo pipeline Por ejemplo, adaptarse a su entorno.

Manejo estricto de instalación de pip -r requirements.txt in CI/CD Es una de las formas más sencillas de reducir el riesgo del código abierto.

Construcciones reproducibles: cómo mantenerlas estables en distintos entornos

Si su aplicación funciona localmente pero falla en la etapa de prueba o producción, dependencias inconsistentes en requerimientos.txt Son los sospechosos habituales. Incluso una pequeña desviación de la versión causa grandes problemas.

Utilice estas estrategias:

  • pip-herramientas: Utilice compilación de pip para generar requerimientos.txt de un requisitos.enResuelve dependencias con fijación adecuada.
  • Marcadores ambientales:Para paquetes específicos del sistema operativo o dependencias específicas de la versión de Python, utilice marcadores como sistema_plataforma == 'Linux'.
  • Almacenamiento en caché de Docker:En CI, almacene en caché sus capas de Docker después de instalar dependencias desde requerimientos.txt para reducir la variabilidad de la construcción.

Ejemplo con pip-tools:

# requirements.in
flask

# Compile
pip-compile requirements.in

⚠️ Ejemplo demostrativo, el resultado real depende de su entorno

La salida es completamente fijada requerimientos.txt.

Herramientas como congelación de pepitas, cuando se combina con instalación de pip -r requirements.txt Durante las construcciones, se requiere disciplina y medidas de seguridad adicionales.

Conclusión: Cómo asegurar sus requisitos con confianza

Mala gestión requerimientos.txt No es solo una mala práctica; es un riesgo de seguridad activo. El anclaje flexible, las instalaciones no verificadas y la confianza ciega en registros abiertos son las formas en que los atacantes explotan su... CI/CD pipelineEstos no son fallos teóricos; se explotan a diario.

La fijación de dependencias es más que una práctica recomendada. Es la primera línea de defensa contra ataques a la cadena de suministro en Python. Combine eso con –require-hashes, construir aislamiento y herramientas reproducibles como pip-herramientas, y obtienes un pipeline Eso es más difícil de negociar.

Ya sea que estés usando Requisitos de instalación de pip.txt Localmente o en CI, siempre verifique y monitoree lo que se incluye en sus compilaciones. Herramientas como xygeni Proporcionar visibilidad, cumplimiento de políticas y controles automatizados que bloquean su cadena de suministro de Python. Requisitos de congelación de pip.txt Durante todo el proceso de producción.

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Además, te ofrecemos una prueba gratuita de 7 días de nuestra Business Edition para que puedas explorar las funciones avanzadas de la plataforma SecurityScorecard.
No se requiere tarjeta de crédito

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni