PamStealer rend la récupération de sa charge utile macOS dépendante de son serveur de commande
Variante PamStealer macOS via faux wallet Wavel : dropper JXA vers zsh, déchiffrement X25519 via C2 et quadruple persistance décryptés.
Image d’illustration générée par IA
Un faux portefeuille Wavel sert de vecteur à une nouvelle chaîne d’infection
Jamf Threat Labs a identifié une variante de PamStealer qui modifie à la fois son mécanisme de protection de la charge utile et sa stratégie de persistance sur macOS. Au lieu d’intégrer localement tout le nécessaire au déchiffrement du programme malveillant principal, la campagne dépend d’un échange actif avec une infrastructure contrôlée par les attaquants.
L’opération s’appuie sur wavel[.]app, un site frauduleux qui fait la promotion d’un faux portefeuille de cryptomonnaies appelé Wavel. Son bouton « Download for macOS » distribue Wavel.dmg, qui contient un fichier AppleScript compilé.
À l’ouverture du fichier, l’éditeur de script d’Apple se lance et affiche des instructions invitant l’utilisateur à exécuter un dropper en JavaScript for Automation (JXA). Cette étape d’ingénierie sociale repose sur l’exécution de code par la victime, et non sur l’exploitation d’une vulnérabilité macOS connue.
Cette campagne fait suite à des activités de PamStealer observées en juillet et en août 2026. Ces opérations s’appuyaient sur des sites contrefaits usurpant les applications Maccy, Scoppr et Nancy Clipboard. Le leurre Wavel conserve le recours au JXA, mais lui attribue un rôle plus limité dans le processus d’infection.
Selon les informations publiées sur les conclusions de Jamf Threat Labs, le programme malveillant final est désormais écrit en Swift. La version précédente était développée en Rust.
Le JXA transmet l’exécution à un processus zsh en arrière-plan
Les premières variantes de PamStealer utilisaient le JXA pour plusieurs fonctions essentielles. Le script déchiffrait une charge utile intégrée à l’aide de RC4, interagissait avec les frameworks Objective-C par l’intermédiaire du pont JXA vers Foundation et NSData, téléchargeait du contenu supplémentaire et préparait le programme malveillant.
La version Wavel répartit ces responsabilités.
Son AppleScript compilé lance un script JXA contenant une chaîne encodée en Base64. Le JXA décode ces données, puis transmet le script obtenu à :
/bin/zsh -s
Le processus JXA se termine ensuite, tandis que le processus zsh lancé poursuit son exécution en arrière-plan. Le JXA se limite ainsi à servir de vecteur initial ; les opérations réseau, le déchiffrement et la préparation de la charge utile sont ensuite pris en charge par le script shell.
L’étape zsh contacte wavel.apple03cloudstore[.]com et télécharge un utilitaire de déchiffrement appelé pkgunpack. Cet outil effectue un échange de clés X25519 avec le serveur des attaquants avant de déchiffrer et de préparer l’ensemble contenant la charge utile.
Cette architecture complique l’analyse hors ligne du programme malveillant. Disposer de l’image disque, du code JXA, du script shell ou de la charge utile chiffrée ne suffit pas nécessairement à reconstituer l’exécutable final.
Le déchiffrement assisté par serveur empêche une récupération statique simple
Le serveur de commande et de contrôle détient la clé privée nécessaire pour mener à bien l’échange X25519 et dériver la clé de chiffrement des données (Data Encryption Key, ou DEK). Une nouvelle paire de clés éphémères est générée à chaque exécution de la chaîne d’infection.
Par conséquent, une DEK récupérée lors d’une exécution ne peut pas être réutilisée telle quelle lors d’une autre. Pour récupérer la deuxième étape chiffrée, les chercheurs ont besoin d’une session C2 fonctionnelle et de la coopération du serveur tant que celui-ci reste accessible.
Cette conception offre plusieurs avantages défensifs aux opérateurs. Ils peuvent restreindre la distribution en fonction de critères définis côté serveur, empêcher la récupération de la charge utile en mettant l’infrastructure hors ligne et compliquer les analyses a posteriori une fois qu’un artefact a été collecté sur un terminal.
Elle crée également une dépendance pour les attaquants. Si les défenseurs bloquent wavel.apple03cloudstore[.]com, ou si le serveur devient indisponible avant la fin du déchiffrement, la chaîne d’infection ne peut pas dériver la clé nécessaire selon le processus prévu.
L’analyse disponible ne précise pas les règles de filtrage appliquées côté serveur, si tant est qu’il y en ait. On ignore également si l’infrastructure limite les requêtes en fonction de la localisation, des caractéristiques de l’hôte, du nombre d’exécutions ou d’autres critères.
Quatre mécanismes de persistance se renforcent mutuellement
Une fois installé, PamStealer tente de masquer les notifications du système d’exploitation qui avertiraient normalement l’utilisateur de l’ajout d’un nouvel élément de connexion en arrière-plan. Il met ensuite en place quatre mécanismes de persistance interconnectés.
Le premier est un LaunchAgent chargé de relancer régulièrement le programme malveillant. Les noms exacts des fichiers LaunchAgent et les chemins des listes de propriétés n’ont pas été communiqués.
Le deuxième composant est un script zsh de réparation. Il vérifie la présence de l’ensemble contenant la charge utile et du LaunchAgent, puis les restaure si l’un des deux manque. Supprimer un seul composant visible peut donc laisser le système exposé à une réinfection à partir des artefacts encore présents sur le disque.
PamStealer ajoute également un hook shell à ~/.zshrc. Chaque nouvelle session zsh interactive peut alors lancer le script de réparation, faisant de l’utilisation habituelle du terminal un déclencheur de restauration du programme malveillant.
Le quatrième mécanisme détourne les hooks Git. Le script de réparation est copié dans les emplacements post-checkout et pre-commit sous :
~/Library/Application Support/System/.githooks/
Le programme malveillant modifie ensuite le paramètre global core.hooksPath de Git pour qu’il pointe vers ce répertoire. Dès lors, un checkout ou un commit dans n’importe quel dépôt sur le Mac compromis peut déclencher la logique de réparation.
Cette technique concerne particulièrement les développeurs. Même après la suppression du LaunchAgent ou de l’ensemble contenant la charge utile, une activité Git habituelle ou l’ouverture d’un nouveau shell peut restaurer les composants supprimés.
Le voleur Swift cible les mots de passe, les trousseaux et les données de navigation
La charge utile finale est un voleur d’informations développé en Swift. Il collecte des identifiants, des fichiers locaux et des informations système, ainsi que des données utiles au profilage de l’hôte compromis.
PamStealer affiche une fausse boîte de dialogue signalant un plantage afin d’obtenir le mot de passe système de l’utilisateur. Il vérifie ensuite les identifiants saisis à l’aide de PAM, ce qui lui permet de distinguer un mot de passe correct d’une tentative infructueuse.
Il énumère également les éléments du trousseau macOS et les récupère. Le vol d’identifiants de navigateur vise un large éventail d’applications populaires, axées sur la confidentialité, régionales ou dérivées de Chromium :
- Google Chrome
- Microsoft Edge
- Mozilla Firefox
- Brave
- Vivaldi
- Opera
- Opera GX
- Arc
- Zen
- Waterfox
- LibreWolf
- Yandex Browser
- Cốc Cốc
La prise en charge d’Arc, de Zen et de navigateurs moins répandus élargit le bassin de victimes potentielles au-delà des applications le plus souvent ciblées par les voleurs d’identifiants sur macOS.
Le programme malveillant collecte également des métadonnées système et l’image de profil de l’utilisateur. Il récupère plusieurs fichiers liés au shell et au développement, notamment :
~/.zsh_history
~/.zshrc
~/.bash_history
~/.gitconfig
L’historique des commandes peut révéler des noms d’hôtes internes, des structures de répertoires, des commandes de développement, des jetons saisis directement dans la ligne de commande ou des indices sur les environnements cloud et de gestion du code source. Le voleur d’informations dresse aussi l’inventaire des processus en cours et des applications installées.
Aucune évaluation officielle de la gravité ni aucun score CVSS n’ont été communiqués. Le CVSS est généralement conçu pour évaluer les vulnérabilités logicielles plutôt que les campagnes de logiciels malveillants. Toutefois, la combinaison du vol de mots de passe, de l’accès aux trousseaux, du vol de données de navigation et d’une persistance résiliente représente un risque important pour les utilisateurs infectés.
Points à vérifier sur les systèmes macOS
Au 26 septembre 2026, aucun correctif ni aucune procédure officielle de suppression n’ont été communiqués par un fournisseur. Aucun correctif n’est nécessaire, car la campagne décrite ne repose pas sur une vulnérabilité logicielle identifiée.
Les défenseurs devraient commencer par bloquer les deux domaines connus et rechercher leur présence dans les historiques réseau :
wavel[.]app
wavel.apple03cloudstore[.]com
Il convient également d’examiner les terminaux à la recherche de Wavel.dmg, de l’utilitaire pkgunpack, de LaunchAgents inattendus et d’éléments de connexion en arrière-plan inconnus. Une correspondance ne suffit pas à confirmer l’ensemble de la chaîne d’infection, mais justifie une investigation approfondie.
Les modifications de ~/.zshrc doivent être examinées attentivement, en particulier les ajouts qui lancent des scripts depuis des emplacements inhabituels. Les enquêteurs devraient aussi vérifier la configuration globale des hooks Git à l’aide d’une commande appropriée, par exemple :
git config --global --get core.hooksPath
Une valeur pointant vers le répertoire suivant constitue un indicateur signalé :
~/Library/Application Support/System/.githooks/
Les analystes devraient inspecter cet emplacement à la recherche de hooks post-checkout et pre-commit inattendus. Leur suppression ne suffit pas si le script de réparation, le LaunchAgent ou l’ensemble contenant la charge utile est toujours présent ailleurs.
Comme le déchiffrement nécessite un échange de clés en direct, l’analyse statique peut repérer les scripts initiaux sans révéler la charge utile Swift finale. La télémétrie réseau, les journaux d’exécution du shell, les événements de création de fichiers ainsi que les modifications de persistance et de configuration Git sont donc des éléments importants de l’investigation.
Si une compromission est confirmée, les identifiants saisis dans la fausse boîte de dialogue ou enregistrés dans les navigateurs et trousseaux ciblés doivent être considérés comme exposés. Après avoir isolé le Mac concerné et supprimé l’ensemble des mécanismes de persistance, les mots de passe doivent être changés et les sessions révoquées depuis un appareil dont l’intégrité est connue.
Sources
Cet article est une réécriture originale fondée sur les sources ci-dessous.
