Un ataque de 93 minutos que expuso credenciales críticas

El pasado 22 de abril, un paquete malicioso con el nombre oficial @bitwarden/[email protected] apareció en el registro npm. Durante 93 minutos, cualquier desarrollador que ejecutara el comando npm install @bitwarden/cli recibió una versión alterada del CLI legítimo de Bitwarden, diseñada para infiltrarse en sistemas y robar credenciales sensibles.

Bitwarden detectó el compromiso, retiró el paquete de inmediato y emitió un comunicado asegurando que no hubo evidencia de acceso a los datos de los usuarios ni a sus sistemas de producción. Sin embargo, la firma de seguridad JFrog analizó el malware y descubrió que su objetivo no era el gestor de contraseñas de Bitwarden, sino tokens de GitHub, claves SSH, credenciales de AWS, GCP y Azure, así como archivos de configuración de herramientas de IA.

¿Qué credenciales fueron expuestas y por qué son críticas?

El malware se centró en credenciales que permiten el acceso a infraestructuras, automatización y entornos de desarrollo. Según el análisis de JFrog, estos son los tipos de datos más buscados por los atacantes:

  • Tokens de GitHub: Permiten acceder a repositorios, abusar de flujos de trabajo y moverse lateralmente en entornos automatizados.
  • Tokens de npm: Pueden usarse para publicar paquetes maliciosos o modificar flujos de liberación de software.
  • Claves SSH: Abren acceso a servidores, repositorios internos y sistemas de infraestructura.
  • Historial de comandos (shell history): Puede revelar secretos pegados, nombres de hosts internos y detalles de flujos de trabajo.
  • Credenciales de AWS, GCP y Azure: Expone cargas de trabajo en la nube, almacenamiento y sistemas de despliegue.
  • Secretos de GitHub Actions: Dan acceso a automatizaciones, salidas de compilación y despliegues.
  • Archivos de configuración de herramientas de IA: Pueden exponer claves API, endpoints internos y configuraciones de modelos.

¿Cómo funcionó el ataque?

El paquete malicioso modificó tanto el hook de instalación (preinstall) como el punto de entrada del binario (bw) para inyectar un cargador que descargaba el runtime Bun y ejecutaba un payload ofuscado. El malware se activaba tanto en el momento de la instalación como durante la ejecución del CLI.

Una organización podría ejecutar el CLI alterado sin tocar sus contraseñas almacenadas, mientras el malware sistemáticamente recopilaba credenciales de pipelines CI, cuentas en la nube y automatizaciones de despliegue.

¿Quién está detrás del ataque?

La firma de seguridad Socket señala que el ataque parece haber explotado una GitHub Action comprometida en el pipeline de CI/CD de Bitwarden. Este patrón coincide con una campaña de cadena de suministro identificada por los investigadores de Checkmarx, que Bitwarden confirmó estar relacionada con el incidente.

El riesgo de la cadena de suministro en el desarrollo de software

Bitwarden, que sirve a más de 50.000 empresas y 10 millones de usuarios, describe su CLI como una herramienta "poderosa y completamente funcional" para gestionar bóvedas de contraseñas, incluso en entornos automatizados que autentican mediante variables de entorno. La documentación oficial recomienda npm como el método más sencillo para instalar el CLI, lo que sitúa a la herramienta en un punto crítico: donde suelen almacenarse credenciales de alto valor.

Este incidente subraya la importancia de verificar la integridad de los paquetes antes de instalarlos, especialmente en entornos de desarrollo y producción. La confianza en los registros públicos como npm conlleva riesgos, y soluciones como la autenticación basada en OIDC para CI/CD pueden reducir la exposición a este tipo de ataques.

«El malware no buscaba acceder a las bóvedas de Bitwarden, sino a las credenciales que permiten controlar la infraestructura de las organizaciones.»