Ataque a la cadena de suministro de Ethersphere roba claves de cartera de Swarm mediante compromiso de CI
Los atacantes utilizaron credenciales de CI robadas para publicar versiones maliciosas de bee-js y Swarm Desktop, instalando puertas traseras y robando claves de carteras de nodos.
Traducido automáticamente del original en inglés.
El 9 de noviembre de 2026, los atacantes comprometieron la automatización de lanzamientos del proyecto Ethersphere para distribuir malware a través de dos de sus herramientas principales. El incidente tuvo como objetivo la red de almacenamiento descentralizado Swarm al inyectar código malicioso en bee-js versión 13.3.0 y Swarm Desktop versión 0.56.2. Estas versiones comprometidas fueron diseñadas para robar claves privadas de carteras e instalar puertas traseras persistentes en sistemas Windows, macOS y Linux antes de ser retiradas horas después.
Qué ocurrió
El ataque aprovechó la propia infraestructura de integración continua (CI) del proyecto, específicamente una cuenta llamada bee-worker utilizada para lanzamientos automatizados. Los atacantes publicaron un release de GitHub para bee-js 13.3.0, lo que activó el flujo de trabajo de publicación en npm del proyecto sin requerir aprobación manual. Este proceso generó registros de procedencia válidos, haciendo que el paquete pareciera legítimo a pesar de contener código malicioso. El paquete permaneció disponible en npm durante aproximadamente 75 minutos, desde las 00:09 hasta las 01:25 UTC, tiempo durante el cual fue descargado unas 10 veces, principalmente por escáneres de seguridad y espejos.
Simultáneamente, los atacantes iniciaron manualmente un flujo de trabajo de compilación para Swarm Desktop 0.56.2 que tenía acceso a certificados de firma de Apple y Windows. Esto les permitió producir una aplicación macOS notarizada y un instalador firmado para Windows que evitaba las advertencias de seguridad estándar. La aplicación de escritorio maliciosa se distribuyó a través del actualizador integrado a usuarios de Windows x64 y Mac con Apple Silicon dentro de los diez minutos posteriores a su publicación. A las 08:27 UTC, la versión comprometida había sido descargada 65 veces. Los mantenedores retiraron el lanzamiento después de unas 8,5 horas y emitieron una versión limpia, 0.56.3, que es idéntica a la anterior versión segura 0.56.1 pero firmada con un nuevo certificado.
Cómo funciona
Ambas versiones maliciosas contenían un cargador ligero que descargaba y ejecutaba cargas adicionales desde un servidor remoto en api.frameworkmetrics[.]xyz. En bee-js, este cargador se ejecutaba como un script postinstall, funcionando automáticamente durante la instalación incluso si el usuario no importaba la biblioteca. En Swarm Desktop, el cargador se ejecutaba cada vez que se iniciaba la aplicación. El código descargado buscaba archivos específicos en el directorio de datos de Swarm Desktop: config.yaml y data-dir/keys/swarm.key. Si bien el archivo de clave es un keystore de Ethereum cifrado, la aplicación almacenaba la contraseña de descifrado en texto plano dentro de config.yaml, permitiendo a los atacantes acceder completamente a la cartera del nodo.
Además de robar credenciales, la carga instaló puertas traseras persistentes adaptadas a cada sistema operativo. En Linux y macOS, desplegaba un shell remoto basado en Go llamado evjawbreaker, oculto en una carpeta ~/.solidity y configurado para ejecutarse como servicio en segundo plano o LaunchAgent. En Windows, instalaba un cliente legítimo de acceso remoto ScreenConnect, utilizando una técnica conocida de bypass de Control de cuentas de usuario (UAC) para obtener privilegios de administrador si era posible. Los atacantes controlaban estas puertas traseras mediante direcciones almacenadas en un contrato inteligente de Ethereum, lo que les permitía actualizar dinámicamente los servidores de comando y control.
Detalles clave
- Versiones comprometidas: bee-js 13.3.0 y Swarm Desktop 0.56.2 fueron las únicas versiones afectadas.
- Vector de ataque: Las credenciales de CI robadas para la cuenta bee-worker permitieron publicaciones y firmas no autorizadas.
- Robo de datos: El malware robó swarm.key y la contraseña en texto plano de config.yaml, exponiendo los fondos del nodo.
- Persistencia de puerta trasera: El malware instaló servicios como solidity-langsupport-runner.service en Linux y ScreenConnect en Windows.
- Estado de remediación: La versión 0.56.3 reemplaza la aplicación de escritorio maliciosa, pero los usuarios de Linux deben reemplazar los paquetes manualmente.
- Suposición de compromiso: Cualquier máquina que haya ejecutado bee-js 13.3.0 o Swarm Desktop 0.56.2 se considera totalmente comprometida.
Por qué importa
Este incidente destaca el riesgo crítico que representan las tuberías de CI/CD comprometidas en proyectos de código abierto. Dado que los atacantes utilizaron las propias herramientas de automatización del proyecto, los paquetes resultantes llevaban procedencia válida y firmas digitales, evitando efectivamente los mecanismos de confianza en los que confían los desarrolladores. Esto demuestra que la seguridad de la cadena de suministro no se trata solo de verificar la integridad del código, sino también de asegurar la infraestructura que construye y publica ese código. Para los equipos que utilizan flujos de trabajo automatizados, la ausencia de pasos de aprobación humana obligatoria para la publicación puede convertir una filtración de credenciales en un ataque completo a la cadena de suministro.
Para los desarrolladores que trabajan sobre Swarm o utilizan herramientas similares de almacenamiento descentralizado, el impacto va más allá de simples actualizaciones de software. El robo de claves de nodos y contraseñas significa que los activos financieros almacenados en estas carteras están inmediatamente en riesgo. Además, la instalación de puertas traseras persistentes implica que simplemente actualizar o reinstalar el software no elimina la amenaza. Los ingenieros deben tratar las máquinas afectadas como vulneradas, requiriendo la rotación integral de secretos y posiblemente la reconstrucción de sistemas desde imágenes confiables para garantizar una remediación completa.
Qué puedes hacer
- Revisa tus lockfiles y registros de CI por cualquier referencia a @ethersphere/bee-js@13.3.0 y fija tus dependencias a la versión 13.2.0.
- Inspecciona el archivo bee-desktop.log buscando la línea "Bee Desktop version: 0.56.2 (production)" para determinar si ejecutaste la aplicación maliciosa.
- Si ejecutaste Swarm Desktop 0.56.2, mueve inmediatamente todos los fondos del nodo, saldos de chequebook y stakes a una nueva clave desde un dispositivo limpio.
- Elimina las puertas traseras persistentes borrando la carpeta ~/.solidity en Linux/macOS y el servicio ScreenConnect Client en Windows.
- Rota todas las contraseñas, tokens y claves API que eran accesibles para cualquier usuario o job de CI que instaló el paquete bee-js comprometido.
- Reconstruye cualquier máquina que haya ejecutado el código malicioso desde una imagen base confiable en lugar de intentar limpiarla in situ.



