🔍 Contexte

Publié le 22 septembre 2026 par Jamf Threat Labs, cet article constitue une analyse technique approfondie d’une nouvelle variante du malware macOS PamStealer, baptisée Wavel, faisant suite à une première publication de juillet 2026. Il s’agit de la troisième variante connue de cette famille de stealers ciblant macOS.

🎣 Vecteur d’infection

Les victimes sont attirées via hxxps://wavel[.]app, un site imitant une application de portefeuille crypto multichain. Le bouton de téléchargement délivre un fichier Wavel.dmg depuis hxxps://y32me8[.]com/Wavel.dmg. Le DMG contient un AppleScript compilé (.scpt) qui, masqué par macOS (extension cachée dans Finder), s’ouvre avec Script Editor et exécute du code JXA embarqué.

⚙️ Chaîne d’infection — Stage 1 : dropper zsh et déchiffrement serveur

Le fichier JXA contient une large chaîne base64 décodée et exécutée via /bin/zsh -s. Le script zsh résultant :

  • Télécharge pkgunpack, un utilitaire Mach-O FAT (arm64/x86_64) dédié au déchiffrement ECIES (X25519 + AES-256-GCM)
  • Génère une paire de clés éphémères et effectue un échange de clés live avec le serveur C2
  • Récupère un DEK (Data Encryption Key) chiffré depuis le serveur (format SNWK1)
  • Déchiffre le payload (format SNP1) uniquement avec la coopération du serveur
  • Extrait une archive tar.gz contenant Wavel.app, renommée en Finder.app lors de l’installation
  • Supprime la notification macOS d’ajout d’élément de connexion en arrière-plan (SIGSTOP/SIGKILL sur les processus système)

🔒 Mécanismes de persistance (multi-couches)

  • LaunchAgent com.apple.finder.agent (exécution toutes les 15 secondes)
  • Script de réparation ~/.repair-run avec backup local ~/.sysnotif-backup.tgz
  • Hook shell ajouté à ~/.zshrc
  • Git hooks globaux (post-checkout, pre-commit) via core.hooksPath

🦠 Stage 2 : infostealer Swift (r8afup9un0)

Le second stage, réécrit de Rust vers Swift, est un FAT Mach-O nommé r8afup9un0 (projet interne : MacClient). Il réalise :

  • Capture de mot de passe via une fausse fenêtre d’authentification AppKit (AuthPromptWindow) validée par PAM (libpam.2.dylib, service "login")
  • Fausse fenêtre de crash imitant le dialogue macOS “damaged and can’t be opened”
  • Extraction du trousseau via _SecItemCopyMatching + security unlock-keychain + copie directe de login.keychain-db
  • Vol de bases de données navigateurs (17 cibles) via l’API SQLite backup, après kill forcé des processus helper (Chrome, Brave, Edge, Chromium, Vivaldi, Opera, Firefox)

📋 Type d’article

Analyse technique détaillée publiée par un éditeur de sécurité (Jamf Threat Labs), visant à documenter les TTPs, IOCs et évolutions d’une famille de malwares macOS activement développée.

🧠 TTPs et IOCs détectés

TTP

  • T1566.002 — Phishing: Spearphishing Link (Initial Access)
  • T1204.002 — User Execution: Malicious File (Execution)
  • T1059.002 — Command and Scripting Interpreter: AppleScript (Execution)
  • T1059.004 — Command and Scripting Interpreter: Unix Shell (Execution)
  • T1543.001 — Create or Modify System Process: Launch Agent (Persistence)
  • T1546.004 — Event Triggered Execution: Unix Shell Configuration Modification (Persistence)
  • T1036.005 — Masquerading: Match Legitimate Name or Location (Defense Evasion)
  • T1553.002 — Subvert Trust Controls: Code Signing (Defense Evasion)
  • T1562.001 — Impair Defenses: Disable or Modify Tools (Defense Evasion)
  • T1027 — Obfuscated Files or Information (Defense Evasion)
  • T1573.001 — Encrypted Channel: Symmetric Cryptography (Command and Control)
  • T1041 — Exfiltration Over C2 Channel (Exfiltration)
  • T1555.001 — Credentials from Password Stores: Keychain (Credential Access)
  • T1555.003 — Credentials from Password Stores: Credentials from Web Browsers (Credential Access)
  • T1056.002 — Input Capture: GUI Input Capture (Credential Access)
  • T1564.001 — Hide Artifacts: Hidden Files and Directories (Defense Evasion)

IOC

  • Domaines : wavel.app — VT · URLhaus · ThreatFox
  • Domaines : y32me8.com — VT · URLhaus · ThreatFox
  • URLs : https://wavel.app — URLhaus
  • URLs : https://y32me8.com/Wavel.dmg — URLhaus
  • Fichiers : Wavel.dmg
  • Fichiers : pkgunpack
  • Fichiers : r8afup9un0
  • Fichiers : Wavel.app
  • Fichiers : Finder.app
  • Fichiers : .sysnotif-backup.tgz
  • Fichiers : .repair-run
  • Chemins : ~/Library/Application Support/System/.repair-run
  • Chemins : ~/Library/Application Support/System/.sysnotif-backup.tgz
  • Chemins : ~/Library/Application Support/System/.githooks/post-checkout
  • Chemins : ~/Library/Application Support/System/.githooks/pre-commit
  • Chemins : ~/Library/Keychains/login.keychain-db
  • Chemins : ~/.zshrc

⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 27 septembre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.

Malware / Outils

  • PamStealer (stealer)
  • pkgunpack (tool)

🟢 Indice de vérification factuelle : 82/100 (haute)

  • ✅ jamf.com — source reconnue (liste interne) (20pts)
  • ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 17 IOCs (IPs/domaines/CVEs) (10pts)
  • ✅ 2/4 IOCs confirmés (ThreatFox, URLhaus, VirusTotal) (12pts)
  • ✅ 16 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

IOCs confirmés externellement :

  • wavel.app (domain) → VT (10/91 détections)
  • y32me8.com (domain) → VT (4/91 détections)

🔗 Source originale : https://www.jamf.com/blog/pamstealer-wavel-macos-infostealer/