Introducción
Los ataques a la cadena de suministro de software se han intensificado en los últimos años, afectando repositorios críticos como npm, PyPI y Maven. Para mitigar este riesgo, GitHub y PyPI implementaron mecanismos basados en tiempo que introducen retrasos controlados en la publicación y actualización de dependencias. Estas medidas buscan limitar el impacto de paquetes maliciosos recién publicados, dando tiempo a los equipos de seguridad para detectar y bloquear amenazas antes de que sean incorporadas a proyectos.
En esta guía, verás cómo configurar estas defensas en Dependabot (GitHub) y en PyPI, junto con las mejores prácticas para integrarlas en pipelines de CI/CD y flujos de trabajo de desarrollo. Al finalizar, podrás reducir la ventana de exposición a paquetes maliciosos sin sacrificar la agilidad en la gestión de dependencias.
Qué es y para qué sirve
GitHub Dependabot: Cooldown de actualizaciones
Dependabot es la herramienta de GitHub que automatiza la actualización de dependencias en repositorios. Ahora incorpora un cooldown por defecto de 72 horas antes de aplicar actualizaciones automáticas. Esto permite:- Detección temprana: Equipos de seguridad pueden identificar paquetes maliciosos antes de que sean adoptados masivamente.
- Reducción de riesgo: Los paquetes recién publicados, incluso si pasan filtros iniciales, deben esperar para ser incorporados.
- Flexibilidad: El cooldown puede ajustarse según la criticidad del proyecto (ej.: 24h para entornos de producción, 168h para desarrollos internos).
GitHub evaluó que este período equilibra la protección contra paquetes maliciosos rápidos con la necesidad de mantener actualizaciones oportunas. Sin embargo, reconoce que este mecanismo no es suficiente para compromisos a largo plazo (ej.: robo de tokens de publicación), por lo que recomienda combinarlo con:
- Uso de lockfiles para fijar versiones exactas de dependencias.
- Tokens con scopes restringidos (evitar tokens con permisos globales).
- Deshabilitar scripts de instalación innecesarios en pipelines de CI.
PyPI: Bloqueo de releases antiguos
PyPI implementó una política que rechaza la subida de nuevos archivos a releases publicados hace más de 14 días. Esto previene:- Poisoning de releases antiguos: Ataques que comprometen tokens de publicación para inyectar código malicioso en versiones ya liberadas y aparentemente seguras.
- Abuso de workflows comprometidos: Si un atacante obtiene acceso a un token de publicación, no podrá modificar releases históricos.
PyPI no reporta casos confirmados de ataques usando esta técnica, pero actúa de forma preventiva. Solo un ~1% de los proyectos en PyPI suben archivos después de 14 días, lo que valida la medida.
Prerequisitos
Antes de implementar estas defensas, asegúrate de:
| Requisito | Versión mínima | Notas |
|---|---|---|
| **GitHub** | GitHub Enterprise Cloud o GitHub.com | Dependabot viene incluido por defecto en repositorios públicos y privados. |
| **PyPI** | Cualquier cuenta de PyPI | No requiere configuración adicional; la restricción es automática. |
| **Dependabot** | GitHub.com o Enterprise | Si usas GitHub Actions, verifica que Dependabot esté habilitado en BLOCK11 . |
| **Python** | 3.7+ | Necesario para gestionar dependencias en entornos locales (opcional para configuración). |
| **Permisos** |
