A growing volume of infostealer logs circulating on criminal marketplaces contains something defenders haven't traditionally prioritized: replayable session tokens and API keys for AI platforms — including services from Google, Anthropic, and other major model providers. Unlike passwords, these artifacts don't trigger MFA challenges when replayed. A stolen session cookie or bearer token is the authenticated session, and a stolen API key never had MFA to begin with.
This is not a theoretical exposure. Information stealers like Lumma Stealer (LummaC2) and Vidar are explicitly configured to harvest browser credential stores, session cookies, tokens, and API keys from compromised endpoints. As enterprises embed LLM tooling into developer workflows, analyst desktops, and automation pipelines, AI platform credentials have become a high-value, low-friction target. Attackers are now mining stealer logs — often purchased for a few dollars per log on Telegram marketplaces — for these tokens and reselling or abusing them for unauthorized model access, data exfiltration from AI chat history, and pivoting into corporate tenants.
If your developers authenticate to AI platforms from managed endpoints, assume those sessions are in scope for stealer harvesting. This post breaks down the attack chain, provides deployable detections, and lays out a remediation playbook.
Technical Analysis
What's Being Stolen
Modern infostealers enumerate and extract:
- Browser session cookies and tokens — Chrome, Edge, Firefox, and Brave cookie databases (
CookiesSQLite files under%LOCALAPPDATA%\Google\Chrome\User Data\Default\Network\and equivalents). Session tokens forconsole.anthropic.com,gemini.google.com,makersuite.google.com,platform.openai.com, and similar domains are replayable until expiry or revocation. - API keys stored on disk —
.envfiles, shell profiles,~/.config/directories, IDE settings, and application config files frequently containANTHROPIC_API_KEY,GOOGLE_API_KEY,OPENAI_API_KEY, and provider-specific secrets in plaintext. - Credential manager contents — Windows DPAPI-protected stores and browser password vaults, decrypted in-memory using the victim user's context.
- Developer artifacts — SSH keys, cloud CLI credentials (
~/.aws,~/.azure,~/.config/gcloud), and browser-stored OAuth tokens that compound the blast radius.
Attack Chain
- Initial execution — Stealer delivered via malvertising, cracked software, SEO-poisoned downloads, or phishing. Lumma and Vidar typically execute as short-lived processes: harvest, package, exfiltrate, self-delete.
- Browser data theft — The stealer reads the browser's
Local Statefile to recover the DPAPI-encrypted AES master key, then decrypts the cookie database. Chrome's app-bound encryption (introduced in Chrome 127) raised the bar, but stealer families shipped bypasses within weeks, and Firefox/Edge stores remain straightforward targets. - Exfiltration — Data is zipped and POSTed to C2 infrastructure or Telegram bots, often over HTTPS to blend with legitimate traffic.
- Log monetization — Logs are sold in bulk on stealer marketplaces. Buyers grep for high-value domains — and AI platform sessions are now explicitly searched and resold as "stolen keys."
- Replay — The attacker imports session cookies (tools and browser extensions make this trivial) or calls the API directly with the stolen key. No MFA prompt fires because the session is already authenticated. From the provider's perspective, this is a legitimate, logged-in user.
Why This Bypasses MFA
MFA protects the authentication event. Session tokens are issued after that event succeeds. Replaying a valid session cookie skips authentication entirely. API keys are worse: they are bearer credentials by design — possession equals authorization, with no device binding, no MFA, and often no IP restriction unless the customer configured one.
Exploitation Status
- Confirmed active abuse: Threat actors are observed harvesting and monetizing AI platform tokens from stealer logs. This is in-the-wild, commoditized activity — not a proof of concept.
- No CVE is associated with this campaign; it is credential-theft tradecraft, not a software vulnerability. There is no patch — the mitigations are architectural and operational.
Detection & Response
The most reliable detections target the stealer's harvest behavior, not the downstream token replay (which looks like normal authenticated traffic unless you correlate impossible travel or anomalous API usage). Focus endpoint telemetry on browser store access, DPAPI abuse, and staging behavior.
---
title: Suspicious Access to Browser Cookie and Credential Stores
id: 3f8a1c42-7b9d-4e21-a6f5-2c8d9e0b1a34
status: experimental
description: Detects non-browser processes accessing browser cookie databases, Login Data, or Local State files — consistent with infostealer credential harvesting (Lumma, Vidar, RedLine TTPs).
references:
- https://attack.mitre.org/techniques/T1555/003/
- https://attack.mitre.org/techniques/T1539/
author: Security Arsenal
date: 2026/09/15
tags:
- attack.credential_access
- attack.t1555.003
- attack.t1539
logsource:
category: file_access
product: windows
detection:
selection_paths:
TargetFilename|contains:
- '\AppData\Local\Google\Chrome\User Data\'
- '\AppData\Local\Microsoft\Edge\User Data\'
- '\AppData\Roaming\Mozilla\Firefox\Profiles\'
- '\AppData\Local\BraveSoftware\Brave-Browser\User Data\'
selection_files:
TargetFilename|endswith:
- '\Cookies'
- '\Login Data'
- '\Local State'
- 'cookies.sqlite'
- 'logins.json'
- 'key4.db'
filter_browsers:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\brave.exe'
condition: selection_paths and selection_files and not filter_browsers
falsepositives:
- Endpoint backup agents and EDR processes legitimately scanning user profiles
- Password managers with browser integration (rare direct file access)
level: high
---
title: DPAPI Master Key Access by Non-System Process
id: 9c2e5f18-4a6b-4d83-b1e7-5f3a8c02d946
status: experimental
description: Detects processes accessing DPAPI master key files, a prerequisite step stealers use to decrypt browser cookie and credential stores.
references:
- https://attack.mitre.org/techniques/T1555/004/
author: Security Arsenal
date: 2026/09/15
tags:
- attack.credential_access
- attack.t1555.004
logsource:
category: file_access
product: windows
detection:
selection:
TargetFilename|contains:
- '\AppData\Roaming\Microsoft\Protect\'
filter_legit:
Image|endswith:
- '\svchost.exe'
- '\lsass.exe'
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\explorer.exe'
condition: selection and not filter_legit
falsepositives:
- Legitimate applications using DPAPI (Azure CLI, some VPN clients) — tune against your software inventory
level: medium
---
title: API Key and .env File Access by Non-Development Process
id: 5d1b7e93-8c4a-4f29-a3d6-7e2b9c14f058
status: experimental
description: Detects access to common secret-bearing files (.env, cloud CLI credentials, AI tool config) by processes that should never read them — indicative of stealer file-grabbing routines.
references:
- https://attack.mitre.org/techniques/T1552/001/
author: Security Arsenal
date: 2026/09/15
tags:
- attack.credential_access
- attack.t1552.001
logsource:
category: file_access
product: windows
detection:
selection:
TargetFilename|endswith:
- '\.env'
- '\.env.local'
- '\credentials'
- '\config.json'
TargetFilename|contains:
- '\.aws\'
- '\.azure\'
- '\.config\gcloud\'
- '\.anthropic\'
- '\.openai\'
filter_dev:
Image|endswith:
- '\code.exe'
- '\devenv.exe'
- '\idea64.exe'
- '\node.exe'
- '\python.exe'
- '\git.exe'
- '\cmd.exe'
- '\powershell.exe'
condition: selection and not filter_dev
falsepositives:
- Build tools and CI agents not covered by the filter list — extend filters per environment
level: high
// Hunt: Non-browser processes touching browser credential/cookie stores (Defender for Endpoint)
// Tune KnownGoodProcesses to your environment before production deployment.
let BrowserStores = dynamic(["\\Cookies", "\\Login Data", "\\Local State", "cookies.sqlite", "logins.json", "key4.db"]);
let KnownGoodProcesses = dynamic(["chrome.exe", "msedge.exe", "firefox.exe", "brave.exe", "MsMpEng.exe", "OneDrive.exe"]);
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FolderPath has_any ("\\Google\\Chrome\\User Data\\", "\\Microsoft\\Edge\\User Data\\", "\\Mozilla\\Firefox\\Profiles\\", "\\Brave-Browser\\User Data\\")
| where FileName has_any (BrowserStores)
| where not(InitiatingProcessFileName has_any (KnownGoodProcesses))
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessSHA256, FileName, FolderPath, ReportId
| summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), FilesAccessed = make_set(FileName, 20)
by DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessSHA256
| order by LastSeen desc;
// Hunt: Outbound connections from processes that recently accessed browser stores — potential stealer exfil
let SuspectProcesses =
DeviceFileEvents
| where TimeGenerated > ago(24h)
| where FolderPath has_any ("\\User Data\\Default\\Network\\Cookies", "\\Protect\\")
| where not(InitiatingProcessFileName in~ ("chrome.exe", "msedge.exe", "svchost.exe", "lsass.exe"))
| summarize by DeviceId, InitiatingProcessFileName, InitiatingProcessSHA256;
DeviceNetworkEvents
| where TimeGenerated > ago(24h)
| where DeviceId in (SuspectProcesses | project DeviceId)
| where InitiatingProcessFileName in (SuspectProcesses | project InitiatingProcessFileName)
| where RemotePort in (443, 80) and not(RemoteUrl has_any ("microsoft.com", "windows.com", "google.com"))
| summarize ConnectionCount = count(), RemoteTargets = make_set(RemoteUrl, 25), RemoteIPs = make_set(RemoteIP, 25)
by DeviceName, InitiatingProcessFileName, InitiatingProcessSHA256
| order by ConnectionCount desc;
-- Hunt for infostealer staging artifacts and browser-store access indicators
-- Combines: recent process execution matching stealer patterns, suspicious files in Temp/AppData,
-- and ZIP archives consistent with stealer exfil staging.
-- Part 1: Processes with stealer-like characteristics (short-lived, odd paths, random names)
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Exe =~ '(?i)(\\Temp\\|\\AppData\\Local\\Temp\\|\\Users\\Public\\|\\ProgramData\\[^\\]+\.exe$)'
AND NOT Exe =~ '(?i)(setup|installer|update|7z|winrar)'
-- Part 2: Stealer staging archives in user temp directories (common Lumma/Vidar pattern)
SELECT FullPath, Size, Mtime, Atime
FROM glob(globs='C:\\Users\\*\\AppData\\Local\\Temp\\*.zip', accessor='ntfs')
WHERE Mtime > Now() - 86400*7
-- Part 3: Processes with established outbound connections from non-standard binary paths
SELECT Pid, Name, Exe, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE Status =~ 'ESTABLISHED'
AND RemotePort in (80, 443)
AND Exe =~ '(?i)(\\Temp\\|\\Users\\Public\\|\\AppData\\Roaming\\[a-z0-9]{6,}\\)'
# Infostealer exposure assessment: enumerate plaintext AI API keys and assess
# browser-store exposure across a Windows endpoint. Run elevated in a PS remoting
# session or deploy via your RMM for fleet-wide posture checks.
$findings = @()
# 1. Scan user profiles for plaintext AI provider keys in common locations
$keyPatterns = @('ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_API_KEY', 'GEMINI_API_KEY', 'sk-ant-', 'sk-proj-')
$searchRoots = Get-ChildItem 'C:\Users' -Directory -ErrorAction SilentlyContinue | ForEach-Object { $_.FullName }
foreach ($root in $searchRoots) {
$candidateFiles = Get-ChildItem -Path $root -Recurse -Include '.env', '.env.local', 'config.json', 'settings.json' `
-ErrorAction SilentlyContinue -Depth 4
foreach ($file in $candidateFiles) {
$content = Get-Content $file.FullName -Raw -ErrorAction SilentlyContinue
foreach ($pattern in $keyPatterns) {
if ($content -match [regex]::Escape($pattern)) {
$findings += [PSCustomObject]@{
Type = 'PlaintextAPIKey'; Path = $file.FullName; Pattern = $pattern
}
}
}
}
}
# 2. Check for suspicious recently-created executables in high-risk staging paths
$suspectPaths = @("$env:TEMP", "C:\Users\Public", "C:\ProgramData")
foreach ($path in $suspectPaths) {
Get-ChildItem -Path $path -Recurse -Include '*.exe' -ErrorAction SilentlyContinue -Depth 2 |
Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-14) -and -not $_.VersionInfo.CompanyName } |
ForEach-Object {
$findings += [PSCustomObject]@{ Type = 'UnsignedRecentExe'; Path = $_.FullName; Pattern = $_.CreationTime }
}
}
# 3. Verify LSA protection and Credential Guard posture (raises the bar for credential theft)
$lsaRunAsPPL = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name RunAsPPL -ErrorAction SilentlyContinue).RunAsPPL
$credGuard = (Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard -ErrorAction SilentlyContinue).SecurityServicesRunning
$findings += [PSCustomObject]@{ Type = 'LSAProtection'; Path = 'RunAsPPL'; Pattern = $(if ($lsaRunAsPPL -eq 1) { 'ENABLED' } else { 'DISABLED - recommend enabling' }) }
# 4. Audit: list active sessions requiring revocation if stealer infection is confirmed
Write-Host "`n=== MANUAL ACTIONS REQUIRED ON CONFIRMED INFECTION ===" -ForegroundColor Yellow
Write-Host "1. Revoke ALL active sessions at the provider (e.g., anthropic.com/settings, myaccount.google.com/permissions)"
Write-Host "2. Rotate ALL API keys found above AND any stored in the user's browsers/managers"
Write-Host "3. Reset passwords for any account whose cookies resided on this endpoint"
Write-Host "4. Review provider usage/billing logs for unauthorized API consumption`n"
$findings | Format-Table -AutoSize
$findings | Export-Csv -Path "$env:TEMP\stealer_exposure_assessment.csv" -NoTypeInformation
Remediation
There is no patch for credential theft — remediation is layered and operational. Prioritize these controls in order:
Immediate (upon confirmed or suspected stealer infection)
- Assume total credential compromise of the endpoint. Every browser-stored session, saved password, on-disk API key, and OAuth token must be treated as stolen — not just the ones you find in logs.
- Revoke AI platform sessions globally. Google:
myaccount.google.com/security→ sign out all devices. Anthropic: revoke active sessions via account settings. Then force re-authentication. - Rotate all API keys stored on or used from the endpoint — AI providers, cloud CLIs, GitHub, package registries. Deleting an old key is faster than investigating whether it was used.
- Review provider usage and billing logs for unauthorized model consumption, unusual request volumes, or access from unfamiliar ASNs/geographies. Attackers burn stolen keys fast — quota spikes are often the first signal.
- Rebuild, don't clean. Stealer persistence mechanisms and secondary payloads make reimaging the only defensible IR outcome for confirmed infections.
Short-Term Hardening (30 days)
- Move AI API keys out of files. Use a secrets manager (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault, Doppler) with just-in-time retrieval. Ban
.envfiles containing production keys on endpoints via DLP policy. - Enforce IP allowlisting on API keys where the provider supports it — a stolen key that only works from your egress IPs is worthless to a buyer in a different ASN.
- Set minimum-viable quotas and budget alerts on AI platform accounts to bound the financial blast radius of a stolen key.
- Enable phishing-resistant MFA (FIDO2/passkeys) and short session lifetimes for AI platform consoles. Shorter sessions shrink the replay window.
- Block stealer delivery vectors: restrict execution from
%TEMP%,%APPDATA%, andC:\Users\Publicvia AppLocker/WDAC; enforce SmartScreen and browser download reputation checks.
Strategic (90 days)
- Adopt token binding and continuous access evaluation (CAE) where supported, so stolen tokens fail when replayed from unauthorized devices or networks.
- Instrument browser-store access monitoring fleet-wide using the detections above — this is high-fidelity, low-noise telemetry.
- Threat-intel monitoring for your domains in stealer logs. Services that monitor stealer marketplaces can alert you when employee credentials or sessions to your tenants appear in logs — buying you hours before replay.
- Developer education: engineers are the highest-value stealer targets because their endpoints hold the most keys. Target awareness at this population specifically.
Final Assessment
The infostealer economy has industrialized credential harvesting, and AI platform tokens are simply the newest high-margin item in the inventory. The uncomfortable truth is that a $10 stealer log can contain an authenticated session to your organization's AI tooling — with full access to conversation history, uploaded documents, and billable API capacity — and replaying it triggers zero security prompts.
Defenders win this fight in two places: on the endpoint, by detecting harvest behavior before exfiltration, and at the provider, by making stolen credentials expire fast, bind to context, and trigger usage anomalies. Build both layers now — the logs are already for sale.
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.