El operador de GhostAction ha ampliado su campaña de compromiso de repositorios con un kit de phishing y un robador de credenciales persistente disfrazado de fuente web, según el relato de The Hacker News sobre los hallazgos de OpenSourceMalware.
Los investigadores identificaron el componente de segunda fase en 94 repositorios pertenecientes a 66 propietarios. Estas cifras describen repositorios y propietarios, no víctimas confirmadas ni credenciales robadas. De los 94 repositorios, 15 habían sido eliminados, renombrados o convertidos en privados, por lo que, al contarlos, quedaban 79 accesibles.
El nuevo enfoque sigue al uso previo de GhostAction de flujos de trabajo maliciosos de GitHub Actions para buscar secretos en los proyectos. OpenSourceMalware informó de que GitHub comenzó a impedir la ejecución de ese flujo de trabajo el 9 de octubre de 2026. Los investigadores no afirmaron que el bloqueo hubiera causado el cambio posterior, pero valoraron que el operador trasladó la ejecución a ámbitos situados fuera de esos controles del flujo de trabajo.
El phishing captura credenciales y autoriza un flujo de dispositivo OAuth
La infraestructura de phishing gira en torno a my-github[.]com, registrado el 9 de octubre de 2026 y que resuelve a 193.32.204[.]199. Según se informa, la misma dirección IP se utilizó como punto de exfiltración del flujo de trabajo de primera fase de GhostAction.
El 9 de octubre, un correo electrónico enviado desde noreply@my-github[.]com llegó a un mantenedor de software de código abierto. Se hacía pasar por un aviso de seguridad de GitHub, afirmaba que alguien había iniciado sesión desde Moscú (Rusia) y dirigía al destinatario a un enlace presentado como una forma de proteger la cuenta.
OpenSourceMalware describió el kit de phishing como un proxy inverso capaz de interceptar tanto la contraseña de la cuenta como el código de autenticación de dos factores de la víctima. Además, inyecta JavaScript en la sesión intermediada para autorizar un flujo de dispositivo OAuth de GitHub con tres permisos (scopes):
repo, que da acceso a los repositorios;workflow, que permite modificar los archivos de flujo de trabajo de GitHub Actions;read:org, que expone información sobre la pertenencia a organizaciones.
El kit automatiza la introducción y la autorización del código de dispositivo, en lugar de pedir a la víctima que escriba el código o que apruebe conscientemente la aplicación. El token de acceso resultante se envía a my-github[.]com por el puerto TCP 8443.
Un token de este tipo proporciona al operador una credencial de API reutilizable, con permisos acordes con el comportamiento observado de GhostAction: enumerar repositorios y colocar archivos maliciosos en .github/workflows/.
Un dominio relacionado, my-gitlab[.]com, se registró 17 días antes que my-github[.]com. El investigador Paul McCarty afirmó que no existía ningún vínculo directo de infraestructura que lo relacionara con GhostAction. Los dominios diferían en sus registradores, registros de dominio, pares de servidores de nombres de Cloudflare, direcciones IP, sistemas autónomos y configuración DNS, y no se recuperó ningún certificado ni artefacto de cuenta compartido.
La segunda fase se ejecuta cuando los desarrolladores abren un repositorio
Seis días después del bloqueo informado del flujo de trabajo, los investigadores observaron una segunda fase que añade tres componentes a los repositorios comprometidos.
El primero es un archivo de Visual Studio Code tasks.json configurado con runOn: folderOpen. Esto hace que la carga útil se ejecute automáticamente cuando el proyecto se abre en Visual Studio Code.
El segundo es public/fonts/fa-solid-400.woff2. A pesar de la extensión .woff2 y de la ruta con aspecto de fuente, OpenSourceMalware lo identificó como un robador de credenciales que tiene como objetivo:
- claves de AWS;
- tokens de PyPI y npm;
- credenciales de Git;
- credenciales de clústeres de Kubernetes;
- claves privadas SSH;
- credenciales de Anthropic Claude y Google Gemini.
Tras recopilar los datos, la carga útil instala una tarea cron que ejecuta código proporcionado por el atacante cada cinco minutos. El material robado se transmite al mismo servidor mediante HTTP sin cifrar por el puerto 8080.
El nombre del archivo de fuente también apareció en la campaña PolinRider en enero de 2026. Esa coincidencia no demuestra por sí sola que GhostAction esté operado por el mismo actor ni por Corea del Norte.
El tercer componente es otro flujo de trabajo de GitHub Actions, pensado como ruta de ejecución alternativa si el robador local no se ejecuta. Conserva la lógica central del flujo de trabajo original, añade más formatos de credenciales y, si falla su envío HTTP POST, puede colocar los hallazgos en un gist secreto de GitHub.
Entre los nombres de archivo de flujo de trabajo observados se incluyen:
lint.ymlci-check.ymlbuild-check.ymlrepo-health.ymlaudit.ymlcode-review.ymltest-suite.ymlcache-cleanup.yml
OpenSourceMalware también registró oleadas de flujos de trabajo de primera fase los días 10 y 12 de octubre de 2026, pero informó de que ninguna de esas oleadas extrajo secretos.
Muchos repositorios expuestos estaban inactivos
Entre los 79 repositorios que seguían accesibles, 65 no habían recibido ningún commit en más de un año. Uno llevaba más de nueve años sin cambios.
La inactividad no neutraliza los archivos maliciosos. Los desarrolladores o los usuarios posteriores que clonen un proyecto afectado y lo abran en Visual Studio Code podrían seguir activando la tarea folderOpen. El recuento de repositorios disponibles tampoco indica cuántas personas abrieron los proyectos ni cuántas credenciales se recopilaron con éxito.
Jenn Gile, cofundadora de OpenSourceMalware, afirmó que el operador sigue sin identificarse y valoró que la implementación «sugiere poca experiencia». Citó un filtro de variables de entorno que no captura la mayoría de las claves de API, una búsqueda en el directorio personal que puede agotar el tiempo de espera y descartar sus resultados, y el uso de una sola dirección IP para phishing, exfiltración y escaneo de internet.
Medidas de respuesta para mantenedores y usuarios de repositorios
OpenSourceMalware recomienda a los mantenedores afectados revocar el acceso y los tokens de GitHub desde un dispositivo limpio, cambiar las contraseñas e inspeccionar sus repositorios en busca de archivos no autorizados y cambios en los flujos de trabajo.
Deben rotarse las credenciales accesibles desde los flujos de trabajo afectados, incluidos los secretos del repositorio y cualquier credencial de nube, de registros de paquetes, SSH, Kubernetes o de proveedores de IA expuesta al entorno del proyecto. Los mantenedores también deberían avisar a las personas que clonaron los repositorios afectados para que revisen sus sistemas y roten las credenciales si es necesario.
Las revisiones de repositorios deben incluir .github/workflows/, la configuración de tareas de Visual Studio Code, la ruta public/fonts/fa-solid-400.woff2 y los nombres de archivo de flujo de trabajo observados. Dado que el robador establece una tarea cron, eliminar solo los archivos maliciosos del repositorio puede no bastar para eliminar la persistencia en un sistema donde la carga útil ya se ha ejecutado.




