Los gestores de paquetes convergen en defensa: cooldowns, scripts bloqueados y auditoría
Dieciséis semanas de novedades del ecosistema muestran que las mismas barreras defensivas se repiten herramienta tras herramienta y que tres clases de fallo no dejan de parchearse.

Dieciséis semanas de boletines sobre gestores de paquetes, armados a partir de unos ochenta feeds RSS, dejan un patrón reconocible: las mismas funciones defensivas aterrizan en herramienta tras herramienta y los mismos tres tipos de fallo se corrigen una y otra vez. No hay un movimiento coordinado detrás; es convergencia por imitación y por sustos compartidos.
Enfriamiento y scripts bloqueados
La función más repetida es la puerta por antigüedad de versión. Deno 2.8 metió min-release-age en su manejo de .npmrc en mayo, y para principios de septiembre había gates equivalentes en Bundler, npm, Yarn, mise, Hex, Mamba y Cargo, este último mediante el flag nocturno -Zmin-publish-age. Dependabot convirtió un enfriamiento de tres días en su valor por defecto incondicional en agosto. El cruce con las actualizaciones de seguridad salió como caso aparte: Dependabot, Renovate y Hex añadieron cada uno una forma de levantar la barrera cuando se publica un aviso contra la versión retenida. La utilidad práctica es clara: das margen a que la comunidad pise el paquete envenenado antes de que lo instale tu CI.
El bloqueo de scripts de instalación se volvió lo normal en el ecosistema JavaScript. npm 12 corta por defecto los lifecycle scripts con una allowlist allowScripts, Bun 1.4 limita la autoconfianza a paquetes bajados del registro npm y pnpm extendió allowBuilds a las dependencias alojadas en git. En la misma línea, npm 12 deja allow-git y allow-remote en none por defecto, y Composer 2.10 desactiva el fallback de dist a source cuando falla la descarga. El postmortem de la compromisión de Nx ya señaló a un pnpm viejo ignorando minimum-release-age, y tanto npm 12 como pnpm 12 ahora fallan ante claves de configuración desconocidas en lugar de saltárselas.
Los controles en el lado del registro también se apretaron: publicación por etapas y restricciones a los tokens que evaden 2FA en npm, versiones inmutables y log de transparencia en Packagist, rechazo de archivos nuevos añadidos a releases con más de catorce días en PyPI, y vida útil de las claves de API de NuGet.org recortada de 365 a 30 días. La AUR desactivó la adopción de paquetes huérfanos tras dos incidentes de toma de control, empezando por alvr.
Traversal, credenciales y ejecución de comandos
En catorce de las dieciséis semanas se corrigió al menos un path traversal en la extracción de archivos o en la instalación, repartido entre uv, pnpm, RubyGems, Podman, Composer, Guix, opam, ORAS, Docker, Flatpak y Poetry. pnpm solo sumó cuatro arreglos distintos, Docker tres y Composer dos. Envío de credenciales al host equivocado hubo casi tanto: Cargo 1.96, Dependabot, ORAS 1.3.4, Composer 2.10.3 y las cuatro rutas de exfiltración que Renovate destapó vía cabeceras Link maliciosas y claves privadas TLS en los logs. El CDN de RubyGems.org sirvió la clave de API heredada de una cuenta a otra por una mala configuración de caché. La inyección de comandos a través de una URL o referencia de VCS apareció en pnpm, Docker y Composer, y cuatro de los diez avisos de Renovate cayeron en esa clase.
En el lado del dinero, Alpha-Omega financió residencias de ingenieros de seguridad en la PHP Foundation y Ruby Central, y la Rust Foundation lanzó un Maintainers Fund con Google, AWS y OpenAI detrás. La Sovereign Tech Agency invirtió 508.640 euros en Flatpak. También hay bajas: Helm v3 fijó un calendario de fin de soporte para febrero de 2027, Go soltó Bazaar, pip deprecó el resolver antiguo para eliminarlo en 2027 y Maven 3.8.x llegó a fin de vida.

