Se ha registrado un segundo ataque a paquetes en el repositorio de NPM, llevado a cabo con una modificación del gusano autorreplicante Shai-Hulud, que inyecta software malicioso en las dependencias. Como resultado del ataque, se han publicado versiones maliciosas de 605 paquetes, que suman más de 100 millones de descargas.
Para llevar a cabo el ataque, los delincuentes interceptaron mediante phishing los parámetros de la cuenta del mantenedor de uno de los paquetes populares, utilizado como dependencia por un gran número de paquetes. Aprovechando la cuenta capturada, los atacantes publicaron una nueva versión del paquete, que incluía código para activar el gusano al instalar el paquete afectado como parte de las dependencias. El gusano lanzado busca credenciales en el entorno actual, cargando y ejecutando la utilidad TruffleHog.
En caso de detectar un token de conexión al directorio de NPM, el gusano publica automáticamente nuevas versiones maliciosas para los paquetes desarrollados en el entorno actual. De esta manera, toda la cadena de dependencias se ve afectada. Además del token de NPM, el gusano guarda claves de acceso a GitHub y servicios en la nube AWS, Azure y GCP (Google Cloud Platform), así como variables de entorno y otros datos sensibles que el escáner TruffleHog puede descubrir.
Los datos sensibles encontrados en el sistema se alojan en GitHub mediante la creación de repositorios con nombres aleatorios (por ejemplo, "qzx15djl71alh6p80h") y la frase "Sha1-Hulud: The Second Coming" en la descripción, y también se codifican y se muestran en los registros de GitHub Actions. En el repositorio creado se coloca un archivo en formato JSON (por ejemplo, jsonactionsSecrets.json o contents.json), que contiene una línea con información sobre el sistema codificada en base64, variables de entorno y datos capturados. Para transmitir información fuera de los sistemas de integración continua basados en GitHub, el gusano crea un manejador de GitHub Actions llamado ".github/workflows/formatter_123456789.yml" y configura un runner llamado SHA1HULUD.
Las diferencias con respecto al ataque similar de septiembre radican en un método distinto de inyección de código malicioso en el paquete. En las versiones maliciosas generadas por el gusano se afirma la implementación del soporte para la plataforma de JavaScript Bun. En el archivo package.json, en la sección "preinstall", que define los scripts que se ejecutan antes de la instalación, se añade el comando "node setup_bun.js".

En el archivo «setup_bun.js» se encuentra un código para ejecutar el script ofuscado «bun_environment.js», que contiene el código de un gusano. Para su posterior propagación, el gusano localiza el código de los paquetes, modifica el archivo package.json (aumentando el número de versión e incluyendo la llamada a setup_bun.js), añade los archivos setup_bun.js y bun_environment.js, vuelve a empaquetar el paquete y ejecuta el comando «npm publish» para publicar la nueva versión.
Entre los paquetes populares comprometidos se encuentran: @zapier/zapier-sdk (2.8 millones de descargas a la semana), @posthog/core (2.8 millones), posthog-node (1.5 millones), @asyncapi/specs (1.4 millones), @postman/tunnel-agent (1.2 millones). Se cree que el ataque comenzó con la compromisión del paquete auxiliar @asyncapi/specs.
Fuente: opennet.ru
