Cybersecurity-onderzoekers hebben een nieuwe versie gemarkeerd Pam Stealer dat zorgt ervoor dat de belangrijkste payload alleen kan worden hersteld met behulp van een decoderingsketen aan de serverzijde.
De nieuwste artefacten blijven, volgens Jamf Threat Labs, vertrouwen op hetzelfde JavaScript for Automation (JXA) dropper-mechanisme, maar wijzigen de aantrekkingskracht en de leveringsmethode.
“Waar eerdere varianten hun payload-sleutelmateriaal rechtstreeks in de JXA-bron inbedden, haalt het nu een speciaal gebouwd decoderingshulpprogramma op en voltooit het een sleuteluitwisseling met de server voordat de payload kan worden uitgepakt”, zei beveiligingsonderzoeker Thijs Xhaflaire in een analyse. “Zonder de medewerking van de server kan de payload niet statisch worden hersteld.”
Een tweede grote verandering is de keuze van de aanvalsman zelf. Terwijl eerdere versies die in juli en augustus 2026 werden waargenomen, werden waargenomen met behulp van nepwebsites die zich voordeden als Maccy, Scoppr en Nancy Clipboard, worden slachtoffers nu gelokt via een nepwebsite (“wavel(.)app”) die reclame maakt voor een niet-bestaande cryptocurrency-portemonneeservice genaamd Wavel.
Als u op de knop “Download voor macOS” op de nepsite klikt, wordt een schijfkopiebestand (“Wavel.dmg”) opgehaald dat een gecompileerd AppleScript-bestand bevat. Als u het bestand opent, wordt de ingebouwde Script Editor van Apple gestart met instructies om de uitvoering van een JXA-dropper te activeren.
“In Maccy, Scoppr en Nancy voerde de JXA-bron RC4-decodering uit van een ingebedde payload, voerde Objective-C-framework-oproepen uit via JXA’s bridge naar Foundation en NSData, en beheerde het volledige download- en stagingproces”, legt Xhaflaire uit.
“In Wavel bevat de JXA-bron niets van dat alles. De hele JXA-laag is nu een drager. Wanneer Script Editor het bestand uitvoert, decodeert het de base64-string en pijpt het resultaat naar /bin/zsh -s, waar zsh de gedecodeerde bytes uit de standaardinvoer leest en uitvoert. Het JXA-proces wordt onmiddellijk afgesloten; de zsh-dropper gaat door op de achtergrond.”
Het gedecodeerde zsh-script helpt de infectie vooruit door de volgende acties uit te voeren:
- Het decoderingshulpprogramma “pkgunpack” downloaden en oproepen van “wavel.apple03cloudstore(.)com”
- Het uitvoeren van de X25519-sleuteluitwisseling
- De payloadbundel ontsleutelen en klaarzetten
- Het onderdrukken van macOS-meldingen die gebruikers waarschuwen wanneer een nieuw inlogitem op de achtergrond wordt toegevoegd
- Het installeren van vier redundante persistentiemethoden via LaunchAgent, een reparatie-zsh-script dat zowel de payloadbundel als de LaunchAgent herstelt als deze niet aanwezig is, en een shell-hook toegevoegd aan ~/.zshrc die de uitvoering van het reparatiescript activeert bij elke nieuwe interactieve zsh-sessie
- Pollen voor en uploaden van de staging-directory in de vorm van een ZIP-archief
Omdat de server de privésleutel bevat die het sleuteluitwisselingsproces voltooit, kan de Data Encryption Key (DEK) zonder deze sleutel niet worden hersteld, waardoor wordt voorkomen dat de payload wordt gedecodeerd. Omdat er tijdens elke uitvoering een nieuw kortstondig sleutelpaar wordt gegenereerd, kan een vastgelegde DEK-waarde bovendien niet opnieuw worden afgespeeld om de inhoud van de payload te extraheren.
Dit maakt de gecodeerde payload op zijn beurt feitelijk onbruikbaar voor statische analyse zonder toegang tot een live command-and-control (C2)-sessie.
Bovendien wordt het reparatiescript gekopieerd naar de mappen “post-checkout” en “pre-commit” binnen “~/Library/Application Support/System/.githooks/”, waarbij de Git-configuratieoptie “git config –global core.hooksPath” is ingesteld op de directory. Als resultaat hiervan zal elke git checkout of git commit actie in een repository op het gecompromitteerde systeem stilletjes het reparatiescript activeren.
De laatste fase is de stealer-component geschreven in Swift, waarmee wordt afgeweken van de voorganger, die in Rust was geïmplementeerd. Ondanks de verandering in de gebruikte programmeertaal is het einddoel hetzelfde:
- Leg het systeemwachtwoord vast door een nep-crashdialoog weer te geven en controleer de ingevoerde informatie met behulp van een op PAM gebaseerde validatieaanpak
- Opsommen en ophalen van sleutelhangeritems
- Steel inloggegevens van Chromium- en Firefox-gebaseerde browsers, waaronder Google Chrome, Microsoft Edge, Mozilla Firefox, Brave, Vivaldi, Opera, Opera GX, Arc, Zen, Waterfox, LibreWolf, Yandex Browser en Cốc Cốc
- Maak een vingerafdruk van het systeem en verzamel uitgebreide metadata en de profielfoto van de gebruiker
- Verzamel op de gebruiker gerichte bestanden zoals .zsh_history, .zshrc, .bash_history en .gitconfig
- Maak een lijst van actieve processen en geïnstalleerde applicaties
“De opname van Arc, Zen en de minder gebruikelijke regionale en op privacy gerichte browsers breidt de doellijst merkbaar verder uit dan wat typisch is voor gewone macOS-stelers”, aldus Xhaflaire.
“Deze variant van PamStealer weerspiegelt een bewuste investering in de leveringsinfrastructuur. Het pkgunpack-hulpprogramma introduceert een live sleuteluitwisseling die de decryptie van de payload koppelt aan de beschikbaarheid van de server: zonder C2-samenwerking kan de tweede fase niet worden gedecodeerd. Dat ontwerp maakt statisch herstel van de payload aanzienlijk moeilijker en verschuift een deel van de operationele controle naar de serveroperator.”