A threat actor has been caught using multiple infostealer families to collect session information and access Claude accounts belonging to an unknown number of users, according to recent reporting. This is not an Anthropic platform compromise — the breach happens on the endpoint. Infostealers installed on user machines scrape browser cookies, authentication tokens, and locally stored credentials, then replay valid Claude sessions from attacker-controlled infrastructure.
This matters far beyond personal chat history. Organizations increasingly route sensitive material through LLM platforms: source code, internal architecture diagrams, incident reports, customer data pasted into prompts, and — critically — Anthropic API keys and Claude Code OAuth tokens sitting in developer home directories. A stolen Claude session gives an attacker read access to conversation history, the ability to impersonate the user, and potentially a pivot into workspace data, connected integrations, and billing consoles.
If your developers, analysts, or executives use Claude — and in 2026, they do — this is your incident to hunt for today.
Technical Analysis
What Happened
Per the Dark Reading report, a threat actor leveraged a variety of infostealer malware to collect session information and subsequently access Claude accounts. The victim count remains unknown. No Anthropic vulnerability is implicated — the attack vector is endpoint compromise followed by session token replay, a technique that bypasses password authentication entirely because the attacker presents an already-authenticated session cookie or token.
Attack Chain (Defender's View)
- Delivery: Infostealers typically arrive via malvertising, trojanized software (cracked tools, fake AI utilities, poisoned npm/PyPI packages), phishing attachments, or SEO-poisoned downloads.
- Execution: The stealer runs in user context — no admin required. Many families (in the Lumma/RedLine/Vidar class) execute from
%APPDATA%,%TEMP%, or%LOCALAPPDATA%with randomized filenames. - Collection: The malware reads Chromium-based browser credential stores — the
CookiesSQLite database,Login Data, and theLocal Statefile containing the DPAPI/Keychain master key material — along with developer credential files. For Claude users, targets of interest include:- Browser session cookies for
claude.aiandconsole.anthropic.com - Claude Code OAuth tokens stored at
%USERPROFILE%\.claude\.credentials.json(Windows) or~/.claude/.credentials.json(macOS/Linux) - Anthropic API keys in environment files,
.env, shell profiles, or config files
- Browser session cookies for
- Exfiltration: Stolen data is staged, compressed, and sent to attacker C2 — commonly over HTTPS to Telegram bots, Cloudflare-fronted domains, or bulletproof hosts.
- Replay: The attacker imports the stolen session cookie into a clean browser profile or replays the OAuth token against Anthropic APIs, inheriting the victim's authenticated session. No password, no MFA prompt — the token is the authentication.
Why Session Theft Defeats Traditional Controls
Session hijacking (MITRE ATT&CK T1539 — Steal Web Session Cookie, T1552.001 — Credentials In Files) renders password resets alone useless. Until the session is invalidated or the token expires, the attacker retains access. Anthropic sessions and Claude Code OAuth tokens can persist well beyond a password change, and API keys persist indefinitely until rotated. This is why containment must explicitly include session revocation and key rotation, not just credential reset.
Exploitation Status
Confirmed active in-the-wild campaign. Anthropic accounts are being accessed by unauthorized parties using stolen session material. This is not theoretical. Treat any host with infostealer telemetry and Claude usage as a suspected account compromise until proven otherwise.
Detection & Response
The detection surface here is the endpoint behavior, not Anthropic's infrastructure. Hunt for the steal, the staging, and the replay.
Sigma Rules
The following rules target the two highest-fidelity behaviors: non-browser processes touching browser credential stores, and unexpected access to Claude Code credential files. Tune the legitimate-process exclusions to your environment before deployment.
---
title: Non-Browser Process Accessing Chromium Credential Stores
id: 4f8c2a71-9b3d-4e6f-a1c2-7d5e8f0a3b41
status: experimental
description: Detects processes other than the browser itself reading Chromium credential databases (Cookies, Login Data, Local State). A hallmark of infostealer collection activity targeting session cookies such as those used for claude.ai.
references:
- https://www.darkreading.com/cyberattacks-data-breaches/anthropic-users-infostealer-attacks-session-thefts
- https://attack.mitre.org/techniques/T1539/
- https://attack.mitre.org/techniques/T1555/003/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.credential_access
- attack.t1539
- attack.t1555.003
logsource:
category: file_event
product: windows
detection:
selection_files:
TargetFilename|contains:
- '\Google\Chrome\User Data\'
- '\Microsoft\Edge\User Data\'
- '\BraveSoftware\Brave-Browser\User Data\'
TargetFilename|endswith:
- '\Cookies'
- '\Login Data'
- '\Local State'
- '\Network\Cookies'
filter_browsers:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
condition: selection_files and not filter_browsers
falsepositives:
- Legitimate backup or EDR software reading browser profiles (exclude by signer)
- Enterprise password managers with browser integration
level: high
---
title: Suspicious Access to Claude Code Credential File
id: 8e2d5b93-1c4a-4f7e-b2d3-9a6c1e0f5b82
status: experimental
description: Detects processes other than Claude Code itself accessing the Claude Code OAuth credential store (.claude/.credentials.json). Infostealers harvesting AI platform tokens target this file to replay authenticated sessions against Anthropic APIs.
references:
- https://www.darkreading.com/cyberattacks-data-breaches/anthropic-users-infostealer-attacks-session-thefts
- https://attack.mitre.org/techniques/T1552/001/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.credential_access
- attack.t1552.001
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith: '\.claude\.credentials.json'
filter_legit:
Image|endswith:
- '\node.exe'
- '\claude.exe'
- '\claude-code.exe'
condition: selection and not filter_legit
falsepositives:
- Developers inspecting or backing up their own credential files
- Asset inventory or DLP agents scanning user home directories
level: high
---
title: Process Execution from User-Writable Staging Directories
id: 2b7f4e16-8d5c-4a9b-c3e1-6f2d8a0c4e97
status: experimental
description: Detects executable launches from infostealer staging locations commonly used after malvertising or trojanized download delivery. Frequently the first observable of stealer families that harvest browser sessions and developer tokens.
references:
- https://www.darkreading.com/cyberattacks-data-breaches/anthropic-users-infostealer-attacks-session-thefts
- https://attack.mitre.org/techniques/T1204/002/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.execution
- attack.t1204.002
logsource:
category: process_creation
product: windows
detection:
selection_path:
Image|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\Downloads\'
Image|endswith: '.exe'
selection_parent:
ParentImage|endswith:
- '\explorer.exe'
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
filter_known:
Image|contains:
- '\AppData\Local\Microsoft\Teams\'
- '\AppData\Local\slack\'
- '\AppData\Local\Programs\'
condition: selection_path and selection_parent and not filter_known
falsepositives:
- User-installed per-user applications (Zoom, Discord installers)
- Software updates delivered through browser downloads
level: medium
KQL — Microsoft Sentinel / Defender
This query hunts for non-browser processes touching Chromium credential stores or the Claude Code credential file — the two concrete collection behaviors behind this campaign. Run it across your fleet with a 14-day lookback.
let BrowserProcs = dynamic(["chrome.exe", "msedge.exe", "brave.exe", "firefox.exe", "msedgewebview2.exe"]);
let ClaudeProcs = dynamic(["node.exe", "claude.exe", "claude-code.exe", "code.exe"]);
DeviceFileEvents
| where TimeGenerated > ago(14d)
| where FolderPath has_any ("\\Google\\Chrome\\User Data\\", "\\Microsoft\\Edge\\User Data\\", "\\BraveSoftware\\Brave-Browser\\User Data\\")
and (FolderPath endswith "\\Cookies" or FolderPath endswith "\\Login Data" or FolderPath endswith "\\Local State" or FolderPath has "\\Network\\Cookies")
or FolderPath endswith "\\.claude\\.credentials.json"
| extend IsBrowserStoreAccess = (FolderPath has "User Data") and not (InitiatingProcessFileName in~ (BrowserProcs)),
IsClaudeCredAccess = (FolderPath endswith ".credentials.json") and not (InitiatingProcessFileName in~ (ClaudeProcs))
| where IsBrowserStoreAccess or IsClaudeCredAccess
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessSHA256, FolderPath, ActionType, AccountName
| sort by TimeGenerated desc
Follow up any hit with process-tree expansion and outbound network review for the host — infostealers exfiltrate within seconds of collection:
// Outbound connections from suspect processes within 10 minutes of credential-store access
let SuspectDevices = DeviceFileEvents
| where TimeGenerated > ago(14d)
| where (FolderPath endswith "\\Cookies" or FolderPath endswith "\\Login Data" or FolderPath endswith "\\.claude\\.credentials.json")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "brave.exe", "node.exe")
| summarize FirstAccess=min(TimeGenerated) by DeviceName, InitiatingProcessFileName, InitiatingProcessSHA256;
DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| join kind=inner SuspectDevices on DeviceName, $left.InitiatingProcessFileName == $right.InitiatingProcessFileName
| where TimeGenerated between (FirstAccess .. FirstAccess + 10m)
| where RemoteIPType == "Public"
| project DeviceName, InitiatingProcessFileName, TimeGenerated, RemoteUrl, RemoteIP, RemotePort
| sort by TimeGenerated asc
Velociraptor VQL
Use this hunt artifact to sweep endpoints for processes holding or reading Claude credential material and browser session databases, plus stealer staging artifacts in user-writable directories.
-- Hunt: infostealer indicators targeting Claude sessions and browser credential stores
-- Looks for (a) non-browser processes with the Claude credential file path in their command line,
-- (b) recently created executables in stealer staging directories,
-- (c) running processes executing from user-writable paths.
-- (a) Processes referencing Claude credentials
SELECT Pid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
WHERE CommandLine =~ 'credentials\\.json|claude\\.ai|console\\.anthropic'
AND Name !~ 'claude|node'
-- (b) Recently dropped executables in infostealer staging locations
SELECT FullPath, Size, Mtime, Ctime
FROM glob(globs=[
'C:/Users/*/AppData/Local/Temp/*.exe',
'C:/Users/*/AppData/Roaming/*.exe',
'C:/Users/*/Downloads/*.exe'
])
WHERE Mtime > now() - 1209600
-- (c) Claude Code credential file presence and last modification (timeline for possible theft)
SELECT FullPath, Size, Mtime
FROM glob(globs=['C:/Users/*/.claude/.credentials.json'])
Correlate any .credentials.json modification timestamp that doesn't line up with legitimate Claude Code usage against process execution telemetry from the same window.
Remediation & Verification Script
Run this PowerShell script on suspected-compromised Windows endpoints to identify infostealer staging artifacts, enumerate exposure of Claude credential material, and force the local revocation posture. It does not replace Anthropic-side session revocation — that must be done from the account console.
# Claude Session Theft Triage Script — Security Arsenal IR
# Run as the affected user (and again as admin for full file visibility)
$Report = @()
# 1. Locate Claude Code credential files and report last-write time
Write-Host "[+] Enumerating Claude credential stores..." -ForegroundColor Cyan
$credFiles = Get-ChildItem -Path "C:\Users" -Recurse -Filter ".credentials.json" -ErrorAction SilentlyContinue |
Where-Object { $_.FullName -like "*\.claude*" }
foreach ($f in $credFiles) {
$Report += [PSCustomObject]@{
Type = 'ClaudeCredentialFile'; Path = $f.FullName
LastWrite = $f.LastWriteTime; Size = $f.Length
}
Write-Host " FOUND: $($f.FullName) (LastWrite: $($f.LastWriteTime))" -ForegroundColor Yellow
}
# 2. Flag unsigned executables in infostealer staging directories modified in last 14 days
Write-Host "[+] Scanning staging directories for recent unsigned executables..." -ForegroundColor Cyan
$staging = @("$env:TEMP", "$env:APPDATA", "$env:LOCALAPPDATA\Temp", "$env:USERPROFILE\Downloads")
foreach ($dir in $staging) {
Get-ChildItem -Path $dir -Filter *.exe -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-14) } |
ForEach-Object {
$sig = Get-AuthenticodeSignature $_.FullName
if ($sig.Status -ne 'Valid') {
$Report += [PSCustomObject]@{
Type = 'UnsignedRecentExe'; Path = $_.FullName
LastWrite = $_.LastWriteTime; Size = $_.Length
}
Write-Host " SUSPICIOUS: $($_.FullName) — signature: $($sig.Status)" -ForegroundColor Red
}
}
}
# 3. Check running processes executing from user-writable paths
Write-Host "[+] Checking running processes in user-writable paths..." -ForegroundColor Cyan
Get-Process | Where-Object {
$_.Path -and ($_.Path -like "*\AppData\Local\Temp\*" -or $_.Path -like "*\AppData\Roaming\*")
} | ForEach-Object {
$Report += [PSCustomObject]@{
Type = 'RunningFromStaging'; Path = $_.Path
LastWrite = $null; Size = $null
}
Write-Host " RUNNING: $($_.Path) (PID $($_.Id))" -ForegroundColor Red
}
# 4. Check for Anthropic API keys exposed in user environment variables
Write-Host "[+] Checking for exposed Anthropic API keys..." -ForegroundColor Cyan
$envVars = [Environment]::GetEnvironmentVariables('User')
foreach ($k in $envVars.Keys) {
if ($k -match 'ANTHROPIC|CLAUDE') {
Write-Host " EXPOSED KEY VARIABLE: $k — rotate this key immediately" -ForegroundColor Red
}
}
# 5. Export findings
$out = "$env:USERPROFILE\Desktop\claude-session-triage-$(Get-Date -Format 'yyyyMMdd-HHmmss').csv"
$Report | Export-Csv -Path $out -NoTypeInformation
Write-Host "`n[+] Report written to $out" -ForegroundColor Green
Write-Host "`n[!] NEXT STEPS (manual):" -ForegroundColor Magenta
Write-Host " 1. At claude.ai: Settings > log out of all other sessions"
Write-Host " 2. At console.anthropic.com: rotate ALL API keys"
Write-Host " 3. Re-run 'claude login' to re-issue Claude Code OAuth tokens"
Write-Host " 4. Reset the account password and review login email alerts"
Write-Host " 5. Isolate the endpoint if unsigned/recent EXEs were found — full IR triage required"
Remediation
For Affected Users (Containment — do these in order)
- Revoke all sessions. In Claude settings, log out of all devices/sessions. This invalidates stolen browser cookies. A password change alone does not kill active sessions on most platforms — explicit session revocation is mandatory.
- Rotate every Anthropic API key at
console.anthropic.com. Assume any key stored on a compromised host (.envfiles, environment variables, config files) is burned. - Re-issue Claude Code credentials by re-authenticating (
claude login) after the host is cleaned. The old OAuth tokens in.credentials.jsonmust be treated as compromised. - Clean the endpoint before re-authenticating. Re-logging in from an infected machine simply hands the attacker a fresh session. Eradicate first, re-credential second.
- Review account activity for unfamiliar conversations, workspace changes, new API keys created by the attacker, or billing anomalies. Anthropic sends login notification emails — review them for unrecognized access.
For Security Teams (Organizational Controls)
- Hunt retroactively. Run the KQL and Sigma detections above across a minimum 30-day lookback. Infostealer logs are frequently sold and replayed weeks after initial collection — a stealer hit from last month may be a Claude session hijack this week.
- Inventory AI platform usage. You cannot protect sessions you don't know exist. Identify which users and service accounts hold Claude, ChatGPT, and other LLM platform credentials — especially Claude Code OAuth tokens and API keys in CI/CD pipelines.
- Enforce browser hygiene controls. Chrome's App-Bound Encryption binds cookie encryption keys to the browser process, defeating many commodity stealers' cookie decryption. Verify it's not disabled by policy, and keep browsers current.
- Move secrets out of files. API keys belong in a secrets manager or vault, not
.envfiles or user environment variables. For Claude Code specifically, ensure.credentials.jsonACLs restrict access to the owning user only. - Deploy EDR with credential-store access monitoring if you haven't — the browser-credential-access telemetry above is your highest-fidelity tripwire for this entire attack class.
- Block stealer C2 egress. Commodity infostealers exfiltrate to Telegram API endpoints and newly registered domains. Alert on
api.telegram.orgtraffic from non-chat processes and egress to domains younger than 30 days. - Educate on the delivery vector. Trojans masquerading as AI tools, browser extensions, and cracked software are the dominant infostealer delivery mechanism. Your developers are the target demographic.
The Bigger Lesson
AI platform accounts have quietly become high-value identity assets. They hold conversation history containing sensitive business context, they're tied to billing and API infrastructure, and their session tokens live in exactly the places infostealers have been harvesting for years. Add LLM platform sessions to your identity threat model, your infostealer IR playbook, and your offboarding checklist — because the attackers already have.
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.