A newly disclosed proof-of-concept from Patrick Wardle shows a practical local attack path against Meta Muse on macOS: malicious software that is already running on the machine can flip a hidden setting so that, when the user taps the microphone and dictates a prompt, those words are sent to an attacker-controlled destination instead of Meta. The impact is not a remote zero-click compromise; it is a post-compromise amplification technique. If an endpoint already has commodity malware, adware, a rogue agent, or a hands-on intruder, Muse can become an unauthorized access mechanism that inherits the broad permissions the user previously granted to the assistant.
The defensive issue is bigger than one app. AI assistants are being granted microphone, speech, accessibility, automation, files, and sometimes full-disk or screen-recording adjacent capabilities so they can act as an operating layer rather than a chat window. That trust model fails when a local process can silently alter assistant configuration, intercept voice prompts, or redirect the resulting data flow. Treat this as a macOS endpoint hardening and detection engineering problem today: inventory where Muse is installed, minimize TCC grants, watch for preference tampering, and hunt for assistant processes talking to unexpected destinations.
Source: The Hacker News, September 21, 2026: https://thehackernews.com/2026/09/one-hidden-meta-muse-setting-could-let.html
Technical Analysis
Affected products and platforms: based on the public summary, the affected component is Meta Muse running on macOS. Exact affected build numbers, a fixed version, a CVE identifier, and a CVSS score were not provided in the referenced item. Do not invent one. Until Meta publishes an advisory, scope exposure by presence of the app and by permissions granted, not by version alone.
Attack chain, defender view:
- Prerequisite: attacker code is already executing on the Mac as the logged-in user, through malware, a malicious helper, a compromised package, a rogue launch agent, or an interactive intruder.
- The local process locates Muse configuration state, most plausibly user preference or container preference locations such as
~/Library/Preferences,~/Library/Containers,~/Library/Group Containers, or app-managed support files. - The attacker changes a hidden or undocumented setting that controls where dictated microphone input is submitted.
- The user later performs a trusted action: taps the Muse microphone and dictates a prompt.
- Prompt text, and potentially surrounding context collected by the assistant under existing grants, is routed to an attacker-controlled endpoint rather than Meta.
The important security property is consent laundering. The user believes they are interacting with Meta; the operating system believes Muse is allowed to use the microphone; the attacker rides both assumptions. This is consistent with macOS abuse patterns involving TCC permission over-grant, preference tampering, launch agent persistence, and local IPC or configuration redirection. It is not, from the available summary, evidence of a remote code execution flaw in Muse.
Exploitation status: public proof-of-concept released September 21, 2026. The provided item does not state confirmed widespread exploitation, CISA Known Exploited Vulnerabilities inclusion, or an assigned CVE. Operationally, treat it as exploitable on endpoints where local execution is possible and Muse has broad permissions. The prerequisite reduces internet-wide risk, but it raises the stakes after any initial macOS compromise.
Immediate exposure questions for your fleet:
- Where is Muse installed, and under which bundle identifiers or container paths?
- Which users granted Microphone, Speech Recognition, Accessibility, Input Monitoring, Automation, Files and Folders, Screen Recording, or Full Disk Access to Muse or related helpers?
- Are there configuration profiles or PPPC payloads granting assistant permissions outside change control?
- Do EDR records show
defaults,plutil,PlistBuddy,sqlite3,killall, or scripting runtimes touching Muse preference domains? - Does Muse or its helpers establish network sessions to domains, IPs, or ports outside an approved Meta/Facebook/WhatsApp/assistant egress policy?
Detection and Response
The highest-fidelity detections are local and behavioral: preference mutation by a non-Muse process, suspicious permission inspection or reset activity, unexpected assistant egress, and persistence co-located with Muse tampering. Avoid alerting on every Muse network connection; that will drown a SOC. Alert on the transition points: config changed, permissions expanded, process lineage abnormal, egress destination not in an allowlist.
---
title: macOS Preference Tampering Targeting Meta Muse
description: Detects command-line preference utilities modifying or deleting Meta Muse related preference domains, consistent with local hidden-setting tampering.
references:
- https://thehackernews.com/2026/09/one-hidden-meta-muse-setting-could-let.html
- https://attack.mitre.org/techniques/T1112/
author: Security Arsenal
date: 2026/09/22
tags:
- attack.defense_evasion
- attack.t1112
logsource:
category: process_creation
product: macos
detection:
selection_tool:
Image|endswith:
- '/defaults'
- '/plutil'
- '/PlistBuddy'
- '/sqlite3'
selection_muse:
CommandLine|contains:
- 'Muse'
- 'Meta Muse'
- 'com.meta'
- 'facebook'
selection_action:
CommandLine|contains:
- ' write '
- ' delete '
- ' import '
- ' convert '
condition: selection_tool and selection_muse and selection_action
falsepositives:
- User or MDM intentionally changing Muse preferences
- Meta first-run or update workflows
level: high
---
title: macOS Scripting Runtime Modifying AI Assistant Preferences
description: Detects shells or scripting runtimes executing preference changes against Muse or Meta assistant configuration paths, a common malware and red-team pattern.
references:
- https://thehackernews.com/2026/09/one-hidden-meta-muse-setting-could-let.html
- https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/09/22
tags:
- attack.execution
- attack.t1059
logsource:
category: process_creation
product: macos
detection:
selection_parent:
ParentImage|endswith:
- '/bash'
- '/zsh'
- '/sh'
- '/python'
- '/python3'
- '/osascript'
- '/ruby'
- '/perl'
- '/node'
selection_target:
CommandLine|contains:
- 'Library/Preferences'
- 'Library/Containers'
- 'Library/Group Containers'
- 'com.apple.TCC'
- 'Muse'
- 'com.meta'
condition: selection_parent and selection_target
falsepositives:
- Legitimate local administration scripts
- Developer debugging of sandboxed apps
level: medium
---
title: Meta Muse Network Egress to Non-Meta Destination
description: Detects Muse or likely helper processes connecting to destinations outside an approved Meta assistant egress set. Tune DestinationHostname or RemoteIP allowlists before broad deployment.
references:
- https://thehackernews.com/2026/09/one-hidden-meta-muse-setting-could-let.html
- https://attack.mitre.org/techniques/T1071/
author: Security Arsenal
date: 2026/09/22
tags:
- attack.command_and_control
- attack.exfiltration
- attack.t1071
logsource:
category: network_connection
product: macos
detection:
selection_process:
Image|contains:
- 'Muse'
- 'Meta'
filter_meta:
DestinationHostname|contains:
- 'meta.com'
- 'facebook.com'
- 'fbcdn.net'
- 'whatsapp.net'
- 'cdninstagram.com'
condition: selection_process and not filter_meta
falsepositives:
- Content delivery networks and analytics endpoints not covered by the allowlist
- Corporate proxy or inspection services presenting different destination metadata
level: medium
// Hunt local preference or TCC tampering around Meta Muse on macOS endpoints onboarded to Microsoft Defender for Endpoint
let Lookback = 14d;
let ApprovedMetaEgress = dynamic(['meta.com','facebook.com','fbcdn.net','whatsapp.net','cdninstagram.com','oculus.com']);
DeviceProcessEvents
| where TimeGenerated >= ago(Lookback)
| where DeviceOS contains 'macOS' or ProcessVersionInfoOriginalFileName has_any ('defaults','plutil','PlistBuddy','sqlite3','osascript','zsh','bash','python3')
| where FileName in~ ('defaults','plutil','PlistBuddy','sqlite3','osascript','zsh','bash','sh','python','python3')
| where ProcessCommandLine has_any ('Muse','Meta Muse','com.meta','Library/Preferences','Library/Containers','Library/Group Containers','com.apple.TCC')
| where not (InitiatingProcessFileName has_any ('Muse','Meta') or FileName has_any ('Muse','Meta'))
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256, ReportId
| order by TimeGenerated desc;
// Hunt file artifacts under likely preference and container locations
DeviceFileEvents
| where TimeGenerated >= ago(Lookback)
| where FolderPath has_any ('/Library/Preferences','/Library/Containers','/Library/Group Containers','/Library/Application Support')
| where FolderPath has_any ('Muse','com.meta','Meta')
| where ActionType has_any ('FileCreated','FileModified','FileRenamed','FileDeleted')
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, FolderPath, ActionType, SHA256, ReportId
| order by TimeGenerated desc;
// Hunt assistant egress outside approved Meta destinations; replace allowlist with your normalized egress list
DeviceNetworkEvents
| where TimeGenerated >= ago(Lookback)
| where InitiatingProcessFileName has_any ('Muse','Meta') or FileName has_any ('Muse','Meta')
| where ActionType == 'ConnectionSuccess'
| extend Host = coalesce(RemoteUrl, '')
| where not (Host has_any (ApprovedMetaEgress))
| summarize Connections = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Devices = dcount(DeviceName) by DeviceName, InitiatingProcessFileName, RemoteIP, RemotePort, RemoteUrl
| order by Connections desc;
-- Velociraptor hunt artifact: Meta Muse local tamper and egress triage for macOS
-- Collect processes, likely preference artifacts, launch persistence, and network listeners in one pass.
SELECT * FROM foreach(row={
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE CommandLine =~ 'Muse|Meta Muse|com.meta|defaults|plutil|PlistBuddy|sqlite3|Library/Preferences|Library/Containers|com.apple.TCC'
OR Exe =~ 'Muse|Meta|defaults|plutil|PlistBuddy|sqlite3'
}, query={
SELECT 'process' AS ArtifactType, Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM scope()
})
UNION ALL
SELECT * FROM foreach(row={
SELECT FullPath, Mtime, Size
FROM glob(globs=[
'/Users/*/Library/Preferences/*Muse*',
'/Users/*/Library/Preferences/*meta*',
'/Users/*/Library/Containers/*/Data/Library/Preferences/*Muse*',
'/Users/*/Library/Group Containers/*/*Muse*',
'/Users/*/Library/LaunchAgents/*.plist',
'/Library/LaunchAgents/*.plist',
'/Library/LaunchDaemons/*.plist'
])
WHERE FullPath =~ 'Muse|meta|com.meta|launch'
}, query={
SELECT 'file' AS ArtifactType, FullPath, Mtime, Size FROM scope()
})
UNION ALL
SELECT * FROM foreach(row={
SELECT Pid, Name, LocalAddr, LocalPort, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE Name =~ 'Muse|Meta'
OR RemotePort in [443, 80, 8443]
}, query={
SELECT 'network' AS ArtifactType, Pid, Name, LocalAddr, LocalPort, RemoteAddr, RemotePort, Status
FROM scope()
})
Triage guidance: when a rule fires, preserve the preference plist before remediation, capture a copy of the relevant container or group container metadata, collect the responsible process tree, and compare the modified timestamp against user activity. If the timestamp aligns with the user tapping the microphone but the destination is not approved, treat it as potential interception. If it aligns with installation or update, validate against a signed Meta installer and an MDM change record.
#!/usr/bin/env bash
# Meta Muse macOS audit and optional lockdown script. Read-only by default.
# Usage: bash muse_hardening.sh audit only
# bash muse_hardening.sh --enforce reset candidate TCC grants for discovered Muse bundle IDs
set -euo pipefail
MODE='audit'
if [ '${1:-}' = '--enforce' ]; then MODE='enforce'; fi
STAMP=$(date -u +%Y%m%dT%H%M%SZ)
OUT=/tmp/muse_audit_${STAMP}.txt
exec > >(tee -a "$OUT") 2>&1
echo '[+] Scope'
sw_vers || true
printf 'host: '; hostname
printf 'user: '; id -un
echo '[+] Installed candidates'
/usr/sbin/pkgutil --pkgs 2>/dev/null | /usr/bin/grep -Ei 'muse|meta|facebook' || true
/usr/bin/mdfind 'kMDItemKind == "Application"' 2>/dev/null | /usr/bin/grep -Ei 'Muse|Meta' || true
/ usr/bin/true 2>/dev/null || true
echo '[+] Candidate bundle identifiers'
CANDIDATES=$(/usr/bin/mdfind 'kMDItemCFBundleIdentifier == "*muse*"c || kMDItemCFBundleIdentifier == "*meta*"c' 2>/dev/null || true)
echo "$CANDIDATES"
BUNDLES=$(/usr/bin/osascript -e 'on run argv' -e 'set out to {}' -e 'repeat with p in argv' -e 'try' -e 'set end of out to id of application file p' -e 'end try' -e 'end repeat' -e 'return out' -e 'end run' $CANDIDATES 2>/dev/null || true)
if [ -z "${BUNDLES:-}" ]; then BUNDLES='com.meta.Muse'; fi
echo "bundle candidates: $BUNDLES"
echo '[+] Preference domains mentioning Muse or Meta'
for u in /Users/*; do
[ -d "$u/Library/Preferences" ] || continue
echo "-- $u"
/usr/bin/defaults domains 2>/dev/null | /usr/bin/tr ',' '\n' | /usr/bin/grep -Ei 'muse|meta|facebook' || true
/usr/bin/find "$u/Library/Preferences" "$u/Library/Containers" "$u/Library/Group Containers" -maxdepth 4 \( -iname '*muse*' -o -iname '*meta*' \) -print 2>/dev/null || true
done
echo '[+] Persistence locations referencing Muse or Meta'
/usr/bin/grep -RIlEi 'muse|meta|facebook' /Library/LaunchAgents /Library/LaunchDaemons /Users/*/Library/LaunchAgents 2>/dev/null || true
echo '[+] Configuration profiles and PPPC context'
if [ $EUID -eq 0 ]; then
/usr/bin/profiles -P 2>/dev/null | /usr/bin/grep -Ei 'muse|meta|tcc|privacy|microphone|accessibility|screen' || true
else
echo 'run as root for profile payload detail'
fi
echo '[+] TCC read-only audit requires Full Disk Access for the terminal and appropriate authorization'
for db in '/Library/Application Support/com.apple.TCC/TCC.db' /Users/*/Library/Application\ Support/com.apple.TCC/TCC.db; do
[ -f "$db" ] || continue
echo "-- $db"
/usr/bin/sqlite3 "file:$db?mode=ro" "select service,client,auth_value,auth_reason,last_modified from access where client like '%Muse%' or client like '%meta%' or client like '%facebook%';" 2>/dev/null || true
done
echo '[+] Recent unified log references, noisy but useful during scoping'
/usr/bin/log show --last 24h --style compact --predicate 'process CONTAINS[c] "Muse" OR eventMessage CONTAINS[c] "Muse" OR eventMessage CONTAINS[c] "com.meta"' 2>/dev/null | /usr/bin/tail -200 || true
if [ "$MODE" = 'enforce' ]; then
echo '[+] Enforcement: resetting candidate assistant permissions. Confirm bundle IDs before production use.'
for b in $BUNDLES; do
for svc in Microphone SpeechRecognition Accessibility ListenEvent ScreenCapture SystemPolicyAllFiles SystemPolicyDocumentsFolder SystemPolicyDesktopFolder SystemPolicyDownloadsFolder AppleEvents; do
/usr/bin/tccutil reset "$svc" "$b" 2>/dev/null || true
done
done
echo '[+] Reset complete. Reopen Muse only after patching and validating configuration.'
else
echo '[+] Audit complete. Re-run with --enforce only after validating bundle IDs and user impact.'
fi
echo "[+] Evidence saved to $OUT"
Remediation
There is no vendor patch version, fixed build, CVE, CVSS score, or CISA deadline in the referenced item. Do not claim one internally. Use compensating controls until Meta publishes authoritative guidance, and treat the app as untrusted on endpoints that cannot prove current patch state.
- Inventory and isolate: use MDM to find all macOS devices with Muse installed. If the assistant is not business-required, remove it or block execution with application control until a fixed or vendor-verified build is available.
- Update from trusted channels only: patch Muse through the Mac App Store or Meta-managed updater after validating signatures and notarization. Record the build hash in change control. If Meta has not published a fix, do not rely on version numbers; reduce permissions instead.
- Least privilege for assistants: grant Muse only the microphone permission required for approved use cases. Avoid Accessibility, Input Monitoring, Screen Recording, Full Disk Access, broad Files and Folders, and cross-app AppleEvents automation unless there is a documented business need and compensating monitoring.
- Reset suspect grants: for potentially exposed users, reset candidate TCC permissions for the validated Muse bundle IDs, then require explicit re-consent after patching. Do not script resets against guessed bundle IDs in production without confirmation.
- Lock preference mutation: alert on non-Muse processes using
defaults,plutil,PlistBuddy,sqlite3, or shell runtimes against Muse domains and paths. Where possible, route changes through MDM and block local ad-hoc modification for standard users. - Egress control: enforce DNS and proxy policy for assistant destinations. Allow only approved Meta/Facebook assistant endpoints, certificate-verified update infrastructure, and known CDNs. Investigate Muse connections to newly seen domains, low-reputation hosts, direct IPs, or unexpected ports.
- Persistence sweep: because exploitation requires local execution, pair Muse-specific detections with standard macOS IR: launch agents and daemons, configuration profiles, unsigned binaries in user-writable paths, suspicious login items, unexpected browser extensions, and recent installs from outside approved channels.
- User workflow: instruct users to avoid dictating sensitive data into AI assistants until the device passes triage. For high-risk users, require a separate approved dictation path and prohibit microphone use for assistant apps during the investigation window.
- Evidence and escalation: if interception is suspected, preserve plists, container metadata, unified logs, EDR process trees, proxy logs, and DNS records. Rotate credentials that may have been dictated, treat prompts as potentially exposed, and scope for downstream account compromise.
- Governance: add AI assistants to the same approval workflow as browsers, password managers, and endpoint agents. Require a permission register, owner, data-flow diagram, update channel, logging plan, and revocation procedure before enterprise deployment.
The practical lesson for 2026 is that local malware does not need to defeat an AI model if it can mutate the assistant configuration underneath it. Defend the trust boundary: configuration integrity, TCC scope, signed update provenance, and tightly controlled egress.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.