Se ha registrado un ataque de phishing en las bibliotecas JavaScript, durante el cual se envió un mensaje en nombre del servicio NPM, notificando la necesidad de confirmar su correo electrónico. El ataque permitió a los delincuentes obtener tokens de NPM de uno de los grandes proyectos de JavaScript y lanzar actualizaciones con código malicioso para cinco paquetes de NPM, sumando alrededor de 100 millones de descargas semanales.
El mensaje enviado seguía el estilo de notificaciones típicas de NPM, enviadas desde la dirección «support@npmjs.org», pero el dominio de la URL era «npnjs.com» en lugar de «npmjs.com» (la tercera letra «n» en lugar de «m»). Los atacantes aprovecharon el efecto psicológico que hace que el cerebro, anticipando un resultado esperado, no note distorsiones menores, como la sustitución de letras similares o el cambio en el orden de las letras en una palabra. Al hacer clic en el enlace, se abría una copia completa del sitio npmjs.com (probablemente se configuró un proxy que interceptaba el token de acceso).

Durante el ataque se generaron nuevas versiones de los paquetes:
- eslint-config-prettier: 8.10.1, 9.1.1, 10.1.6, 10.1.7.
- eslint-plugin-prettier: 4.2.2, 4.2.3.
- synckit: 0.11.9.
- @pkgr/core: 0.2.8.
- napi-postinstall: 0.3.1.
A las versiones generadas se les añadió código malicioso para atacar a los usuarios que utilizan la plataforma Windows. Los cambios realizados cargaban la biblioteca node-gyp.dll, que contiene funcionalidades para la ejecución remota de comandos en el sistema.
El editor se dio cuenta de que había sido víctima de phishing aproximadamente una hora después de recibir la primera queja sobre la publicación de lanzamientos sospechosos. Inmediatamente revocó el token de acceso, cambió las contraseñas y marcó las versiones problemáticas como obsoletas para evitar su descarga por sistemas de compilación automatizados y envió una solicitud para eliminar las versiones problemáticas del repositorio al servicio de soporte de NPM.
No se especifica cuántos usuarios lograron descargar las versiones maliciosas (por ejemplo, la versión maliciosa del paquete eslint-plugin-prettier permaneció en el repositorio durante aproximadamente dos días). La semana pasada, el paquete eslint-config-prettier tuvo 30 millones de descargas y fue utilizado como dependencia por 11,762 paquetes, el paquete eslint-plugin-prettier tuvo 21 millones de descargas (8,468 paquetes dependientes), synckit tuvo 18 millones, @pkgr/core tuvo 16 millones y napi-postinstall tuvo 10 millones.
Fuente: opennet.ru
