Una nuova variante di PamStealer sta prendendo di mira macOS con tecniche più avanzate che rendono difficile analizzare il malware in modo statico. Il punto chiave è che il payload principale non è più recuperabile semplicemente estraendo e decifrando dati inclusi nello script iniziale.
In passato il dropper basato su JavaScript for Automation conteneva direttamente il materiale crittografico necessario e svolgeva la decifratura localmente. Ora invece la catena di infezione si appoggia a una decifratura dipendente dal server, obbligando la vittima a completare uno scambio di chiavi con il comando e controllo prima che il payload possa essere sbloccato.
La distribuzione avviene tramite social engineering e siti falsi. In questa campagna gli attaccanti usano un portale truffa che pubblicizza un presunto wallet di criptovalute chiamato Wavel. Il pulsante di download per macOS porta a un file DMG che include uno script AppleScript compilato. Aprendolo, viene avviato Script Editor con istruzioni che spingono l’utente a eseguire il dropper. A differenza di scenari precedenti, lo strato JXA diventa quasi solo un vettore di trasporto. Lo script decodifica una stringa base64 e la passa a /bin/zsh, che continua l’esecuzione in background mentre il processo iniziale termina.
Lo script zsh prosegue scaricando un tool di decifratura dedicato e avviando uno scambio di chiavi X25519. In questo modo la chiave di decifratura dei dati non è ottenibile senza la cooperazione del server, e ogni esecuzione genera chiavi effimere, impedendo il riutilizzo di valori catturati. Il malware implementa anche misure per ridurre la visibilità, come la soppressione delle notifiche di macOS legate agli elementi di login in background.
Per la persistenza vengono usati più livelli ridondanti, tra cui LaunchAgent, uno script di riparazione che ripristina componenti mancanti e un hook in .zshrc che rilancia la riparazione a ogni sessione interattiva. Inoltre lo script viene inserito in cartelle di githooks e viene impostato core.hooksPath a livello globale, così operazioni come git checkout o git commit possono attivare silenziosamente la catena.
Lo stadio finale è un infostealer scritto in Swift che mira a password di sistema con una finta finestra di crash e verifica tramite PAM, elementi del portachiavi, credenziali dei browser Chromium e Firefox e file sensibili come .zsh_history e .gitconfig, oltre a inventario di processi e applicazioni.