PamStealer macOS Infostealer Adds Live C2 with X25519 Key Exchange, Four-Method Persistence
PamStealer macOS Infostealer Adds Live C2 with X25519 Key (TL-2026-2674), also tracked as Wavel, is a high-severity malware campaign, first published 2026-09-26. It has no confirmed attribution, affects Apple macOS, maps to 21 MITRE ATT&CK techniques (T1005, T1027, T1056.002), and is covered by 9 detection rules and 28 indicators of compromise.
Key facts for TL-2026-2674
- Threat ID
- TL-2026-2674
- Also known as
- Wavel
- Severity
- HIGH
- Status
- ACTIVE
- Category
- MALWARE
- First published
- 2026-09-26
- Last reviewed
- 2026-09-26
- Attribution confidence
- LOW
- Motivation
- FINANCIAL
- Target sectors
- cryptocurrency, financial-services, technology
- Target regions
- Global
- Detection rules
- 9
- Indicators of compromise
- 28
Malware and tooling in PamStealer macOS Infostealer Adds Live C2 with X25519 Key
Malware and tooling: PamStealer, Wavel, pkgunpack
A new 'Wavel' variant of the PamStealer macOS infostealer, distributed via a fake cryptocurrency wallet site (wavel[.]app), decrypts its Swift-based second-stage payload live via an X25519 key exchange with wavel.apple03cloudstore[.]com, installs four redundant persistence mechanisms, and harvests Keychain data, credentials from 17 browsers, and the macOS login password via a fake crash dialog.
How PamStealer macOS Infostealer Adds Live C2 with X25519 Key works
PamStealer is a macOS credential-theft malware family, first documented publicly on 2026-07-02 by Jamf Threat Labs (researcher Thijs Xhaflaire), distinguished by validating captured system passwords locally through the macOS Pluggable Authentication Modules (PAM) API (pam_start/pam_authenticate/pam_end) before exfiltrating them. That original variant was distributed from a fake distribution domain, maccyapp[.]com, as a compiled AppleScript (Maccy.scpt) impersonating the legitimate Maccy clipboard-manager utility, dropping an arm64-only Rust Mach-O second stage that read browser and Keychain credential stores, captured clipboard contents via repeated pbpaste invocations, and persisted through both a modern SMAppService registration and a legacy fallback (a 34KB helper binary written to /private/tmp/System Settings that calls LSSharedFileListInsertItemURL against kLSSharedFileListSessionLoginItems), both pointed at a Finder.app bundle staged in ~/Library/Application Support/com.apple.finder.core/. It geofenced itself away from former-Soviet-bloc targets via three independent checks -- system timezone (Europe/Moscow, Europe/Minsk, Asia/Almaty), locale country code (RU, BY, KZ, AM, AZ, KG, MD, TJ, UZ, TM, GE), and active keyboard layout -- and additionally required Apple Silicon hardware, failing silently on Intel hosts. It exfiltrated to avenger-sync[.]live/api/sync over Cloudflare-fronted, ChaCha20-Poly1305-encrypted POST requests, alongside references to Ethereum RPC endpoints (eth.drpc.org, ethereum-rpc.publicnode[.]com) consistent with cryptocurrency-wallet targeting.
In September 2026, Jamf Threat Labs documented a substantially rearchitected variant, internally themed 'Wavel', distributed via a fake multichain-wallet website (wavel[.]app) whose 'Download for macOS' button serves Wavel.dmg from y32me8[.]com. The DMG contains an unsigned, extension-hidden compiled AppleScript -- identifiable by its JsOsaDAS1.001.00 compiled-JXA magic-byte header -- that Finder displays as a generic document; opening it in Script Editor triggers a JXA (JavaScript for Automation) layer that decodes a 24,868-character base64 blob and pipes it directly into /bin/zsh -s, detaching execution from Script Editor via a backgrounded daemon_function & ; exit 0.
The zsh dropper downloads a FAT Mach-O utility, pkgunpack (from wavel.apple03cloudstore[.]com/pkgunpack), that performs an X25519 (ECIES) key exchange with the same domain's /v1/loader/dek endpoint: a fresh ephemeral keypair is generated on every execution, the resulting shared secret is hashed with SHA-256 under the domain separator 'sn-dek-wrap-v1' into a key-encryption key, and the server-returned wrapped DEK (magic SNWK1) is unwrapped via AES-256-GCM to decrypt the SNP1-tagged, tar.gz-packaged second-stage payload fetched from a per-victim CoreUpdate.pkg.enc URL. Because decryption requires live cooperation from the C2 server and each session's DEK cannot be replayed, static/offline recovery of the payload is not possible from a captured sample alone; a local .sysnotif-backup.tgz tarball lets the malware re-stage itself without a fresh C2 round-trip if only the installed bundle is removed.
The decrypted second stage is a universal Swift Mach-O binary (internal name r8afup9un0, project name MacClient) installed as ~/Library/Application Support/System/Finder.app (renamed from Wavel.app to masquerade as a system component) and registered via `launchctl bootstrap gui/<UID>` as a LaunchAgent labeled com.apple.finder.agent that re-executes every 15 seconds and restarts on crash. Beyond the LaunchAgent, the malware installs three additional, redundant persistence layers: a .repair-run script (marked # sysnotif-repair) that restores the bundle and LaunchAgent registration if either is removed; a hook appended to ~/.zshrc that silently triggers the repair script on every interactive shell session without needing C2 contact; and global Git hooks (post-checkout, pre-commit) installed under ~/Library/Application Support/System/.githooks/ via git config --global core.hooksPath, which re-trigger persistence on any git checkout or git commit. The malware suppresses macOS's background-item and notification alerting by SIGSTOP-pausing BackgroundTaskManagementAgent, BTMNotificationAgent, and NotificationCenter before it registers itself.
For credential theft, the malware retains the family's namesake PAM-based password validation (_pam_verify_login) behind a two-stage UI lure -- a spoofed 'macOS wants to make changes' authorization prompt followed by a fake 'damaged and can't be opened' crash dialog, with the displayed app name controlled by the SONOMA_DISPLAY_NAME environment variable -- validating the entered password against the local 'login' PAM service before capture. It unlocks and copies the login Keychain (security unlock-keychain, set-generic-partition-list, direct copy of login.keychain-db) and, via 13 per-browser helper apps (Helper_<Browser>Storage.app containing a KcHelper executable, coordinated through KC_PASS/KC_STAGING/KC_SERVICE/KC_ACCOUNT environment variables) after killing browser helper processes, performs read-only SQLite backups (sqlite3_backup_init/step/finish) of credential and cookie databases across 17 browser families including Chrome, Edge, Firefox, Brave, Vivaldi, Opera/Opera GX, Arc, Zen, Waterfox, LibreWolf, Yandex, and Coc Coc. It additionally collects extensive system fingerprinting (hardware UUID/serial, OS version, SIP status, GPU/display data via 21 separate system_profiler invocations), shell/config history (.zsh_history, .bash_history, .zshrc, .gitconfig), running processes and installed applications, and -- unusually for a stealer -- the user's Open Directory profile photo via `dscl . -read /Users/<user> JPEGPhoto`. Collected data is organized into staging subdirectories (Password, Username, Mode, Keychains/, Browsers/, Extensions/, Wallets/, UserFiles/), archived with ditto -c -k --sequesterRsrc (preserving resource forks/xattrs), staged and stability-checked in a temp lock directory, validated with zip -T, and exfiltrated via a single PUT request carrying a stable, build-specific X-Upload-Token header to a per-victim asset URL on the C2 domain.
No CVE applies; this is a social-engineering-delivered malware campaign rather than a software vulnerability. Jamf published its Wavel analysis on 2026-09-22; GBHackers independently corroborated the findings on 2026-09-23; The Hacker News and Mallory.ai brought it to a broader audience on 2026-09-25, at which point the wavel[.]app lure and its infrastructure were reported as still actively live. A related researcher (L0psec) had separately posted overlapping observations on social media earlier in September, indicating the family is under continued active development.
MITRE ATT&CK techniques used in TL-2026-2674
Collection
T1005 Data from Local System; T1560.001 Archive via Utility
Defense Evasion
T1027 Obfuscated Files or Information; T1564.001 Hidden Files and Directories
Credential Access
T1056.002 GUI Input Capture; T1539 Steal Web Session Cookie; T1555.001 Keychain; T1555.003 Credentials from Web Browsers
Execution
T1059.004 Unix Shell; T1059.007 JavaScript; T1204.002 Malicious File
Command and Control
T1071.001 Web Protocols; T1573.002 Asymmetric Cryptography
Discovery
T1082 System Information Discovery; T1614 System Location Discovery
Persistence
T1543.001 Launch Agent; T1546.004 Unix Shell Configuration Modification; T1547.015 Login Items
defense-impairment
T1553.001 Gatekeeper Bypass; T1685 Disable or Modify Tools
Resource Development
Affected products and versions in PamStealer macOS Infostealer Adds Live C2 with X25519 Key
- Apple — macOS
Vulnerable versions: All currently supported macOS versions (infection relies on user execution of a malicious AppleScript, not a software vulnerability)
Remediation for PamStealer macOS Infostealer Adds Live C2 with X25519 Key
Immediate actions
- Block network access to wavel[.]app, y32me8[.]com, wavel.apple03cloudstore[.]com, maccyapp[.]com, and avenger-sync[.]live at DNS/proxy/firewall layers
- Search endpoints for a LaunchAgent labeled com.apple.finder.agent and an app bundle at ~/Library/Application Support/System/Finder.app (or the July variant's ~/Library/Application Support/com.apple.finder.core/Finder.app); treat any 'Finder.app' found outside /System/Library/CoreServices as malicious
- Audit ~/.zshrc for an appended repair-script hook and remove any block referencing '# sysnotif-repair' or ~/Library/Application Support/System/.repair-run
- Check `git config --global --get core.hooksPath` on developer workstations for redirection to ~/Library/Application Support/System/.githooks and reset it to default
- Check for a residual login-item helper at /private/tmp/System Settings and remove any entry from kLSSharedFileListSessionLoginItems pointing at it
- Force-rotate the macOS login/Keychain password and all browser-saved credentials on any host where the fake 'damaged and can't be opened' crash dialog or a 'wants to make changes' authorization prompt was observed
Workarounds
- Set the default handler for .scpt files to a plain-text viewer rather than Script Editor, or disable direct execution of untrusted compiled AppleScripts
- Treat any macOS authorization or crash-style prompt appearing shortly after installing a newly downloaded application as suspicious and decline it
Longer-term hardening
- Deploy an EDR/MDM control that blocks or alerts on execution of unsigned or ad-hoc-signed compiled AppleScript (.scpt) files opened via Script Editor, and consider signature-matching the JsOsaDAS1.001.00 compiled-JXA header on downloaded files
- Monitor for xattr quarantine-attribute removal (xattr -cr) combined with ad-hoc code signing (codesign -fs -) as a high-fidelity Gatekeeper-bypass detection pair
- Monitor LaunchAgent creation/modification under ~/Library/LaunchAgents, `launchctl bootstrap` invocations, SMAppService registrations, and shell rc-file (.zshrc, .bash_profile) modifications as persistence telltales
- Educate users to obtain cryptocurrency wallet software and utilities only from official vendor sites or the App Store, not sponsored search results or social-media-promoted lookalike domains
Timeline of PamStealer macOS Infostealer Adds Live C2 with X25519 Key
- AppleInsider, CyberPress, and AppleWorld Today independently publish technical write-ups the same day, corroborating Jamf's findings on the PAM-based password validation and Rust-payload architecture of the original Maccy-impersonating variant.
- Jamf Threat Labs (researcher Thijs Xhaflaire) publicly discloses the first PamStealer variant: a compiled AppleScript dropper distributed from maccyapp[.]com impersonating the Maccy clipboard-manager app, delivering an arm64-only, geofenced (CIS-region-excluding) Rust Mach-O stealer that locally validates captured macOS passwords via PAM before exfiltrating to avenger-sync[.]live over ChaCha20-Poly1305-encrypted traffic, persisting via SMAppService and a legacy login-item helper.
- The same Jamf report details four redundant persistence mechanisms installed by the Wavel variant: a masquerading LaunchAgent (com.apple.finder.agent), a local repair script, a ~/.zshrc shell hook, and global Git hooks set via core.hooksPath.
- Jamf Threat Labs publishes technical analysis of the rearchitected 'Wavel' PamStealer variant, distributed via the fake crypto-wallet site wavel[.]app, whose Swift-based second stage is decrypted live via X25519 key exchange with wavel.apple03cloudstore[.]com.
- GBHackers independently publishes its own coverage of the Wavel variant one day after Jamf's report, corroborating the wavel[.]app / y32me8[.]com / wavel.apple03cloudstore[.]com infrastructure chain and flagging the stable X-Upload-Token exfiltration header as a detection artifact.
- Mallory.ai publishes an independent research note on the Wavel campaign, confirming the wavel[.]app lure and its supporting infrastructure remained live and under active analysis as of publication.
- The Hacker News publishes coverage summarizing Jamf's findings, bringing the Wavel/PamStealer campaign's live C2 payload decryption and multi-layer persistence to a broader security audience.
Sources cited for PamStealer macOS Infostealer Adds Live C2 with X25519 Key
- PamStealer macOS Malware Adds Live C2 Payload Decryption and New Persistence Tricks
- New PamStealer variant targets macOS via fake crypto wallet
- PamStealer: macOS Malware Posing as Clipboard Manager App
- Fake Crypto Wallet App Delivers PamStealer Malware That Hijacks Mac Credentials
- New Mac infostealer confirms stolen passwords before stealing data
- PamStealer is a Rust-based macOS infostealer that validates credentials through PAM
- PamStealer macOS Infostealer Uses Rust Payload to Validate and Steal Passwords
- Fake Crypto Wallet Site Delivers PamStealer to Steal macOS Credentials
More in malware
- ClickFix Campaign Abuses Compromised Ukrainian Websites to Deploy Psychedelic Stealer
- CARBONATO Botnet Exploits Exposed Docker Daemons to Deploy AI Agent Framework, Prioritizes AI API Key Theft
- The Infostealer Incursion: Stolen Credentials Breach Cloud, Code, and AI Environments
- x47.c Windows Botnet-as-a-Service Weaponizes xAI Grok for AI-Assisted Persistence and AI API Credit Draining
- Sauron Loader: New DLL Side-Loading Malware-as-a-Service Deployed Against German Organizations via ClickFix, Email Bombing, and Remote-Access-Tool Vishing
Detection coverage for TL-2026-2674
As of 2026-09-26, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-2674 across Splunk SPL, Microsoft KQL and Sigma, covering 28 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.
Community OSINT corroboration for TL-2026-2674
4 of this threat's indicators have also been reported by the open-source security community, which observed at least one of them before this report was published. Community sightings are unverified and are kept separate from Threadlinqs' curated indicators. Indicator values, reporters and campaign linkage are available to authenticated Red-tier users.