Security researchers at Zenity have demonstrated zero-click hijacking of Anthropic's Claude and OpenAI's ChatGPT Atlas agentic AI browsers — and neither vendor has shipped a fix. The attack requires no user interaction beyond the AI agent doing its job: reading an email, summarizing a webpage, or browsing an X (Twitter) feed. Weaponized instructions embedded in otherwise benign content — an email body, a social media post — are ingested by the agent, interpreted as legitimate commands, and executed with the user's full session privileges.
Zenity reported the findings to Anthropic and OpenAI in late 2025 and early 2026. Both remain unpatched at the time of writing. This is not a theoretical risk: agentic AI browsers are being deployed inside enterprises right now, often outside IT's visibility, and they hold authenticated sessions to email, SaaS platforms, and internal tooling. A successful indirect prompt injection turns that agent into an insider — one that reads, clicks, exfiltrates, and acts on the attacker's behalf.
Defenders need to treat this as an active, unpatched vulnerability class with no vendor fix on the horizon. Mitigation today is architectural and detective, not a patch cycle.
Technical Analysis
Affected Products
- OpenAI ChatGPT Atlas — OpenAI's agentic browser, which can autonomously navigate, read, and act on web content
- Anthropic Claude — Claude's agentic/browser-use capabilities, including computer-use and web-browsing workflows that ingest untrusted content
- By extension, the technique class applies to any agentic AI browsing tool (Perplexity Comet and similar) that ingests untrusted content and acts on it without a hard trust boundary
Vulnerability Class — No CVE Assigned
No CVE identifier has been published for these findings, and no CVSS score exists. That absence is itself instructive: indirect prompt injection (also called cross-prompt injection) is not a memory-safety bug or a logic flaw in a specific function. It is a structural weakness in how large language models process mixed-trust content — the model cannot reliably distinguish data it was asked to read from instructions it was asked to follow. MITRE tracks the adjacent techniques under T1059 (Command and Scripting Interpreter) for the execution phase and the emerging ATLAS (Adversarial Threat Landscape for AI Systems) framework for the injection itself.
How the Attack Works
The Zenity attack chain, from a defender's perspective:
- Delivery (zero-click): The attacker plants malicious instructions in content the victim's AI agent will autonomously consume — a crafted email sitting in the inbox, a reply in an X thread, or text on a webpage. No link click, no attachment, no user consent prompt.
- Ingestion: The user (or a scheduled agent task) asks the AI browser to summarize email, triage a feed, or research a topic. The agent fetches the poisoned content as part of routine operation.
- Injection: Hidden or overt instructions in the content override the agent's original task. Classic payloads instruct the agent to retrieve sensitive data (other emails, files, session contents), navigate to attacker-controlled infrastructure, or take actions in authenticated SaaS sessions.
- Execution/Exfiltration: Because agentic browsers operate inside the victim's authenticated context — cookies, tokens, logged-in sessions — the injected instructions inherit full user privilege. Data is exfiltrated by rendering attacker URLs, drafting outbound messages, or invoking connected tools (MCP servers, extensions, local computer-use capabilities).
Exploitation requirements are minimal: the attacker needs the victim's agent to read attacker-controlled or attacker-influenced content. Email and social media are ideal delivery vectors precisely because agents are marketed to summarize them.
Exploitation Status
- Vendor acknowledgement: Findings reported to Anthropic and OpenAI (late 2025 / early 2026); no patch available
- Public PoC: Zenity has publicly demonstrated working exploitation; the technique is reproducible by any competent red team
- CISA KEV: Not listed (no CVE exists)
- In-the-wild exploitation: Not publicly confirmed at scale, but the barrier to weaponization is near zero — treat as exploitable today
Why This Is Different From Traditional Browser Exploits
There is no malformed input to signature, no crash to catch in a sandbox, and no anomalous process spawned by the renderer. The malicious payload is natural-language text, and the 'exploit' executes inside a legitimate, signed, vendor-distributed application using legitimate network channels. Perimeter controls and signature-based endpoint tools are structurally blind to it. Detection must focus on behavioral anomalies in the agent's actions: unexpected child processes, access to sensitive local data, and egress to infrastructure outside the vendor's service endpoints.
Detection & Response
The detections below target the post-injection behaviors a hijacked agent exhibits — the phases where indirect prompt injection intersects with observable host and network telemetry. Agent process names are included for ChatGPT Atlas (macOS/Windows desktop) and Claude Desktop; tune the process lists for the agentic tools actually deployed in your estate (Comet, Copilot-integrated Edge, MCP clients, etc.).
Sigma Rules
---
title: AI Agent Process Spawning Command Interpreter or Scripting Engine
id: 3f9c2a71-8b4e-4d5a-9c1e-7f2a3b4d5e6f
status: experimental
description: Detects agentic AI browser or assistant processes (ChatGPT Atlas, Claude, Comet) spawning command shells, scripting engines, or download utilities. Indirect prompt injection that reaches computer-use or local tool execution frequently manifests as the agent process launching cmd, PowerShell, curl, or osascript. Legitimate agent operation does not normally require shell invocation on the endpoint.
references:
- https://www.securityweek.com/zero-click-ai-browser-hacking-claude-and-chatgpt-atlas-hijacked-via-emails-x-posts/
- https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/01/29
tags:
- attack.execution
- attack.t1059
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\atlas.exe'
- '\chatgpt atlas.exe'
- '\claude.exe'
- '\comet.exe'
- '\openai.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\curl.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
- '\rundll32.exe'
condition: selection_parent and selection_child
falsepositives:
- AI-assisted developer workflows where the user has explicitly enabled local tool/terminal execution features
- First-run telemetry or update helpers bundled with the desktop client (verify signature and frequency)
level: high
---
title: AI Agent Process Accessing Browser Credential or Session Stores
id: 8e4b1d62-3a7f-4c8b-b2d9-5e6f7a8b9c0d
status: experimental
description: Detects agentic AI browser or assistant processes reading browser credential databases, cookie stores, or SSH key material. A hijacked agent instructed to exfiltrate secrets commonly targets Chrome Login Data, cookie stores, and .ssh directories. The agent application has no legitimate reason to read another browser's credential store directly.
references:
- https://www.securityweek.com/zero-click-ai-browser-hacking-claude-and-chatgpt-atlas-hijacked-via-emails-x-posts/
- https://attack.mitre.org/techniques/T1555/
- https://attack.mitre.org/techniques/T1539/
author: Security Arsenal
date: 2026/01/29
tags:
- attack.credential_access
- attack.t1555.003
- attack.t1539
logsource:
category: file_event
product: windows
detection:
selection_image:
Image|endswith:
- '\atlas.exe'
- '\chatgpt atlas.exe'
- '\claude.exe'
- '\comet.exe'
- '\openai.exe'
selection_target:
TargetFilename|contains:
- '\Google\Chrome\User Data\Default\Login Data'
- '\Google\Chrome\User Data\Default\Cookies'
- '\Google\Chrome\User Data\Default\Network\Cookies'
- '\Microsoft\Edge\User Data\Default\Login Data'
- '\BraveSoftware\Brave-Browser\User Data\'
- '\.ssh\id_rsa'
- '\.ssh\id_ed25519'
- '\AppData\Roaming\Mozilla\Firefox\Profiles\'
condition: selection_image and selection_target
falsepositives:
- Browser-import or migration workflows during first-run setup (should be one-time, correlatable with install events)
level: high
---
title: AI Agent Process Network Egress to Non-Vendor Infrastructure
id: 5c2d8f94-1e6a-4b3c-a7d2-9f0e1a2b3c4d
status: experimental
description: Detects agentic AI browser processes initiating outbound connections to destinations outside the vendor's known service domains. Indirect prompt injection exfiltrates data by having the agent browse to or POST to attacker-controlled hosts. Baseline vendor endpoints for your tenant first, then alert on deviations. Most effective as a high-signal hunt paired with DNS and proxy telemetry rather than a blanket block rule.
references:
- https://www.securityweek.com/zero-click-ai-browser-hacking-claude-and-chatgpt-atlas-hijacked-via-emails-x-posts/
- https://attack.mitre.org/techniques/T1041/
- https://attack.mitre.org/techniques/T1102/
author: Security Arsenal
date: 2026/01/29
tags:
- attack.exfiltration
- attack.t1041
- attack.t1102
logsource:
category: network_connection
product: windows
detection:
selection_image:
Image|endswith:
- '\atlas.exe'
- '\chatgpt atlas.exe'
- '\claude.exe'
- '\comet.exe'
- '\openai.exe'
selection_initiated:
Initiated: 'true'
filter_vendor:
DestinationHostname|endswith:
- '.openai.com'
- '.chatgpt.com'
- '.oaistatic.com'
- '.oaiusercontent.com'
- '.anthropic.com'
- '.claude.ai'
- '.perplexity.ai'
filter_cdn:
DestinationHostname|endswith:
- '.cloudflare.com'
- '.googleapis.com'
- '.azureedge.net'
condition: selection_image and selection_initiated and not 1 of filter_*
falsepositives:
- Agentic browsing to arbitrary websites IS the product function for Atlas/Comet — this rule is only viable for assistant processes with browsing disabled, or in environments where agents are policy-restricted to approved domains
- Redirect chains and embedded third-party content on legitimate pages
level: medium
Operational note on the third rule: agentic browsers legitimately visit arbitrary sites — that is the product. The network rule is high-value only where you have policy-restricted agent browsing to an allowlist, or where you deploy it against assistant clients with web access disabled. Deploy it as a hunting query first, baseline for two weeks, then convert validated outliers into alerts.
KQL — Microsoft Sentinel / Defender
// Hunt: AI agent processes spawning shells, script engines, or download utilities
// Covers Windows endpoints via Defender for Endpoint process telemetry
let AgentProcesses = dynamic(["atlas.exe", "chatgpt atlas.exe", "claude.exe", "comet.exe", "openai.exe"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe",
"mshta.exe", "curl.exe", "certutil.exe", "bitsadmin.exe", "rundll32.exe", "regsvr32.exe"]);
DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName in~ (AgentProcesses)
| where FileName in~ (SuspiciousChildren)
| project TimeGenerated, DeviceName, AccountName,
AgentProcess = InitiatingProcessFileName,
AgentCommandLine = InitiatingProcessCommandLine,
ChildProcess = FileName,
ChildCommandLine = ProcessCommandLine,
SHA256, ReportId
| sort by TimeGenerated desc;
// Hunt: AI agent processes connecting to rare / first-seen destinations
// Flags agent egress to destinations not seen from that device in the prior 30 days
let AgentProcesses = dynamic(["atlas.exe", "chatgpt atlas.exe", "claude.exe", "comet.exe", "openai.exe"]);
let KnownBaseline =
DeviceNetworkEvents
| where TimeGenerated between (ago(44d) .. ago(14d))
| where InitiatingProcessFileName in~ (AgentProcesses)
| summarize by RemoteUrl, RemoteIP;
DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName in~ (AgentProcesses)
| where RemoteUrl !has_any ("openai.com", "chatgpt.com", "anthropic.com", "claude.ai", "perplexity.ai")
| where RemoteUrl !in (KnownBaseline) and RemoteIP !in (KnownBaseline)
| summarize FirstSeen = min(TimeGenerated), ConnectionCount = count(),
Ports = make_set(RemotePort), IPs = make_set(RemoteIP)
by DeviceName, InitiatingProcessFileName, RemoteUrl
| sort by ConnectionCount desc;
Run the second query as a scheduled analytics rule at low frequency (every 4–6 hours) rather than near-real-time; first-seen destinations from agent processes are a leading indicator of injected browsing to attacker infrastructure, but they need the 30-day baseline to stay actionable.
Velociraptor VQL
-- Hunt for child processes spawned by agentic AI browsers/assistants
-- and identify unsigned or script-based descendants indicative of
-- prompt-injection-driven local execution.
LET agents <= SELECT Pid, Name, Exe
FROM pslist()
WHERE Name =~ '(?i)(atlas|claude|comet|openai|chatgpt)'
SELECT a.Name AS AgentName,
a.Pid AS AgentPid,
a.Exe AS AgentPath,
p.Pid AS ChildPid,
p.Name AS ChildName,
p.Exe AS ChildPath,
p.CommandLine AS ChildCommandLine,
p.Username AS ChildUser,
p.CreateTime AS ChildCreated
FROM pslist() AS p
JOIN agents AS a ON p.Ppid = a.Pid
WHERE p.Name =~ '(?i)(cmd|powershell|pwsh|wscript|cscript|mshta|curl|certutil|bitsadmin|rundll32|osascript|bash|sh)'
For macOS endpoints running Atlas or Claude Desktop, extend the hunt with a second artifact querying pslist() for parent chains rooted at the app bundle (/Applications/ChatGPT Atlas.app, /Applications/Claude.app) and flag descendants matching osascript, zsh, or curl — computer-use exploitation on macOS typically routes through AppleScript or shell invocation.
Remediation / Hardening Script
No patch exists. This PowerShell script performs three defensive actions on Windows endpoints: (1) inventories installed agentic AI browsers for your asset register, (2) applies outbound firewall rules restricting AI agent processes to vendor service domains only (enforced via program rule — pair with DNS policy for full effect), and (3) audits whether local tool/terminal execution capabilities are enabled. Review before enforcing in production; the firewall block is intentionally scoped and reversible.
# Security Arsenal - Agentic AI Browser Exposure Audit & Containment
# Run elevated. Test in a pilot OU before broad enforcement.
# -Mode Audit : inventory only, no changes
# -Mode Enforce : applies outbound restriction rules for AI agent processes
param([ValidateSet("Audit","Enforce")][string]$Mode = "Audit")
$AgentPaths = @(
"$env:LOCALAPPDATA\Programs\ChatGPT Atlas\atlas.exe",
"$env:LOCALAPPDATA\Programs\Claude\claude.exe",
"$env:LOCALAPPDATA\Programs\Comet\comet.exe",
"$env:ProgramFiles\OpenAI\ChatGPT Atlas\atlas.exe"
)
# --- Step 1: Inventory installed agentic AI browsers ---
Write-Output "=== Agentic AI Browser Inventory ==="
$found = @()
foreach ($p in $AgentPaths) {
if (Test-Path $p) {
$ver = (Get-Item $p).VersionInfo.ProductVersion
$found += $p
Write-Output ("FOUND: {0} Version: {1}" -f $p, $ver)
}
}
# Broader sweep for non-standard install locations
Get-ChildItem "$env:LOCALAPPDATA\Programs","$env:ProgramFiles" -ErrorAction SilentlyContinue |
Where-Object { $_.Name -match '(?i)(atlas|claude|comet|openai)' } |
ForEach-Object { Write-Output ("DIR: {0}" -f $_.FullName) }
# --- Step 2: Flag running agent processes with active network sessions ---
Write-Output "`n=== Active Agent Processes with Network Sessions ==="
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
if ($proc -and $proc.ProcessName -match '(?i)(atlas|claude|comet|openai)') {
Write-Output ("{0} (PID {1}) -> {2}:{3}" -f $proc.ProcessName, $_.OwningProcess, $_.RemoteAddress, $_.RemotePort)
}
}
# --- Step 3 (Enforce only): Restrict agent process outbound traffic ---
# Default-deny egress for agent executables; re-allow ONLY vendor service
# endpoints via companion DNS/proxy policy. Reversible via -Remove switch logic.
if ($Mode -eq "Enforce") {
foreach ($p in $found) {
$ruleName = "SecArsenal-AIAgent-EgressBlock - " + (Split-Path $p -Leaf)
if (-not (Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName $ruleName -Direction Outbound `
-Program $p -Action Block -Profile Any `
-Description "Blocks direct egress for agentic AI browser pending prompt-injection remediation (Zenity, Jan 2026). Vendor access routed via inspected proxy." | Out-Null
Write-Output ("APPLIED: {0}" -f $ruleName)
}
}
Write-Output "`nEnforcement applied. Route agent traffic through an inspected proxy with an"
Write-Output "allowlist for openai.com / chatgpt.com / anthropic.com / claude.ai only."
Write-Output "Rollback: Get-NetFirewallRule -DisplayName 'SecArsenal-AIAgent-*' | Remove-NetFirewallRule"
}
# --- Step 4: Report local tool-execution surfaces (MCP config, computer-use) ---
Write-Output "`n=== Local Tool Integration Config (MCP / computer-use) ==="
$mcpPaths = @(
"$env:APPDATA\Claude\claude_desktop_config.json",
"$env:APPDATA\Anthropic\Claude\claude_desktop_config.json"
)
foreach ($m in $mcpPaths) {
if (Test-Path $m) {
Write-Output ("MCP CONFIG: {0}" -f $m)
Get-Content $m | Select-String -Pattern 'command|args|url' | ForEach-Object { Write-Output (" {0}" -f $_.Line.Trim()) }
}
}
Key point on Step 3: program-level firewall blocking is a blunt instrument — agents will fail closed. That is the intent. If your organization cannot tolerate full blocking, substitute an inspected-proxy architecture where agent traffic transits a TLS-inspecting egress point with a strict vendor allowlist, and log everything else for the hunt queries above.
Remediation
There is no patch, no hotfix, and no vendor workaround formally published as of this writing. Remediation is therefore a risk-management exercise, not an update deployment:
1. Establish inventory and ownership (this week). You cannot govern what you haven't counted. Use the audit script above (and your MDM/software inventory on macOS) to enumerate every agentic AI browser and assistant in the estate, including shadow installations. Assign each deployment a business owner or remove it.
2. Constrain agent scope by policy.
- Disable autonomous browsing of email and social feeds where the product permits scoping. These are the two confirmed delivery vectors in the Zenity research.
- Disable local tool execution (computer-use, terminal access, MCP servers with shell capability) for any agent that ingests untrusted content. The combination of untrusted content ingestion + local execution is the dangerous one; either capability alone is substantially lower risk.
- Where scoping controls don't exist in the product, the control is the firewall/proxy architecture described above.
3. Segregate agent identities and sessions. Deploy agents under dedicated, least-privilege accounts — not users' daily-driver sessions with access to email, file shares, and SaaS admin consoles. A hijacked agent operating under a scoped service identity with read-only access to a single mailbox is a containment success story; the same agent under a global admin's session is a breach.
4. Apply data-loss controls to agent egress. Extend DLP and CASB policies to agent process traffic. Injected agents exfiltrate by browsing — rendering attacker URLs with secrets in the query string, or POSTing to attacker endpoints. Inspected egress with vendor allowlisting breaks this channel.
5. User guidance for the interim. Until vendors ship fixes, instruct users of approved AI browsers to: never direct agents at unscreened inboxes or social feeds containing unknown senders; treat any unexpected agent-initiated action (a draft email, a navigation, a file access) as a reportable security event; and disconnect agents from sensitive accounts when not in active use.
6. Track vendor advisories. Monitor Anthropic's security advisories (anthropic.com/security) and OpenAI's security bulletins (openai.com/security) for remediation guidance, and watch for CISA or NIST AI-risk publications on indirect prompt injection. When fixes ship, validate them — mitigations for prompt injection have historically been probabilistic (model-level refusals) rather than deterministic (architectural separation), and red teams bypass model-level guardrails routinely. Plan for compensating controls to remain in place even after a patch.
7. Test your own exposure. This attack class is reproducible with public research. Have your red team — or ours — attempt controlled indirect prompt injection against your sanctioned agent deployments before an uncontrolled adversary does. That is currently the only way to measure whether your compensating controls actually hold.
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.