AmnesiaStealer — macOS ClickFix Infostealer + Live Browser Hijack

Counterfeit GitHub "Download for macOS" page → Base64 Terminal paste → 3-stage Rust dropper → root LaunchDaemon persistence ("Amnesia Panel" C2) → CVE-2020-9771 TCC bypass + Chrome DevTools Protocol live browser takeover
Threat
AmnesiaStealer (macOS)
Severity
NEW / ACTIVE (2026-08-13)
Type
macOS Infostealer + Remote Browser Control
Delivery
ClickFix · counterfeit GitHub page
Attribution
Unattributed — Russian-language C2 backend
Version
v0.1 · 2026-08-16
Author
HuntPack
Confidence
High (vendor primary research + 2-source hash/IOC corroboration)
01

Executive Summary

AmnesiaStealer is a newly discovered, multi-stage Rust-based macOS infostealer first reported by Jamf Threat Labs (researcher Thijs Xhaflaire) on 2026-08-13. It is delivered via a ClickFix-style lure: a counterfeit GitHub "Download for macOS" page — correct dark theme, Octocat logo, a fake "Verified Publisher" badge — presenting a "Terminal installation" box that tricks the victim into pasting and running a Base64-encoded Terminal command. The malware is named after the "Amnesia Panel" backend it reports to, whose failed-login page returns Russian-language error text.

Three-stage chain: Stage 0 is a self-deleting shell dropper that strips the quarantine attribute, ad-hoc code-signs, and launches a password-protected ("dulin") ZIP payload; Stage 1 is the Rust infostealer itself, which stages loot in a directory named with 25 random alphanumeric characters under /tmp (subfolders Browsers/, Passwords/, Wallets/, Notes/, Telegram/, FileGrabber/, plus system_info.json, installed_apps.txt, collection_report.txt, and a cleartext pwd file — the harvested local password is also written to ~/.pwd); Stage 2 is an on-demand stream_module that gives the operator live, hands-on-keyboard control of the victim's browser.

Persistence is a root LaunchDaemon that impersonates Apple's crash-reporting service (com.apple.ReportCrash.agent_<digits>.plist under /Library/LaunchDaemons/). Data theft spans 16 Chromium-family browsers (Chrome, Brave, Arc, Edge, Opera, Vivaldi, Chromium, and others) plus Safari, Apple Notes, Telegram, and iCloud/local Keychain. For Safari cookie theft the malware reuses CVE-2020-9771 — a macOS Time Machine / mount_apfs local-snapshot TCC bypass Apple patched in Catalina 10.15.4/10.15.5. A host where this bypass actually succeeds is either running an unpatched or downgraded macOS, or is exposed to a regressed/variant bypass — treat a successful mount_apfs -o nobrowse invocation as a hardening signal in its own right, independent of AmnesiaStealer.

Distinctive capability: the Stage 2 stream_module clones the victim's browser profile, launches it headless, and relays it over the Chrome DevTools Protocol (CDP) — the operator receives a live screencast at ~3fps with full keyboard, mouse, scroll, navigation, and tab-management input, effectively driving the victim's already-authenticated browser session (banking, email, social) without any on-screen change the victim would notice. A clipboard-hijacking module targets nine cryptocurrency address formats (Bitcoin, Bitcoin Cash, Ethereum, TRON, Litecoin, Monero, Solana, Ripple, ATOM/Cosmos) but was observed disabled in the analyzed build — treated below as a dormant capability to watch, not a firing detection.

Defender priority: This pack is built around what makes AmnesiaStealer distinct from other macOS ClickFix stealers already in the HuntPack library (AMOS, MacSync, Phexia) — the 25-char /tmp staging directory with named subfolders (Q3), the root LaunchDaemon masquerading as Apple crash reporting (Q4), the mount_apfs -o nobrowse CVE-2020-9771 signal (Q5), the Amnesia Panel C2 domain family (Q8), and the CDP remote-debugging flags that precede a live browser hijack (Q9). Pair the ClickFix bootstrap hunt (Q1–Q2) with these AmnesiaStealer-specific behaviors rather than relying on generic ClickFix signatures alone.

02

Source Review & Web Hunter Notes

SourceTierKey findingCarry forward
Jamf Threat Labs — original research (Thijs Xhaflaire)Primary ResearchFull 3-stage architecture, XOR config key, staging dir structure, C2 API paths, TCC bypass techniques, Stage 2 CDP relay details, both binary hashesYes
The Hacker News — Ravie LakshmananReportingConfirms attack chain, clipboard-hijack currency list, exfil staging dir pattern, ~/.pwd cleartext storage, Chrome Safe Storage recoveryYes
SecurityWeek — Ionut ArghireReportingCVE-2020-9771 confirmation, Safe Storage key overwrite / macOS 26 credential-destruction behavior, AMOS/MacSync/CrashStealer overlap noteYes
SecurityAffairs — Pierluigi PaganiniReportingLaunchDaemon exact naming pattern (com.apple.ReportCrash.agent), dscl/security unlock-keychain credential flow, CDP Network.getAllCookies detailYes
Infosecurity Magazine — James CokerReportingAudio-mute-during-theft behavior, 7-browser CDP scope confirmationPartial (no new IOCs)
GBHackers — DivyaReportingFull atomic IOC set — domains, IPs, both SHA-256 hashes, archive password, temp-file naming pattern, exact LaunchDaemon pathYes
SC Media — Laura FrenchReportingTargeted file-extension list, CVE-2020-9771 patch-version confirmation, 3fps screencast detailYes
Brinztech — breach alertSecondaryXOR key corroboration, mitigation recommendationsPartial (advisory only)
Cyber Security News — Guru BaranReportingLanding-page domain (github[.]aoitour[.]com), stage-by-stage delivery mechanicsYes
MacTech.com — Dennis SellersSecondaryGeneral campaign summary, Jamf mitigation pointerPartial (context only)

Provenance note: every atomic IOC in §4/§10 (SHA-256 hashes, C2 domains, IPs, file paths, archive password, XOR key) is drawn from the cited reporting above and is present verbatim in the saved source snapshots at AmnesiaStealer-macOS-ClickFix-Hunt-sources/. The two IP addresses (138.124.70.84, 138.124.96.160) and the shlyapadulina[.]space / amz.shlyapadulina[.]space domains are corroborated by only one outlet (GBHackers) — flagged medium confidence below; validate before broad blocking. Both SHA-256 hashes and the primary C2 domain (debug[.]allllowef[.]space) are corroborated across two or more independent sources and carry high confidence. Fetched articles were treated strictly as research data — none contained instructions directed at an AI agent, and none were acted upon as commands.

03

Hunt Brief & Attack Chain

Hunt hypotheses

  • H1: A macOS host runs the ClickFix bootstrap — Terminal/bash decoding and executing a long Base64 blob pasted from a fraudulent web page.
  • H2: A process strips the quarantine attribute, ad-hoc code-signs, and nohup-launches a binary extracted from a password-protected ZIP — the Gatekeeper-bypass handoff between Stage 0 and Stage 1.
  • H3: A staging directory named with 25 random alphanumeric characters appears under /tmp, containing the AmnesiaStealer-specific artifact set (Browsers/, Passwords/, Wallets/, Notes/, Telegram/, FileGrabber/, pwd, etc.).
  • H4: A root LaunchDaemon is installed and loaded that impersonates Apple's crash-reporting service (com.apple.ReportCrash.agent_<digits>.plist).
  • H5: A process invokes mount_apfs -o nobrowse against a local Time Machine snapshot — the CVE-2020-9771 TCC-bypass primitive used for Safari cookie theft.
  • H6: A spoofed "Installer" password prompt is followed by dscl . -authonly validation and/or security unlock-keychain -p — the credential-harvest stage.
  • H7: A non-browser process reads Chromium Cookies/Login Data/Web Data/Local State stores across multiple distinct browser bundles in a short window — mass credential-store collection.
  • H8: Any host resolves or connects to the Amnesia Panel C2 domain family (debug[.]allllowef[.]space, news[.]allllowef[.]space, shlyapadulina[.]space) or its published IPs.
  • H9: A non-browser process spawns a Chromium-family binary with --remote-debugging-port/--headless flags — the Stage 2 stream_module activating live CDP browser control.

Attack chain

#StepObservableATT&CK
1Counterfeit GitHub page (fake Verified Publisher badge) presents a "Terminal installation" box; victim copies and pastes a Base64 commandTerminalbash decoding a long Base64 blobT1204.004 / T1140
2Stage 0 shell script downloads a password-protected ("dulin") ZIP, strips quarantine, ad-hoc codesigns, nohup-launches, clears shell history, self-deletesxattr -d com.apple.quarantine, codesign --sign -, unzip -P, nohupT1553.001 / T1140
3Stage 1 Rust infostealer stages loot under a 25-char random /tmp directory/tmp/<25-char>/Browsers, Passwords, Wallets, Notes, Telegram, FileGrabber, pwdT1560 / T1005
4Root LaunchDaemon persistence impersonating Apple crash reporter/Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist + launchctl bootstrap/loadT1543.004
5Native "Installer" password prompt captured, validated via dscl, stored cleartext at ~/.pwd / staging-dir pwd; used to unlock Keychaindscl . -authonly, security unlock-keychain -p, cleartext .pwd writesT1056.002 / T1552.001 / T1555.001
6CVE-2020-9771 TCC bypass mounts an APFS local snapshot to reach protected Safari cookie datamount_apfs -o nobrowseT1548
716 Chromium-family browsers + Safari + Apple Notes + Telegram + Keychain harvested; Chrome Safe Storage key overwritten (destructive on macOS 26+)Reads of Cookies, Login Data, Web Data, Local State across multiple browser bundlesT1555.003 / T1539 / T1217
8Collected data archived and exfiltrated to Amnesia Panel C2HTTP(S) to debug[.]allllowef[.]space/send/, X-API-Key header, Russian-language panel errorsT1071.001
9On operator command, stream_module clones the browser profile, spawns it headless with CDP flags, relays a live 3fps screencast + full input over a WebSocket relay--remote-debugging-port, --headless, WebSocket relay to C2T1219 / T1113
04

Consolidated IOC Table

Atomic indicators are from the cited reporting (§2/§18). IPs and the shlyapadulina[.]space domain family are single-sourced (GBHackers) — validate before blocking. The clipboard-hijack module is confirmed present but disabled in the analyzed build; it is listed as a behavioral watch item, not an active detection.

TypeValueConfidenceActionContext
Domaindebug.allllowef.spacehighblockAmnesia Panel C2 root + /send/ exfil endpoint (Q8)
Domainnews.allllowef.spacemediumblockRelated C2 infrastructure (Q8)
Domainshlyapadulina.space, amz.shlyapadulina.spacemediumhuntSingle-sourced C2/delivery infra — validate (Q8)
Domaingithub.aoitour.comhighblockCounterfeit GitHub ClickFix landing page
IPv4138.124.70.84mediumhuntSingle-sourced C2 host — validate before block (Q8)
IPv4138.124.96.160mediumhuntSingle-sourced C2 host — validate before block (Q8)
SHA256de5748aac4a4d4cb48cf050652679e6bc49eda33d9ffaa0d280b578122fab55ahighdetectStage 1 Rust infostealer binary (2-source corroborated)
SHA256e853748ca8f9a5a9168263617409a9039ab09f4ffc7d860374c1e3b0b67b31a5highdetectStage 2 stream_module binary (2-source corroborated)
File path (pattern)/tmp/<25-char-random>/{Browsers,Passwords,Wallets,Notes,Telegram,FileGrabber}highdetectStaging directory (Q3)
File path~/.pwd, staging-dir pwdhighdetectCleartext harvested local password (Q6)
File path (pattern)/Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plisthighdetectRoot LaunchDaemon persistence (Q4)
File path/tmp/tempAppleScript.scpt, /tmp/startermediumhuntOsascript fallback / staging artifact
Behaviormount_apfs -o nobrowse (CVE-2020-9771)highdetectTCC bypass for Safari cookie theft (Q5)
BehaviorBase64-decoded Terminal paste from a counterfeit GitHub pagehighdetectClickFix bootstrap (Q1)
BehaviorChrome DevTools Protocol relay: --remote-debugging-port / --headless on a cloned browser profilemediumhuntStage 2 live browser hijack (Q9)
Context (not a block target)XOR key 4mn3s1a_2o26!xK; archive password dulin; Safe Storage overwrite key pqz8N3vKxRmY2aLcQmediumenrichAnalyst identification / malware-config confirmation only
Behavior (dormant)Clipboard hijack targeting BTC, BCH, ETH, TRON, LTC, XMR, SOL, XRP, ATOM addressesmediumenrichPresent in code, disabled in analyzed build — watch, do not alert as active
05

Affected Surface & Telemetry Matrix

Affected: macOS endpoints from Catalina through macOS 26, Intel and Apple Silicon. No vulnerability is exploited for initial access — delivery is 100% social engineering (ClickFix). CVE-2020-9771 is used post-compromise as a TCC bypass; it only succeeds on unpatched/downgraded macOS or via a bypass variant, so a successful hit is itself a patch-hygiene signal.

macOS telemetry model note: Falcon's macOS sensor does not expose Windows-style Registry or Service-Control-Manager telemetry. Persistence here shows up as a LaunchDaemon plist write + launchctl process invocation (the macOS analog to a Windows service install), credential access shows up as process-level dscl/security/mount_apfs invocations plus TCC-protected file opens (there is no SAM/LSASS equivalent), and defense evasion shows up as xattr/codesign Gatekeeper manipulation rather than AMSI/ETW tampering. Every query in §8 is written against this macOS-specific model, not translated from a Windows pack.

SurfaceTelemetryPriorityGap
macOS process treeFalcon ProcessRollup2 / SyntheticProcessRollup2 (event_platform=Mac)CriticalRequires Falcon sensor deployed on Macs
File opens on credential/browser storesFalcon FileOpenInfo (macOS) — TargetFileName, ImageFileNameCriticalConfirm macOS file-open telemetry enabled in policy
LaunchDaemon / LaunchAgent persistenceProcess evidence (launchctl bootstrap/load) + native audit-log sweep (§7)CriticalNo dedicated macOS "service install" Falcon event — rely on the launchctl process + native log
DNS resolutionFalcon DnsRequest (DomainName, Amnesia Panel domain family)CriticalNone — good coverage
Network egressFalcon NetworkConnectIP4 (C2 IPs, CDP WebSocket relay)HighHTTPS/WSS payload opaque; rely on destination + process context
TCC / Keychain / privacy databaseProcess evidence for mount_apfs, tccutil, security invocationsHighTCC.db content itself is not directly queryable via CQL
06

ATT&CK Mapping

TacticTechniqueBehaviorQuery / Control
Initial AccessT1204.004 — User Execution: Malicious Copy & PasteClickFix counterfeit-GitHub Base64 Terminal pasteQ1, §12 awareness
ExecutionT1059.004 — Unix Shellbash decode-and-execute bootstrapQ1
Defense EvasionT1140 — Deobfuscate/Decode Files or InformationBase64-decoded payload commandQ1
Defense EvasionT1553.001 — Subvert Trust Controls: Gatekeeper Bypassxattr -d com.apple.quarantine + ad-hoc codesignQ2
CollectionT1560 — Archive Collected Data25-char /tmp staging directory + named subfoldersQ3
PersistenceT1543.004 — Create or Modify System Process: Launch DaemonRoot LaunchDaemon impersonating Apple crash reporterQ4
Defense EvasionT1548 — Abuse Elevation Control Mechanism (TCC bypass)CVE-2020-9771 mount_apfs -o nobrowseQ5
Credential AccessT1056.002 — GUI Input CaptureSpoofed "Installer" native password promptQ6
Credential AccessT1552.001 — Unsecured Credentials: Credentials In FilesCleartext password at ~/.pwd / staging pwdQ6, §4
Credential AccessT1555.001 — Credentials from Password Stores: Keychainsecurity unlock-keychain -pQ6
Credential Access / CollectionT1555.003 / T1539 — Credentials from Web Browsers / Steal Web Session CookieCookies, Login Data, Web Data, Local State across 16 browsersQ7
CollectionT1217 — Browser Information DiscoveryBookmarks, extensions, profile enumerationQ7
Command & ControlT1071.001 — Application Layer Protocol: Web ProtocolsHTTP(S) exfil to Amnesia Panel /send/Q8
Command & Control / CollectionT1219 / T1113 — Remote Access Software / Screen CaptureCDP-relayed headless browser, 3fps live screencast, full inputQ9
Collection (dormant)T1115 — Clipboard DataCrypto-address clipboard hijack (disabled in analyzed build)§4, §15 (watch item)
07

Native Audit-Log Hunts

macOS-native checks that complement the Falcon CQL in §8 — useful for live triage on a suspect Mac (run read-only first; capture before remediating).

Persistence & staging artifacts (macOS shell)

# Root LaunchDaemon impersonating Apple crash reporting
ls -la /Library/LaunchDaemons/ | grep -Ei "ReportCrash\.agent_[0-9]"
sudo launchctl list | grep -Ei "ReportCrash\.agent_[0-9]"

# 25-char random staging directory under /tmp with AmnesiaStealer artifact set
find /tmp -maxdepth 1 -type d -regex '.*/[A-Za-z0-9]\{25\}$' 2>/dev/null \
  -exec sh -c 'ls "$1"/Browsers "$1"/Passwords "$1"/Wallets "$1"/Telegram "$1"/pwd 2>/dev/null && echo "SUSPECT: $1"' _ {} \;

# Cleartext harvested password
test -f ~/.pwd && echo "AmnesiaStealer password store present: ~/.pwd"

TCC bypass & credential harvest (macOS shell / unified log)

# CVE-2020-9771 style local-snapshot mount (should be rare outside Time Machine's own backupd)
log show --last 1d --predicate 'process == "mount_apfs"' 2>/dev/null | grep -i "nobrowse"

# dscl-based local password validation + Keychain unlock outside normal admin activity
log show --last 1d --predicate 'process == "dscl" OR process == "security"' 2>/dev/null \
  | grep -Ei "authonly|unlock-keychain"

# Gatekeeper bypass chain (quarantine strip + ad-hoc sign)
log show --last 1d --predicate 'process == "xattr" OR process == "codesign"' 2>/dev/null \
  | grep -Ei "com.apple.quarantine|--sign -"

Stage 2 CDP relay check

# Chromium-family process launched headless with a remote-debugging port open
ps aux | grep -Ei "(chrome|brave|edge|arc|opera|vivaldi|chromium).*(--headless|--remote-debugging-port)" | grep -v grep
lsof -iTCP -sTCP:LISTEN -n -P | grep -Ei ":92[0-9]{2}\b"   # common CDP debug-port range; confirm parent process

Treat the combination of a 25-char /tmp staging directory, the ReportCrash.agent_<digits> LaunchDaemon, and a cleartext ~/.pwd as confirmed AmnesiaStealer infection — proceed to §14 containment and capture the plist, staging directory, and any active CDP relay process before removal.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · ClickFix bootstrap — Base64-decoded Terminal paste (macOS)
CONF HIGHFP LOWCOST LOW

Looks for: a Terminal/shell-descended process decoding a long Base64 blob — the ClickFix "paste this to verify/install" bootstrap. FP: very low; ad-hoc manual base64 decoding of long strings is rare on user endpoints. Review every hit.

// HUNT: AmnesiaStealer ClickFix bootstrap — base64-encoded command pasted into Terminal (macOS)
// MITRE: T1204.004, T1140, T1059.004 | CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: rare; developers occasionally decode base64 blobs manually — review CommandLine context
// TUNING: keep ParentBaseFileName scoped to Terminal/bash/zsh/sh; widen if the lure spawns via a different app
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| ParentBaseFileName=/^(Terminal|bash|zsh|sh)$/i
| CommandLine=/(base64\s+-{0,2}[Dd](ecode)?|echo\s+[A-Za-z0-9+\=]{60,}\s*\|)/i
| groupBy([ComputerName, ParentBaseFileName, FileName, CommandLine], function=([count(aid, as=hits), collect([UserName])]))
| sort(hits, order=desc)
Q2 · Gatekeeper bypass — quarantine strip, ad-hoc codesign, password-protected archive extraction
CONF HIGHFP LOWCOST LOW

Looks for: the Stage 0 → Stage 1 handoff — quarantine-attribute removal, ad-hoc code signing, extraction of a password-protected ZIP, and a nohup-backgrounded launch in the same process tree. FP: low; some developer workflows ad-hoc-sign local builds — review ParentBaseFileName and correlate with Q1/Q3.

// HUNT: AmnesiaStealer Gatekeeper bypass — quarantine strip + ad-hoc codesign + protected-archive extraction (macOS)
// MITRE: T1553.001, T1140 | CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: low; developer ad-hoc signing of locally-built binaries
// TUNING: raise confidence when chained with Q1 or Q3 hits on the same host within minutes
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| CommandLine=/(xattr\s+-d\s+com\.apple\.quarantine|codesign\s+--sign\s+-|unzip\s+-P\s+\S+|nohup\s+\S+.{0,20}&)/i
| groupBy([ComputerName, ParentBaseFileName, FileName, CommandLine], function=([count(aid, as=hits), collect([UserName])]))
| sort(hits, order=desc)
Q3 · AmnesiaStealer staging directory — 25-char /tmp folder with named artifact set
CONF HIGHFP LOWCOST MED

Looks for: file access under a 25-character random-alphanumeric directory in /tmp whose contents match the AmnesiaStealer artifact naming convention (Browsers, Passwords, Wallets, Notes, Telegram, FileGrabber, Diagnostics, system_info.json, installed_apps.txt, collection_report.txt, pwd). This is the single highest-fidelity, most AmnesiaStealer-specific signature in this pack. FP: very low — this exact naming pattern is not a normal macOS or developer-tooling convention.

// HUNT: AmnesiaStealer 25-char /tmp staging directory with named loot subfolders (macOS)
// MITRE: T1560, T1005 | CONF: high  FP: low  COST: medium | REQUIRES: FileOpenInfo (macOS)
// FALSE POSITIVES: very low; this naming convention is not used by legitimate installers or dev tooling
// TUNING: if COST is a concern in a large fleet, scope the time window in the console picker rather than in-query
#event_simpleName=/FileOpenInfo/
| TargetFileName=/\/tmp\/[A-Za-z0-9]{25}\/(Browsers|Passwords|Wallets|Notes|Telegram|FileGrabber|Diagnostics|system_info\.json|installed_apps\.txt|collection_report\.txt|pwd)/i
| table([@timestamp, ComputerName, aid, ImageFileName, TargetFileName, UserName], limit=200)
Q4 · Root LaunchDaemon persistence impersonating Apple crash reporter
CONF HIGHFP LOWCOST LOW

Looks for: a launchctl bootstrap/load invocation referencing a ReportCrash.agent_<digits> label — AmnesiaStealer's exact LaunchDaemon-impersonation pattern. Falcon's macOS sensor has no dedicated "service install" event, so this is caught via the launchctl process invocation rather than a file-write event (see §5 telemetry note). FP: very low; the real Apple ReportCrash LaunchDaemon (com.apple.ReportCrash, no .agent_<digits> suffix) is preloaded at boot by launchd itself, not re-loaded by a user-invoked launchctl command.

// HUNT: AmnesiaStealer root LaunchDaemon — ReportCrash.agent_<digits> impersonation (macOS)
// MITRE: T1543.004 | CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: very low; genuine com.apple.ReportCrash is loaded by launchd at boot, not via user launchctl
// TUNING: extend the label regex if a variant build uses a different Apple-service name
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| FileName=/^launchctl$/i
| CommandLine=/(bootstrap|load).{0,120}ReportCrash\.agent_?[0-9]*/i
| groupBy([ComputerName, ParentBaseFileName, CommandLine, UserName], function=count(aid, as=hits))
| sort(hits, order=desc)
Q5 · CVE-2020-9771 TCC bypass — mount_apfs -o nobrowse local snapshot mount
CONF HIGHFP MEDCOST LOW

Looks for: a process mounting an APFS local Time Machine snapshot with -o nobrowse — the CVE-2020-9771 primitive AmnesiaStealer reuses to bypass TCC for Safari cookie theft. A hit on a fully patched, non-downgraded macOS host is unexpected and worth escalating on its own — it indicates either a regressed/variant bypass or a tampered OS. FP: medium; Time Machine's own backupd/tmutil perform legitimate local-snapshot mounts — exclude those parents.

// HUNT: CVE-2020-9771 TCC bypass — mount_apfs -o nobrowse local snapshot mount (macOS)
// MITRE: T1548 | CONF: high  FP: medium  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: Time Machine's own backupd/tmutil legitimately mount local snapshots
// TUNING: exclude ParentBaseFileName in (backupd, tmutil); a hit outside those parents is high-value
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| FileName=/^mount_apfs$/i
| CommandLine=/nobrowse/i
| ParentBaseFileName!=/^(backupd|tmutil)$/i
| groupBy([ComputerName, ParentBaseFileName, CommandLine, UserName], function=count(aid, as=hits))
| sort(hits, order=desc)
Q6 · Credential harvest — spoofed "Installer" password prompt, dscl validation, Keychain unlock
CONF HIGHFP LOWCOST LOW

Looks for: local password validation via dscl . -authonly and/or a security unlock-keychain -p call, consistent with AmnesiaStealer's native "Installer" password-prompt harvest. FP: low under a non-admin, non-MDM parent process; some enterprise MDM/provisioning tooling uses dscl legitimately — allowlist known management agents.

// HUNT: AmnesiaStealer credential harvest — dscl authonly / Keychain unlock (macOS)
// MITRE: T1056.002, T1552.001, T1555.001 | CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: MDM/provisioning tooling may use dscl legitimately — allowlist by ParentBaseFileName
// TUNING: correlate with Q3 (staging dir) hits on the same host to confirm the AmnesiaStealer chain
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| CommandLine=/(dscl\s+\.\s+-?authonly|security\s+unlock-keychain\s+-p)/i
| groupBy([ComputerName, ParentBaseFileName, FileName, CommandLine, UserName], function=count(aid, as=hits))
| sort(hits, order=desc)
Q7 · Mass Chromium credential-store collection across multiple browser bundles
CONF HIGHFP MEDCOST MED

Looks for: a non-browser process reading Cookies, Login Data, Web Data, or Local State — AmnesiaStealer's 16-browser sweep. FP: medium; backup/sync agents and browser-migration tools also touch these files — exclude the owning browser bundle and known backup agents, and prioritize a single process touching multiple distinct browser bundles.

// HUNT: Non-browser process reads Chromium credential/session stores across multiple bundles (macOS)
// MITRE: T1555.003, T1539, T1217 | CONF: high  FP: medium  COST: medium | REQUIRES: FileOpenInfo (macOS)
// FALSE POSITIVES: backup/sync agents, browser profile-migration tools
// TUNING: exclude ImageFileName for the owning browser bundle + known backup agents; prioritize a single
// process hitting 3+ distinct browser bundle paths within a short window
#event_simpleName=/FileOpenInfo/
| TargetFileName=/\/(Cookies|Login Data|Login Data For Account|Web Data|Local State)$/i
| ImageFileName!=/\/(Google Chrome|Google Chrome Helper.*|Microsoft Edge|Brave Browser|Opera|Vivaldi|Arc|Chromium|Safari|com\.apple\.).*$/i
| groupBy([ComputerName, ImageFileName, TargetFileName, UserName], function=count(aid, as=hits))
| sort(hits, order=desc)
Q8 · Amnesia Panel C2 sweep — debug[.]allllowef[.]space / news[.]allllowef[.]space / shlyapadulina[.]space domain family + published IPs
CONF HIGHFP LOWCOST LOW

Looks for: any host resolving or connecting to the published Amnesia Panel C2 infrastructure. FP: low for the domains; the two IPs are single-sourced — treat as hunt, not an automatic block, until corroborated.

// HUNT: AmnesiaStealer atomic C2 sweep — Amnesia Panel domain family + published IPs (macOS/all)
// MITRE: T1071.001 | CONF: high  FP: low  COST: low | REQUIRES: DnsRequest / NetworkConnectIP4
// FALSE POSITIVES: low for domains; IPs are single-sourced (GBHackers) — confirm before broad block
// TUNING: extend the domain list as new Amnesia Panel infrastructure is published
#event_simpleName=/DnsRequest|NetworkConnectIP4/
| DomainName=/(allllowef\.space|shlyapadulina\.space)$/i OR RemoteAddressIP4=/^(138\.124\.70\.84|138\.124\.96\.160)$/
| groupBy([ComputerName, DomainName, RemoteAddressIP4, ContextBaseFileName], function=count(aid, as=hits))
| sort(hits, order=desc)
Q9 · Stage 2 live browser hijack — Chromium spawned with CDP remote-debugging flags
CONF MEDFP MEDCOST LOW

Looks for: a Chromium-family browser spawned headless with --remote-debugging-port — the moment the stream_module clones the victim's profile and opens the CDP relay for live operator control. FP: medium; legitimate browser-automation/QA tooling (Selenium, Puppeteer, Playwright) uses the same flags — exclude known automation hosts/parents, and prioritize a browser process whose parent is not a normal launcher (Finder, Dock, another browser).

// HUNT: AmnesiaStealer Stage 2 — Chromium spawned headless with CDP remote-debugging flags (macOS)
// MITRE: T1219, T1113 | CONF: medium  FP: medium  COST: low | REQUIRES: ProcessRollup2 (macOS)
// FALSE POSITIVES: legitimate browser-automation/QA tooling (Selenium, Puppeteer, Playwright)
// TUNING: exclude known CI/automation hosts and ParentBaseFileName values for those frameworks
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| event_platform=Mac
| FileName=/^(Google Chrome|Brave Browser|Microsoft Edge|Arc|Opera|Vivaldi|Chromium)$/i
| CommandLine=/--remote-debugging-port=[0-9]+/i
| CommandLine=/--headless/i
| groupBy([ComputerName, ParentBaseFileName, FileName, CommandLine, UserName], function=count(aid, as=hits))
| sort(hits, order=desc)

Field-name note: queries use standard Falcon fields (#event_simpleName, event_platform, ParentBaseFileName, FileName, ImageFileName, CommandLine, TargetFileName, ContextBaseFileName, DomainName, RemoteAddressIP4, ComputerName, aid, UserName). Q3/Q7 use FileOpenInfo, the same macOS file-access event already validated in the AMOS-Stealer-macOS-Hunt pack in this library — confirm it is enabled for macOS hosts in your tenant policy.

09

Custom IOA Recommendations

IOA namePatternExclusionsDeployment
macOS-Amnesia-TmpStagingDirFile access under /tmp/<25-char-random>/ matching the AmnesiaStealer artifact set (process-create/file-access IOA, macOS)None known — pattern is not used by legitimate installersHost group: all Macs; Action: Detect → Prevent
macOS-Amnesia-LaunchDaemonlaunchctl bootstrap/load referencing ReportCrash.agent_<digits>None — genuine ReportCrash is loaded by launchd at boot, not via user launchctlHost group: Macs; Action: Prevent (high fidelity)
macOS-CVE-2020-9771-Mountmount_apfs -o nobrowse outside a backupd/tmutil parentTime Machine's own snapshot mountsHost group: Macs; Action: Detect
macOS-Amnesia-ClickFix-Base64Terminal/shell decoding a long base64 blob (process-create IOA)Rare developer manual decode workflowsHost group: all Macs; Action: Detect

Start every IOA in Detect. Promote macOS-Amnesia-LaunchDaemon and macOS-Amnesia-TmpStagingDir to Prevent first — both are behaviorally distinctive to AmnesiaStealer with essentially no known legitimate collision.

10

Machine-Readable IOC Appendix

Atomic indicators are from cited research and ready to import. The two IP addresses are single-sourced (GBHackers) — set to detect/validate rather than hard block. Domains and hashes carry higher confidence.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
domain,debug.allllowef.space,block,critical,2027-02-16,AmnesiaStealer Amnesia Panel C2 root + exfil,campaign:amnesiastealer
domain,news.allllowef.space,block,high,2027-02-16,AmnesiaStealer related C2 infrastructure,campaign:amnesiastealer
domain,shlyapadulina.space,detect,medium,2026-11-16,AmnesiaStealer C2/delivery infra (single-sourced),campaign:amnesiastealer
domain,amz.shlyapadulina.space,detect,medium,2026-11-16,AmnesiaStealer C2/delivery infra (single-sourced),campaign:amnesiastealer
domain,github.aoitour.com,block,high,2027-02-16,AmnesiaStealer counterfeit GitHub ClickFix landing page,campaign:amnesiastealer
ipv4,138.124.70.84,detect,medium,2026-11-16,AmnesiaStealer C2 host (single-sourced-validate),campaign:amnesiastealer
ipv4,138.124.96.160,detect,medium,2026-11-16,AmnesiaStealer C2 host (single-sourced-validate),campaign:amnesiastealer
sha256,de5748aac4a4d4cb48cf050652679e6bc49eda33d9ffaa0d280b578122fab55a,prevent,critical,2027-02-16,AmnesiaStealer Stage 1 Rust infostealer binary,campaign:amnesiastealer
sha256,e853748ca8f9a5a9168263617409a9039ab09f4ffc7d860374c1e3b0b67b31a5,prevent,critical,2027-02-16,AmnesiaStealer Stage 2 stream_module binary,campaign:amnesiastealer
Host ArtifactsmacOS paths
STAGE    /tmp/<25-random-alphanumeric-chars>/                       -> loot staging directory
STAGE    .../Browsers  .../Passwords  .../Wallets  .../Notes  .../Telegram  .../FileGrabber
STAGE    .../system_info.json  .../installed_apps.txt  .../collection_report.txt  .../pwd
CREDS    ~/.pwd                                                     -> cleartext harvested local password
PERSIST  /Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist  -> root LaunchDaemon
DROPPER  /tmp/starter  /tmp/tempAppleScript.scpt                     -> Stage 0 staging / osascript fallback
CONFIG   XOR key 4mn3s1a_2o26!xK (analyst identification only, not a block target)
CONFIG   Archive password "dulin"; Safe Storage overwrite key pqz8N3vKxRmY2aLcQ
Behavioral Signaturesship as-is
BEHAVIOR: Terminal/shell decodes long base64 blob (ClickFix bootstrap)               -> detect (Q1)
BEHAVIOR: xattr quarantine strip + ad-hoc codesign + protected-zip extraction        -> detect (Q2)
BEHAVIOR: 25-char /tmp staging dir with AmnesiaStealer artifact set                  -> detect (Q3)
BEHAVIOR: launchctl load of ReportCrash.agent_<digits> LaunchDaemon                  -> detect (Q4)
BEHAVIOR: mount_apfs -o nobrowse outside Time Machine (CVE-2020-9771)                -> detect (Q5)
BEHAVIOR: dscl authonly / security unlock-keychain credential harvest                -> detect (Q6)
BEHAVIOR: non-browser process reads Cookies/Login Data across multiple bundles       -> detect (Q7)
BEHAVIOR: DNS/network to Amnesia Panel domain family or published IPs                -> detect (Q8)
BEHAVIOR: Chromium spawned headless with --remote-debugging-port (CDP hijack)        -> hunt   (Q9)
BEHAVIOR: clipboard hijack of BTC/BCH/ETH/TRON/LTC/XMR/SOL/XRP/ATOM addresses        -> dormant, watch only (disabled in analyzed build)
Triage One-Linersread-only first
CHECK  ls -la /Library/LaunchDaemons/ | grep -Ei "ReportCrash\.agent_[0-9]"
CHECK  test -f ~/.pwd && echo "AmnesiaStealer password store present"
CHECK  find /tmp -maxdepth 1 -type d -regex '.*/[A-Za-z0-9]\{25\}$'
LOG    log show --last 1d --predicate 'process == "mount_apfs"' | grep -i nobrowse
LOG    ps aux | grep -Ei "(chrome|brave|edge|arc).*(--headless|--remote-debugging-port)" | grep -v grep
KILL   (after evidence capture) sudo launchctl bootout system /Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist
11

Detection Validation Gates

GateCheckPass criteria
Telemetry readyFalcon for macOS reporting ProcessRollup2, FileOpenInfo, DnsRequest, NetworkConnectIP4 on all MacsAll Macs visible in last 24h with macOS-platform events
Benign baselineRun Q5/Q7/Q9 over 7–14 days; catalog Time Machine snapshot mounts, browser backup/sync agents, and any legitimate automation hostsDocumented allowlist before alerting
Positive testIn a lab Mac: echo "dGVzdA==" | base64 -D from Terminal; xattr -d com.apple.quarantine a test file then codesign --sign - it; create /tmp/<25-random-chars>/Browsers and open a file in itQ1, Q2, and Q3 fire
Atomic sweepRun Q8 across the estate for the published domains/IPs; run a hash sweep for both SHA-256 valuesZero hits in a clean estate; any hit = investigate immediately
PromotionQ3 (staging dir) and Q4 (LaunchDaemon) IOAs → Prevent; Q9 (CDP hijack) stays Detect until automation hosts are excludedSigned off by detection owner
12

Hardening — Tiered

Immediate (0–72h)
  • Block/detect the §10 C2 domains and hashes at DNS/proxy and Falcon IOC Management; hunt Q1–Q9 across the last 14 days for any host with a Q3 (staging dir) or Q4 (LaunchDaemon) hit — isolate and proceed to §14 for any positive. Verify: confirm the CSV imported cleanly via Falcon Console → IOC Management → search "amnesiastealer". M1031 (Network Intrusion Prevention).
  • Confirm macOS patch level fleet-wide — CVE-2020-9771 was fixed in Catalina 10.15.4/10.15.5; a host where Q5 fires despite being "current" indicates either a downgraded OS or a regressed/variant bypass and should be treated as its own incident. Verify: sw_vers -productVersion across the fleet via MDM inventory. M1051 (Update Software).
  • User-awareness flash: "paste this into Terminal to install/verify" is an attack, even on a page that looks like GitHub with a verified badge — never paste a command from a web page without reading it first. Verify: track completion in the security-awareness platform. M1017 (User Training) — counters T1204.004.
Near term (this week)
  • Deploy the §9 Custom IOAs in Detect across all Macs; promote macOS-Amnesia-LaunchDaemon and macOS-Amnesia-TmpStagingDir to Prevent (both are high-fidelity, low-collision). Verify: Falcon Console → Custom IOA → confirm deployed host-group coverage = 100% of Mac fleet. M1040 (Behavior Prevention on Endpoint).
  • Restrict use of sudo mount_apfs and audit any -o nobrowse invocation outside Time Machine's own process; consider a macOS configuration profile that logs or blocks ad-hoc APFS snapshot mounts for standard users. Verify: re-run Q5 after deployment and confirm only backupd/tmutil parents remain. M1028 (Operating System Configuration).
  • Enforce Gatekeeper / notarization requirements via MDM (disable "Anywhere" app-source setting fleet-wide) so quarantine-strip + ad-hoc-codesign chains (Q2) are rarer and more anomalous. Verify: spctl --status reports assessments enabled on all managed Macs. M1038 (Execution Prevention).
Strategic
  • Deploy MDM configuration profiles that restrict LaunchDaemon/LaunchAgent installation to signed, managed payloads and alert on any unmanaged plist appearing under /Library/LaunchDaemons/. Verify: quarterly audit comparing observed LaunchDaemons against the managed baseline. M1047 (Audit).
  • Egress/DNS filtering so newly registered or low-reputation domains (the Amnesia Panel pattern: short-lived, oddly-spelled TLD-abusing names) are flagged before first contact; feed Q8's domain family into a continuously updated threat-intel blocklist. Verify: confirm DNS security tooling ingests the Falcon IOC feed. M1037 (Filter Network Traffic).
  • Reduce standing local-admin rights so the native "Installer" password prompt (Q6) has less blast radius if a non-admin user is tricked — a non-admin's password does not unlock a root LaunchDaemon install path as readily. Verify: MDM report of local-admin group membership trending toward zero for standard users. M1026 (Privileged Account Management).
13

Deployable Playbooks

1 · Read-only sweep for AmnesiaStealer artifacts (Falcon RTR / MDM script)

Prerequisites: Falcon RTR read-only session or MDM custom-script deployment capability; no elevated privileges required for the checks below.
Reboot required: none.
Rollback: none required — this script only reads and prints; it makes no changes.

#!/bin/bash
# Run per-user context where possible. Read-only enumeration only.
echo "== LaunchDaemon check =="
ls -la /Library/LaunchDaemons/ 2>/dev/null | grep -Ei "ReportCrash\.agent_[0-9]"

echo "== Staging directory check =="
find /tmp -maxdepth 1 -type d -regex '.*/[A-Za-z0-9]\{25\}$' 2>/dev/null

echo "== Cleartext password store check =="
for ua in /Users/*; do
  [ -f "$ua/.pwd" ] && echo "PASSWORD STORE: $ua/.pwd"
done

echo "== Active CDP relay check =="
ps aux | grep -Ei "(chrome|brave|edge|arc|opera|vivaldi|chromium).*(--headless|--remote-debugging-port)" | grep -v grep

2 · Remove persistence & artifacts after evidence capture

Prerequisites: local admin/root (via Falcon RTR elevated session or MDM); Stage 1 evidence capture completed for the plist, staging directory, and any binaries under quarantine BEFORE this step runs.
Reboot required: no — launchctl bootout takes effect immediately without a reboot.
Rollback: if a legitimate host is misidentified, restore the quarantined plist and staging directory from the evidence copy and re-run sudo launchctl bootstrap system /Library/LaunchDaemons/<restored-plist>. Because the daemon is malicious in every confirmed case, rollback is expected to be rare — document the false-positive if it occurs.

# 1) Capture evidence FIRST (copy, do not move, to an evidence share):
sudo cp -R /Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist /evidence/ 2>/dev/null
sudo cp -R /tmp/<25-char-staging-dir> /evidence/ 2>/dev/null

# 2) Unload and remove the malicious LaunchDaemon:
sudo launchctl bootout system /Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist
sudo rm -f /Library/LaunchDaemons/com.apple.ReportCrash.agent_<digits>.plist

# 3) Remove staging directory and cleartext password stores:
rm -rf /tmp/<25-char-staging-dir>
rm -f ~/.pwd /tmp/pwd /tmp/starter /tmp/tempAppleScript.scpt

3 · Block Amnesia Panel C2 at the network edge

Prerequisites: access to the DNS sinkhole / secure-web-gateway policy console.
Reboot required: none — DNS/proxy policy changes apply on next resolution.
Rollback: remove the entries from the denylist; no endpoint-side change is made, so rollback is a simple policy revert with no residual state.

# DNS/proxy denylist (import via your control plane):
debug.allllowef.space
news.allllowef.space
github.aoitour.com
# Detect-and-validate (single-sourced, lower confidence — hunt before hard-blocking):
shlyapadulina.space
amz.shlyapadulina.space
138.124.70.84
138.124.96.160

Because C2 infrastructure for these campaigns typically rotates, treat the domain/IP list as a seed — rely on Q1–Q7 (which detect AmnesiaStealer's on-host behavior, not just its current infrastructure) to catch a re-infrastructured wave.

14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the Mac via Falcon RTR/host-containment; block the §10 C2 domains/IPs at DNS/proxySOCContainment timestamp, host ID
CapturePreserve the LaunchDaemon plist, the full 25-char staging directory, ~/.pwd, and the process tree for any active CDP-relay browser process before removalIRPlist + staging dir + process tree
EradicateBootout + remove the LaunchDaemon; delete the staging directory and cleartext password files; kill any live --remote-debugging-port browser process; confirm no second persistence mechanismIR + EndpointRemoved-artifact list
CredentialsRotate the user's local macOS account password plus every credential the stealer could reach: browser-saved passwords, Keychain items, Chrome Safe Storage-protected data, crypto wallets, Telegram session, iCloud Keychain re-verificationIAM + userRotation records, wallet review
Recover & monitorIf a live CDP session was confirmed active (T1219/T1113), treat any account accessed through the victim's authenticated browser sessions during that window as potentially compromised — force sign-out of active sessions on high-value services; keep Q1–Q9 + IOAs enabled; re-image if hands-on operator activity is confirmedSOC + EndpointPost-recovery hunt results, session-revocation log
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1204.004 / T1140ClickFix base64 Terminal pasteQ1macOS-Amnesia-ClickFix-Base64Good
T1553.001Quarantine strip + ad-hoc codesign + archive extractionQ2Good
T1560 / T100525-char /tmp staging directory with named artifactsQ3macOS-Amnesia-TmpStagingDirGood
T1543.004Root LaunchDaemon impersonating Apple crash reporterQ4macOS-Amnesia-LaunchDaemonGood
T1548CVE-2020-9771 TCC bypass (mount_apfs -o nobrowse)Q5macOS-CVE-2020-9771-MountGood
T1056.002 / T1552.001 / T1555.001Spoofed password prompt, dscl validation, Keychain unlockQ6Good
T1555.003 / T1539 / T121716-browser credential/session-store collectionQ7Partial
T1071.001Amnesia Panel C2 exfilQ8Partial
T1219 / T1113CDP-relayed live browser hijackQ9Partial
T1115Clipboard crypto-address hijackGap — dormant capability

Coverage note: browser credential-store reads (Q7) and C2 exfil (Q8) are rated Partial because both overlap with legitimate software (backup agents, normal HTTPS traffic) — this pack catches them with reasonable fidelity but leans on the surrounding chain (staging dir → LaunchDaemon → credential harvest) for confirmation rather than alerting on either signal alone. The CDP live-hijack query (Q9) is Partial because the same command-line flags are used by legitimate browser-automation tooling; tune the exclusion list to your environment before promoting to Prevent. Clipboard hijacking (T1115) has no query because Jamf's analysis confirmed the module is present in the code but disabled in the observed build — shipping a query against inactive functionality would not fire and was deliberately omitted rather than fabricated; re-add coverage immediately if a future build is reported with it enabled.

16

Hunt Summary Ticket

TITLE      : AmnesiaStealer — macOS ClickFix Infostealer + Live Browser Hijack
SEVERITY   : High — newly disclosed (2026-08-13), credential + wallet + live-session theft, root persistence
SCOPE      : macOS Catalina through macOS 26 — social-engineering delivery, no initial-access CVE;
             CVE-2020-9771 reused post-compromise for Safari TCC bypass (patched 10.15.4/10.15.5)
HYPOTHESIS : ClickFix base64 paste -> Gatekeeper bypass -> /tmp staging dir -> root LaunchDaemon ->
             credential/Keychain harvest (+/- CVE-2020-9771) -> 16-browser collection -> Amnesia Panel exfil ->
             on-demand CDP live browser hijack (~3fps, full input)
QUERIES    : Q1 ClickFix bootstrap | Q2 Gatekeeper bypass | Q3 staging dir | Q4 LaunchDaemon | Q5 CVE-2020-9771 |
             Q6 credential harvest | Q7 browser collection | Q8 C2 sweep | Q9 CDP hijack
DO FIRST   : Import §10 IOCs; hunt Q1-Q9 14d; isolate any host with a Q3 or Q4 hit; verify macOS patch level
             fleet-wide for CVE-2020-9771 exposure
FINDINGS   : <fill from hunt>
GAPS       : Clipboard-hijack module confirmed present but disabled in analyzed build — no active query;
             browser-collection and C2-exfil queries rated Partial (overlap with legitimate software)
ACTIONS    : Block/detect C2 (sect 10), deploy IOAs (sect 9), rotate creds/wallets/Keychain/browser sessions
             for confirmed hosts, patch-verify CVE-2020-9771, user-awareness on ClickFix
OWNER      : HuntPack
VERSION    : v0.1 · 2026-08-16
17

Changelog

v0.12026-08-16Initial HuntPack for AmnesiaStealer (Jamf Threat Labs, published 2026-08-13). 9 CQL hunt queries covering the ClickFix bootstrap, Gatekeeper bypass, the 25-char /tmp staging directory signature, root LaunchDaemon persistence (Apple crash-reporter impersonation), CVE-2020-9771 TCC-bypass reuse, credential/Keychain harvest, 16-browser credential-store collection, Amnesia Panel C2, and Stage 2 CDP live-browser-hijack activation. Ships cited atomic IOCs (2 SHA-256 hashes, 5 domains, 2 IPs, LaunchDaemon/staging-dir path patterns) — all traced to the 10 saved source snapshots in AmnesiaStealer-macOS-ClickFix-Hunt-sources/; none fabricated. Clipboard-hijack capability (T1115) is noted as a confirmed-but-dormant module and deliberately shipped without a detection query.
18

References

TierSourceUsed forAccess date
Primary ResearchJamf Threat Labs — AmnesiaStealer: macOS Infostealer That Hijacks BrowsersFull technical analysis — staging dir, XOR key, C2 API, TCC bypasses, CDP relay, both hashes2026-08-16
ReportingThe Hacker News — AmnesiaStealer Hijacks Chromium SessionsAttack-chain confirmation, clipboard-hijack currency list2026-08-16
ReportingSecurityWeek — AmnesiaStealer macOS Malware Steals Data, Controls Browser SessionsCVE-2020-9771 confirmation, Safe Storage overwrite behavior2026-08-16
ReportingSecurityAffairs — AmnesiaStealer Gives Attackers Live Control of Victims' macOS BrowsersLaunchDaemon naming pattern, credential-harvest flow2026-08-16
ReportingInfosecurity Magazine — Novel macOS Infostealer AmnesiaStealer Spread via ClickFixAudio-mute behavior, CDP browser-scope confirmation2026-08-16
ReportingGBHackers — New AmnesiaStealer Malware Targets macOS UsersAtomic IOC set — domains, IPs, hashes, archive password, LaunchDaemon path2026-08-16
ReportingSC Media — MacOS AmnesiaStealer Malware Spread Through ClickFixTargeted file-extension list, CVE patch-version confirmation2026-08-16
SecondaryBrinztech — AmnesiaStealer Multi-Stage Rust Infostealer breach alertXOR key corroboration, mitigation recommendations2026-08-16
ReportingCyber Security News — AmnesiaStealer macOS Malware Hijacks Browser SessionsLanding-page domain, delivery mechanics2026-08-16
SecondaryMacTech.com — Jamf Threat Labs releases report of macOS malware dubbed 'AmnesiaStealer'Campaign summary, Jamf mitigation pointer2026-08-16
FrameworkNVD — CVE-2020-9771 (macOS Time Machine / mount_apfs TCC bypass)TCC-bypass technical basis, patch versions2026-08-16
FrameworkMITRE ATT&CK — T1543.004 Launch DaemonPersistence technique + mitigations2026-08-16