Cybersecurity·9 min read

Supply chain attacks 2026: el año en que pypi y npm sufrieron su mayor crisis

Los ataques a dependencias en 2026 marcaron un punto de inflexión. Analizamos qué pasó, qué aprendimos y cómo protegerse.

Dax Reyes
··2,400 views

Febrero de 2026 quedará en la historia del ecosistema JavaScript como el mes en que la confianza en npm se tambaleó. Durante 72 horas, 47 paquetes populares de npm fueron comprometidos en un ataque coordinado que afectó a más de 3.5 millones de descargas. Pero no fue un incidente aislado: solo dos semanas antes, PyPI había sufrido un ataque similar con 23 paquetes maliciosos.

Juntos, estos eventos marcaron 2026 como el año de la crisis de la supply chain, y obligaron a toda la industria a repensar cómo gestionamos las dependencias.

Qué pasó exactamente

El ataque a npm comenzó con un paquete aparentemente inocuo llamado color-utils-lite. El autor original, un desarrollador con reputación establecida, había recibido una oferta generosa por transferir la propiedad del paquete. Lo que no sabía era que el comprador era un grupo de atacantes que planeaba usar el paquete como vector de infección.

Una vez obtuvieron el control, publicaron una nueva versión que incluía código malicioso disimulado como una optimización de rendimiento. El código exfiltraba credenciales de AWS y tokens de GitHub a un servidor controlado por los atacantes. Pero lo más preocupante no fue el paquete en sí, sino sus dependencias: 12 paquetes populares dependían de color-utils-lite, creando un efecto cascada que amplificó el impacto.

En PyPI, el ataque siguió un patrón similar pero con una variante: los atacantes usaron typosquatting, creando paquetes con nombres casi idénticos a librerías populares pero con caracteres Unicode que los hacían indistinguibles visualmente. requests se convirtió en requests (con una 'e' cirílica), y miles de desarrolladores cayeron en la trampa.

Por qué funcionó

La crisis de 2026 no fue un fallo de tecnología, sino un fallo de confianza. Durante años, la comunidad asumió que si un paquete estaba en npm o PyPI, era seguro. La reputación del autor, el número de descargas y la ausencia de reportes de problemas se convirtieron en proxies de seguridad que resultaron insuficientes.

Los atacantes explotaron varias debilidades del sistema:

Transferencia de propiedad sin verificación: npm permitía transferir la propiedad de un paquete sin notificar a los dependientes. Un paquete con años de historia podía cambiar de manos de la noche a la mañana, y nadie tenía forma de saberlo.

Falta de auditoría automática: Los registros no verificaban si el código de una nueva versión introducía cambios sospechosos en el comportamiento, como llamadas a red no documentadas o acceso al sistema de archivos.

Dependencias transitivas invisibles: La mayoría de los desarrolladores revisaban sus dependencias directas, pero raramente miraban más allá. Los atacantes sabían esto y apuntaron a paquetes de bajo nivel que servían como dependencias de dependencias.

La respuesta de la industria

La reacción fue rápida y coordinada. npm, en colaboración con GitHub, lanzó el "Supply Chain Verification Protocol" en marzo de 2026. Este protocolo introdujo tres cambios fundamentales:

Primero, cualquier transferencia de propiedad de un paquete con más de 10.000 descargas semanales ahora requiere verificación de identidad y un periodo de cuarentena de 7 días durante el cual los dependientes son notificados.

Segundo, se implementó análisis automatizado de diff entre versiones. Si una nueva versión introduce cambios que podrían ser maliciosos —como llamadas a red nuevas o acceso a credenciales— el paquete es marcado para revisión manual.

Tercero, se obligó a los paquetes populares a firmar sus versiones con Sigstore, lo que permite verificar que el código publicado es exactamente el que el autor intentó publicar.

PyPI siguió un camino similar pero añadiendo una capa adicional: detección de typosquatting mediante análisis de similitud de nombres Unicode. Ahora, cuando alguien intenta publicar un paquete con un nombre sospechosamente similar a uno existente, el sistema lo bloquea y requiere revisión manual.

Cómo protegerse hoy

Las lecciones de 2026 han cristalizado en un conjunto de mejores prácticas que todo equipo debería seguir:

Lock files inmutables: Nunca instales dependencias sin un lock file. package-lock.json y poetry.lock no son opcionales; son tu primera línea de defensa.

Dependabot automático: Mantener las dependencias actualizadas reduce la ventana de exposición. Las herramientas automatizadas como Dependabot o Renovate deberían ser obligatorias en cualquier proyecto serio.

SBOM (Software Bill of Materials): Generar y mantener un SBOM de tu aplicación te permite responder rápidamente cuando se descubre una vulnerabilidad en una dependencia. Saber qué paquetes usas y dónde es el primer paso para mitigar el riesgo.

Auditoría periódica: Herramientas como npm audit, snyk o osv-scanner deberían ejecutarse regularmente en tu CI/CD, no solo como un paso opcional.

Principio de mínimo privilegio: Si un paquete solo necesita leer archivos, no debería tener permiso de red. Herramientas como npm pkg te permiten restringir permisos a nivel de paquete.

El nuevo normal

La crisis de 2026 cambió para siempre cómo pensamos sobre las dependencias. La confianza ciega ha sido reemplazada por la confianza verificada. Los desarrolladores son más conscientes de que cada dependencia es una superficie de ataque potencial, y los ecosistemas han implementado salvaguardas que hacen que los ataques sean más difíciles.

Pero la batalla no ha terminado. Los atacantes siguen evolucionando, y la próxima crisis podría no venir de npm o PyPI, sino de ecosistemas menos maduros. La lección de 2026 no es "resolvimos el problema", sino "ahora sabemos que el problema existe y tenemos herramientas para enfrentarlo".

La supply chain security dejó de ser un tema nicho en 2026. Se convirtió en una preocupación central para cualquier equipo que desarrolle software. Y eso, en el fondo, es una buena noticia.

Share

Dax Reyes

Sistemas y Kernel

// Related

Supply chain attacks 2026: el año en que pypi y npm sufrieron su mayor crisis — SYNTHNODE