La oleada de ciberataques obligó a los responsables del servicio a tomar medidas drásticas.

La empresa GitHub, propietaria de la plataforma npm, anunció dos nuevas medidas de protección para el ecosistema de JavaScript. Las actualizaciones deben dificultar los ataques en los que los adversarios intentan sustituir paquetes populares mediante compilaciones automáticas y fuentes de terceros. Los cambios afectan tanto al proceso de publicación de paquetes como a la instalación de dependencias.
La novedad principal es el modo «publicación escalonada», que ahora está disponible para todos los usuarios de la CLI de npm en la versión 11.15.0 y posteriores. En lugar de publicarse de forma instantánea, un paquete preparado se envía primero a una cola especial. Tras la carga, la versión permanece no disponible para su instalación hasta que el responsable del proyecto confirme manualmente el lanzamiento mediante la CLI de npm o el sitio npmjs.com.
En GitHub explicaron que el mecanismo refuerza la verificación de intervención humana en cada publicación. La confirmación exige autenticación de dos factores, incluso si la compilación se crea automáticamente mediante integración continua y entrega continua (CI/CD) o mediante la publicación de confianza con OpenID Connect (OIDC). Los desarrolladores esperan que el nuevo esquema dificulte los ataques a la infraestructura de compilación y reduzca el riesgo de distribución de actualizaciones maliciosas a través de pipelines comprometidos.
La compañía recomienda usar la publicación escalonada junto con la publicación de confianza. En ese modo, la CI/CD podrá solo subir el paquete a la cola, y la aprobación final corresponderá al propietario del proyecto. Para cambiar al nuevo modelo será necesario actualizar los flujos de trabajo y reemplazar el comando npm publish por npm stage publish.
Al mismo tiempo, GitHub amplió el control sobre las fuentes de dependencias. En la versión npm 11.15.0 aparecieron las banderas --allow-file, --allow-remote y --allow-directory. Las configuraciones permiten restringir la instalación de paquetes desde directorios locales, archivos y URL remotas. Anteriormente, una posibilidad similar existía solo para fuentes Git mediante el parámetro --allow-git.
Cada opción admite dos modos: all y none. Las configuraciones se pueden aplicar tanto desde la línea de comandos como en archivos .npmrc y package.json. En npm recordaron que en la próxima versión importante de la CLI el parámetro --allow-git cambiará por defecto de all a none.
Las nuevas restricciones para archivos, directorios y fuentes remotas por ahora son opcionales, pero los desarrolladores ya pueden activar un modelo de seguridad más estricto. Cuanto menos se permita a la automatización actuar sin control, más difícil será convertir la comodidad del desarrollo en un canal para un ataque inadvertido.