Newly discovered PamStealer isn't your typical macOS malware 14%

By Dan Goodin18%

7/2/2026, 12:38:57 PM

BS Summary: This article contains 22 faulty reasoning types, including Ambiguity (Equivocation), Hasty Generalization, and Unattributed Quote, with Biased Writer Voice as the most egregious example at 34.3% saturation with 267 hits. Analysis detected 1,481 faulty-reasoning hits from 778 analyzed words, generating a BS Score of 30.3% and a BS Rank of 14% (18,939 of 21,887 articles). This article is better (less manipulative) than 86.50% of the article peer group.

Researchers have found a never-before-seen piece of macOS malware that combines a series of clever tradecraft to infect Macs with stealthy, custom-developed credential-stealing code. 
The malware is delivered in two stages. 
The first is distributed in a disk image that masquerades as Maccy, a clipboard manager for Macs. 
It’s compiled as AppleScript that is notable for the way it delivers the second stage. 
The malware is named PamStealer because the Rust-written infostealer uses the Pluggable Authentication Modules interface built into macOS to validate the target’s login password before sending it to an attacker-controlled server. 
A quieter execution chain 
The use of both disk image and AppleScript is common in malware for Macs. 
More unusual is the way PamStealer combines them to gain stealth. 
When the AppleScript is double-clicked, it’s opened in the macOS Script Editor, where the malicious functionality is buried deep within the file. 
“Rather than relying on shell commands such as curl or zsh, the AppleScript executes a self-contained JavaScript for Automation (JXA) downloader that retrieves and stages the payload using native Objective-C APIs,” researchers from Jamf, a security firm for macOS users, wrote. 
“Combined with a Rust-based second stage and a password capture workflow that validates credentials locally through PAM, the result is a quieter execution chain than we typically observe in commodity macOS stealers.” 
When a user, expecting to install a trustworthy clipboard manager, encounters the disk image, they’re prompted to press Command-R immediately after double-clicking it. 
This command executes malicious code inside the AppleScript directly. 
It also allows the execution to bypass com.apple.quarantine, a macOS attribute that provides warnings and restrictions when executable files have been downloaded from the Internet. 
As Jamf explained: 
PamStealer combines a recently emerging delivery surface with a less familiar payload. 
While the clickable .scpt and Script Editor lure build on tradecraft that is already gaining adoption across the macOS threat landscape, the malware distinguishes itself through a self-contained JXA dropper, a Rust-based second stage, and a password capture workflow that validates credentials locally through PAM before harvesting them. 
That second stage puts considerable effort into staying hidden, masquerading as Finder, encrypting its command-and-control traffic, and holding back prompts like the Full Disk Access request for as long as forty minutes so its activity does not line up with launch. 
Together, these behaviors illustrate how commodity macOS stealers continue to evolve, adopting quieter execution chains and native implementations that reduce traditional detection opportunities while remaining compatible with standard macOS features. 
The first stage puts its payload inside an app bundle that impersonates real components built into macOS. 
The component changes from sample to sample of the malware. 
Finder.app under com.apple.finder.core or com.apple.finder.monitor, and a Software Update.app under com.apple.security.daemon, are two examples. 
In either case, they run hidden. 
They also display macOS’s genuine Finder.icns as its icon. 
The second stage is a lean Mach-O file written for Macs running on Apple CPUs. 
The attacker’s choice to write it in Rust is relatively uncommon for macOS infostealers. 
More common are languages such as Swift, Go, and Objective-C. 
This binary calls the read interface of a bundled SQLite app. 
This allows the infostealer to read database files directly. 
PamStealer shows a native password prompt designed to resemble a system authorization request. 
Text that appears with the prompt says: “Maccy wants to make changes. 
Enter your password to allow this.” 
As noted earlier, once a target complies, the malware validates it locally through the PAM API. 
“This check is done entirely through PAM: there is no call out to dscl, security, osascript or any spawned process to verify the password, as many commodity macOS stealers do,” Jamf said. 
“The result is a quieter routine that keeps only a verified password, and one fewer process chain for defenders to detect on.” 
If the validation fails, PamStealer displays the prompts again until it receives the correct one. 
Once the target enters the correct password, PamStealer displays a message stating that the file is damaged and can’t be installed. 
This is designed to be a decoy to prevent the target from suspecting anything is amiss. 
The malware uses tactics to maximize the information it can steal. 
One tactic is to request the target grant full disk access to the fake Maccy app. 
It also contains code designed to access ethereum accounts. 
The various techniques—particularly the Script Editor lure, a self-contained JXA dropper, a Rust-based second stage, and local validation of credentials through PAM are all noteworthy. 
“Together, these behaviors illustrate how commodity macOS stealers continue to evolve, adopting quieter execution chains and native implementations that reduce traditional detection opportunities while remaining compatible with standard macOS features,” Jamf said. 
Article reasoning-pattern comparisonThis article: 0.0%Dan Goodin: 0.8%Ars Technica: 2.8%Confirmation Bias0.0%This article: 0.0%Dan Goodin: 0.9%Ars Technica: 1.2%Anchoring Bias0.0%This article: 7.2%Dan Goodin: 3.2%Ars Technica: 2.4%Availability Heuristic7.2%This article: 5.8%Dan Goodin: 1.2%Ars Technica: 1.0%Representativeness Heuristic5.8%This article: 8.0%Dan Goodin: 0.8%Ars Technica: 0.6%Hindsight Bias8.0%This article: 0.0%Dan Goodin: 3.0%Ars Technica: 2.1%Overconfidence Bias0.0%This article: 4.4%Dan Goodin: 2.5%Ars Technica: 3.4%Framing Effect4.4%This article: 0.0%Dan Goodin: 0.3%Ars Technica: 0.5%Loss Aversion0.0%This article: 0.0%Dan Goodin: 0.4%Ars Technica: 0.5%Status Quo Bias0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Sunk Cost Effect0.0%This article: 3.0%Dan Goodin: 1.0%Ars Technica: 4.2%Optimism Bias3.0%This article: 0.0%Dan Goodin: 2.9%Ars Technica: 1.7%Pessimism Bias0.0%This article: 6.7%Dan Goodin: 6.6%Ars Technica: 6.2%Negativity Bias6.7%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 1.2%Self-Serving Bias0.0%This article: 3.5%Dan Goodin: 0.8%Ars Technica: 0.6%Fundamental Attribution Error3.5%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Actor-Observer Bias0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.6%In-Group Bias0.0%This article: 1.8%Dan Goodin: 0.9%Ars Technica: 0.2%Out-Group Homogeneity Bias1.8%This article: 5.1%Dan Goodin: 0.8%Ars Technica: 2.0%Halo Effect5.1%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Horn Effect0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.0%Dunning-Kruger Effect0.0%This article: 5.7%Dan Goodin: 1.0%Ars Technica: 1.0%Recency Bias5.7%This article: 3.1%Dan Goodin: 0.2%Ars Technica: 0.3%Primacy Effect3.1%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Blind-Spot Bias0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.5%Ad Hominem0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.2%Straw Man0.0%This article: 9.8%Dan Goodin: 3.2%Ars Technica: 4.1%Appeal to Authority9.8%This article: 0.0%Dan Goodin: 1.3%Ars Technica: 1.1%False Dilemma0.0%This article: 0.0%Dan Goodin: 0.2%Ars Technica: 0.7%Slippery Slope0.0%This article: 0.0%Dan Goodin: 0.2%Ars Technica: 0.1%Circular Reasoning0.0%This article: 22.4%Dan Goodin: 7.0%Ars Technica: 3.8%Hasty Generalization22.4%This article: 0.0%Dan Goodin: 0.4%Ars Technica: 0.2%Red Herring0.0%This article: 6.2%Dan Goodin: 0.8%Ars Technica: 0.6%Bandwagon6.2%This article: 0.8%Dan Goodin: 1.0%Ars Technica: 2.7%Appeal to Emotion0.8%This article: 0.0%Dan Goodin: 0.1%Ars Technica: 0.6%Begging the Question0.0%This article: 8.5%Dan Goodin: 2.2%Ars Technica: 2.3%Post Hoc (False Cause)8.5%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.2%Tu Quoque0.0%This article: 0.0%Dan Goodin: 0.1%Ars Technica: 0.5%Burden of Proof0.0%This article: 1.9%Dan Goodin: 0.8%Ars Technica: 0.2%Appeal to Nature1.9%This article: 8.0%Dan Goodin: 0.9%Ars Technica: 0.2%Composition/Division8.0%This article: 0.0%Dan Goodin: 0.5%Ars Technica: 1.5%Anecdotal0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%No True Scotsman0.0%This article: 24.9%Dan Goodin: 6.6%Ars Technica: 1.7%Ambiguity (Equivocation)24.9%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.0%Gambler’s Fallacy0.0%This article: 0.0%Dan Goodin: 0.3%Ars Technica: 0.1%Middle Ground0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Personal Incredulity0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Special Pleading0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.1%Genetic Fallacy0.0%This article: 13.5%Dan Goodin: 1.8%Ars Technica: 1.5%Unattributed Quote13.5%This article: 6.0%Dan Goodin: 2.9%Ars Technica: 1.0%Quote-first Misdirection6.0%This article: 34.3%Dan Goodin: 4.0%Ars Technica: 4.5%Biased Writer Voice34.3%This article: 0.0%Dan Goodin: 2.2%Ars Technica: 1.0%Indoctrination0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.7%Politically Left Leaning Bias0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 0.2%Politically Right Leaning Bias0.0%This article: 0.0%Dan Goodin: 0.0%Ars Technica: 1.3%Attempt to Sell a Product or S…0.0%

778 words analyzed.

Speakers

1speaker22%attributed speech607writer words
Voice mapSelect a segment to jump to its words
Writer's voice • 8 words • 0.0% coverageWriter's voice • 24 words • 100.0% coverageWriter's voice • 7 words • 0.0% coverageWriter's voice • 17 words • 0.0% coverageWriter's voice • 15 words • 100.0% coverageWriter's voice • 31 words • 0.0% coverageWriter's voice • 4 words • 0.0% coverageWriter's voice • 14 words • 0.0% coverageWriter's voice • 11 words • 100.0% coverageWriter's voice • 22 words • 100.0% coverageJamf • 41 words • 100.0% coverageJamf • 32 words • 100.0% coverageWriter's voice • 23 words • 0.0% coverageWriter's voice • 9 words • 0.0% coverageWriter's voice • 25 words • 0.0% coverageWriter's voice • 3 words • 0.0% coverageJamf • 12 words • 0.0% coverageWriter's voice • 48 words • 100.0% coverageWriter's voice • 41 words • 100.0% coverageWriter's voice • 30 words • 0.0% coverageWriter's voice • 17 words • 0.0% coverageWriter's voice • 10 words • 0.0% coverageWriter's voice • 14 words • 0.0% coverageWriter's voice • 6 words • 0.0% coverageWriter's voice • 9 words • 0.0% coverageWriter's voice • 15 words • 0.0% coverageWriter's voice • 14 words • 0.0% coverageWriter's voice • 10 words • 0.0% coverageWriter's voice • 11 words • 0.0% coverageWriter's voice • 9 words • 0.0% coverageWriter's voice • 13 words • 0.0% coverageWriter's voice • 12 words • 0.0% coverageWriter's voice • 6 words • 100.0% coverageWriter's voice • 16 words • 0.0% coverageJamf • 32 words • 100.0% coverageJamf • 22 words • 100.0% coverageWriter's voice • 15 words • 0.0% coverageWriter's voice • 21 words • 0.0% coverageWriter's voice • 16 words • 100.0% coverageWriter's voice • 11 words • 100.0% coverageWriter's voice • 16 words • 0.0% coverageWriter's voice • 9 words • 0.0% coverageWriter's voice • 25 words • 100.0% coverageJamf • 32 words • 100.0% coverage
Selected voice

Jamf

100%flagged-word coverage
171 attributed words100% of attributed speech61% writer coverage
0%32.5%65.0%Unattributed Quote+61.4 ptsWriter: 0.0%Jamf: 61.4%61.4%Biased Writer Voice-3.5 ptsWriter: 35.1%Jamf: 31.6%31.6%Quote-first Misdirection+23.0 ptsWriter: 1.0%Jamf: 24.0%24.0%

Attribution is sentence-level. Pattern percentages are calculated only from words assigned to that voice.

Loading…
Loading…
Loading…
Loading…

Analysis

Hover over highlighted words in the article to view the associated bias or fallacy analysis.