A new pulse from AlienVault OTX, sourced from Point Wild research, dissects Vanta Stealer — a modular, Python-based information stealer wrapped in PyArmor obfuscation and PyInstaller packaging. The malware executes a systematic credential-harvesting sweep across browsers, messaging platforms, gaming clients, cryptocurrency wallets, and even Mullvad VPN configurations. Enterprise SOC teams should treat this as a high-priority credential-exposure event and begin retro-hunting immediately.
Threat Summary
Vanta Stealer represents the continued commoditization of the infostealer ecosystem. While no specific threat actor has been attributed, the malware's design — modular architecture, heavy obfuscation, and broad cross-platform targeting — is consistent with stealer-as-a-service operations distributed through cracked software, fake game cheats, malvertising, and phishing lures aimed at gamers and crypto holders.
The attack chain follows a familiar infostealer pattern:
- Delivery — Victim executes a PyInstaller-packaged binary (typically a trojanized installer, cheat tool, or cracked application).
- Deobfuscation & Execution — The PyArmor-protected Python runtime unpacks and executes the stealer modules in memory.
- Collection — The malware enumerates and extracts:
- Chromium-based browser credentials, cookies, autofill, and session data
- Discord tokens (enabling account takeover without passwords)
- Telegram session data (enabling full account hijack)
- Gaming platform credentials: Steam, Riot Games, Roblox, Minecraft
- Cryptocurrency wallet files and browser-extension wallet data
- Mullvad VPN configuration (enabling network pivoting and attribution evasion)
- Staging & Exfiltration — Collected data is staged, typically compressed, and exfiltrated to attacker-controlled infrastructure, with stolen logs almost certainly funneled to dark web marketplaces and initial access brokers.
Objective: Mass credential and session-token harvesting for resale, account takeover, and follow-on intrusion. The stolen data feeds the dark web credential economy — Discord tokens and browser sessions are routinely sold within hours of collection.
Threat Actor / Malware Profile
| Attribute | Detail |
|---|---|
| Malware Family | Vanta Stealer |
| Attribution | Unknown (consistent with MaaS/stealer-as-a-service operations) |
| Language | Python |
| Packaging | PyInstaller (standalone executable) |
| Obfuscation | PyArmor (code encryption, anti-debugging, license-check scaffolding) |
| Architecture | Modular — discrete collection modules per target application |
| Platforms | Cross-platform (Python runtime enables Windows, and potentially macOS/Linux variants) |
Distribution Method
No single vector is confirmed, but stealer payloads of this class are typically distributed via:
- Cracked/pirated software and game cheat downloads (consistent with the gaming-platform targeting)
- Malvertising and SEO poisoning
- Discord-delivered payloads (fake game invites, "nitro" scams)
- Phishing attachments masquerading as installers or updates
Payload Behavior
- Enumerates installed applications and browser profiles
- Reads Chromium
Login Data,Cookies, andLocal StateSQLite databases (decrypting with the DPAPI-derived key fromLocal State) - Scrapes Discord
Local Storageleveldb for authentication tokens - Extracts Telegram
tdatasession directories - Locates Steam
ssfnfiles, Riot/Roblox/Minecraft credential stores - Copies cryptocurrency wallet files (desktop wallets and browser-extension vaults)
- Harvests Mullvad VPN configuration data
Anti-Analysis Techniques
- PyArmor obfuscation — encrypted bytecode, runtime decryption, and integrity checks that break naive static analysis
- PyInstaller packing — bundles the interpreter and payload into a single large binary, inflating file size and defeating signature-only detection
- Likely sandbox/VM checks common to the stealer family class before executing collection modules
MITRE ATT&CK Mapping
- T1059.006 — Command and Scripting Interpreter: Python
- T1555.003 — Credentials from Password Stores: Credentials from Web Browsers
- T1528 — Steal Application Access Token (Discord/Telegram tokens)
- T1027 — Obfuscated Files or Information (PyArmor)
- T1140 — Deobfuscate/Decode Files or Information
- T1005 — Data from Local System
- T1041 — Exfiltration Over C2 Channel
IOC Analysis
The pulse contains 19 indicators, all FileHash-SHA256 values — the malware's packaged binaries and module artifacts:
3bff25e745707056cf4ed6428ee8aace9a1bff2fb4030e32a7c0470a34cbfa62
4bdf15157fc0067af179d11e9ad168816ce99a849fd45332482b0b88a05aeabb
5dbddac39fda06acc703c22935fa24e0b4bcdbc26624a1869fe93cd568cdb9fc
6f20836eef6496695e5f2a5fd81e7dfb8770df38fb1bf67fcf024c1261352daa
09e3ce307b2af3f94a315eba97c094d8d755b3674208cc47ceab3c1630a84ad9
026c85b97a6ddac14c9835d0580228c0a82dd82ce12d8d921c2f3067a12bbb7e
31f3e50e764a090d2dbf759e6cb5f678c5c6a3a5a96ff3a2069ffda520580e52
34a01c2429161a8711adff3495ab1dee4419511c8f45c483f50ac71205f68512
How SOC Teams Should Operationalize These
- EDR retro-hunt — Push all SHA256 values into your EDR's file-reputation/blocklist (CrowdStrike custom IOC, Defender indicators, SentinelOne blacklist) and sweep historical execution telemetry for the past 30–90 days.
- Email & gateway blocking — Add hashes to secure email gateway and web proxy block policies; PyInstaller droppers frequently arrive as email attachments and drive-by downloads.
- SIEM ingestion — Import the pulse into your threat intel platform (MISP, OpenCTI, or native OTX integration) so hashes auto-correlate against file-creation and process-launch events.
- VirusTotal / sandbox pivot — Detonate or query the hashes in a sandbox to extract embedded C2 URLs and additional dropped-file hashes; PyArmor binaries often reveal network IOCs only at runtime.
Important caveat: hash-only intelligence decays fast. Re-packed PyInstaller builds produce new hashes per build. Pair hash blocking with the behavioral detections below — the behavior (browser DB access, token scraping) is far more stable than the bytes.
Detection Engineering
Sigma Rules
---
title: Vanta Stealer - Chromium Browser Credential Database Access
id: 8f1a2b3c-vanta-0001-9d4e-5f6a7b8c9d01
status: experimental
description: Detects non-browser processes accessing Chromium-based browser credential stores (Login Data, Cookies, Local State), consistent with Vanta Stealer credential harvesting behavior
author: Security Arsenal Threat Intelligence
date: 2026/08/07
references:
- https://otx.alienvault.com
- https://www.pointwild.com/threat-intelligence/point-wild-exclusive-dissecting-vanta-stealer-a-python-based-cross-platform-information-theft-malware
tags:
- attack.credential_access
- attack.t1555.003
logsource:
category: file_event
product: windows
detection:
selection_paths:
TargetFilename|contains:
- '\AppData\Local\Google\Chrome\User Data\'
- '\AppData\Local\Microsoft\Edge\User Data\'
- '\AppData\Local\BraveSoftware\Brave-Browser\User Data\'
- '\AppData\Roaming\Opera Software\'
selection_files:
TargetFilename|endswith:
- '\Login Data'
- '\Cookies'
- '\Local State'
- '\Web Data'
filter_legit_browsers:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
- '\opera.exe'
condition: selection_paths and selection_files and not filter_legit_browsers
falsepositives:
- Backup software
- Enterprise DLP agents
level: high
---
title: Vanta Stealer - Discord and Telegram Token Theft
id: 8f1a2b3c-vanta-0002-9d4e-5f6a7b8c9d02
status: experimental
description: Detects suspicious processes reading Discord Local Storage leveldb files or Telegram tdata session directories, a hallmark of token/session theft by infostealers such as Vanta Stealer
author: Security Arsenal Threat Intelligence
date: 2026/08/07
references:
- https://otx.alienvault.com
tags:
- attack.credential_access
- attack.t1528
- attack.t1555
logsource:
category: file_event
product: windows
detection:
selection_discord:
TargetFilename|contains:
- '\discord\Local Storage\leveldb'
- '\discordcanary\Local Storage\leveldb'
- '\discordptb\Local Storage\leveldb'
selection_telegram:
TargetFilename|contains:
- '\Telegram Desktop\tdata'
filter_legit:
Image|endswith:
- '\Discord.exe'
- '\Telegram.exe'
condition: (selection_discord or selection_telegram) and not filter_legit
falsepositives:
- Rare third-party Discord utilities
level: high
---
title: Vanta Stealer - PyInstaller Packed Executable Spawning Suspicious Child Activity
id: 8f1a2b3c-vanta-0003-9d4e-5f6a7b8c9d03
status: experimental
description: Detects unsigned executables running from user-writable temp/AppData paths that access gaming, VPN, or crypto wallet artifact locations, matching Vanta Stealer's PyInstaller-packaged modular collection behavior
author: Security Arsenal Threat Intelligence
date: 2026/08/07
references:
- https://otx.alienvault.com
tags:
- attack.execution
- attack.t1059.006
- attack.t1027
- attack.t1005
logsource:
category: process_creation
product: windows
detection:
selection_exec_paths:
Image|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\Downloads\'
- '\Users\Public\'
selection_targets:
CommandLine|contains:
- 'steam'
- 'ssfn'
- 'Riot Games'
- 'Roblox'
- 'minecraft'
- '.minecraft'
- 'Mullvad'
- 'wallet.dat'
- 'exodus'
- 'electrum'
- 'atomic wallet'
- 'metamask'
filter_signed:
Signed: 'true'
condition: selection_exec_paths and selection_targets and not filter_signed
falsepositives:
- Legitimate portable utilities run from Downloads
- Game modding tools
level: medium
KQL (Microsoft Sentinel) — Retro-Hunt for Vanta Stealer IOCs and Behavior
// Vanta Stealer hunt: known SHA256 IOCs + behavioral access to credential stores
let VantaHashes = dynamic([
"3bff25e745707056cf4ed6428ee8aace9a1bff2fb4030e32a7c0470a34cbfa62",
"4bdf15157fc0067af179d11e9ad168816ce99a849fd45332482b0b88a05aeabb",
"5dbddac39fda06acc703c22935fa24e0b4bcdbc26624a1869fe93cd568cdb9fc",
"6f20836eef6496695e5f2a5fd81e7dfb8770df38fb1bf67fcf024c1261352daa",
"09e3ce307b2af3f94a315eba97c094d8d755b3674208cc47ceab3c1630a84ad9",
"026c85b97a6ddac14c9835d0580228c0a82dd82ce12d8d921c2f3067a12bbb7e",
"31f3e50e764a090d2dbf759e6cb5f678c5c6a3a5a96ff3a2069ffda520580e52",
"34a01c2429161a8711adff3495ab1dee4419511c8f45c483f50ac71205f68512"
]);
let StealerTargets = dynamic([
"Login Data", "Local State", "\\Cookies",
"\\discord\\Local Storage\\leveldb", "\\Telegram Desktop\\tdata",
"ssfn", "\\.minecraft\\", "Mullvad", "wallet.dat", "metamask", "exodus", "electrum"
]);
let HashHits = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where SHA256 in~ (VantaHashes)
| project HitType="KnownHashExecution", TimeGenerated, DeviceName, AccountName, FileName, FolderPath, SHA256, ProcessCommandLine;
let BehaviorHits = DeviceFileEvents
| where TimeGenerated > ago(30d)
| where FileName has_any (StealerTargets) or FolderPath has_any (StealerTargets)
| where not(InitiatingProcessFileName in~ ("chrome.exe","msedge.exe","brave.exe","opera.exe","Discord.exe","Telegram.exe","Steam.exe"))
| where InitiatingProcessFolderPath has_any ("\\Temp\\","\\Downloads\\","\\AppData\\Roaming\\","\\Users\\Public\\")
| project HitType="CredentialStoreAccess", TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, InitiatingProcessFolderPath, FileName, FolderPath;
union HashHits, BehaviorHits
| sort by TimeGenerated desc
PowerShell — Endpoint IOC & Artifact Hunt
# Vanta Stealer Endpoint Hunt — run via EDR Live Response / RMM across fleet
# Checks for known hashes, suspicious access artifacts, and staged exfil archives
$ErrorActionPreference = 'SilentlyContinue'
$report = @()
$vantaHashes = @(
'3bff25e745707056cf4ed6428ee8aace9a1bff2fb4030e32a7c0470a34cbfa62',
'4bdf15157fc0067af179d11e9ad168816ce99a849fd45332482b0b88a05aeabb',
'5dbddac39fda06acc703c22935fa24e0b4bcdbc26624a1869fe93cd568cdb9fc',
'6f20836eef6496695e5f2a5fd81e7dfb8770df38fb1bf67fcf024c1261352daa',
'09e3ce307b2af3f94a315eba97c094d8d755b3674208cc47ceab3c1630a84ad9',
'026c85b97a6ddac14c9835d0580228c0a82dd82ce12d8d921c2f3067a12bbb7e',
'31f3e50e764a090d2dbf759e6cb5f678c5c6a3a5a96ff3a2069ffda520580e52',
'34a01c2429161a8711adff3495ab1dee4419511c8f45c483f50ac71205f68512'
)
# 1. Hash sweep of high-risk drop locations
$dropPaths = @("$env:TEMP", "$env:LOCALAPPDATA\Temp", "$env:USERPROFILE\Downloads",
"$env:APPDATA", "C:\Users\Public")
foreach ($path in $dropPaths) {
Get-ChildItem -Path $path -Recurse -Include *.exe -File | ForEach-Object {
$h = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
if ($vantaHashes -contains $h) {
$report += [pscustomobject]@{Finding='KNOWN_VANTA_HASH'; Path=$_.FullName; Hash=$h}
}
}
}
# 2. Recently-created archives in user dirs (infostealer staging behavior)
$staging = Get-ChildItem "$env:TEMP","$env:USERPROFILE\Documents","$env:USERPROFILE\Desktop" -Recurse `
-Include *.zip,*.rar,*.7z -File | Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-7) }
foreach ($s in $staging) {
$report += [pscustomobject]@{Finding='SUSPECT_STAGING_ARCHIVE'; Path=$s.FullName; Hash='-'}
}
# 3. Unsigned PyInstaller-style binaries running from user-writable paths
Get-CimInstance Win32_Process | Where-Object {
$_.ExecutablePath -match '\\(Temp|Downloads|AppData\\Roaming|Users\\Public)\\' -and
$_.ExecutablePath -like '*.exe'
} | ForEach-Object {
$sig = Get-AuthenticodeSignature $_.ExecutablePath
if ($sig.Status -ne 'Valid') {
$report += [pscustomobject]@{Finding='UNSIGNED_USERDIR_PROCESS'; Path=$_.ExecutablePath; Hash=(Get-FileHash $_.ExecutablePath).Hash}
}
}
# 4. Python interpreter presence on endpoints where it shouldn't be
Get-CimInstance Win32_Process -Filter "Name like '%python%'" | ForEach-Object {
$report += [pscustomobject]@{Finding='PYTHON_PROCESS_RUNNING'; Path=$_.ExecutablePath; Hash='-'}
}
# 5. Network connections from processes in user-writable paths
Get-NetTCPConnection -State Established | ForEach-Object {
$p = Get-Process -Id $_.OwningProcess
if ($p.Path -match '\\(Temp|Downloads|AppData\\Roaming|Users\\Public)\\') {
$report += [pscustomobject]@{Finding="OUTBOUND_$($_.RemoteAddress):$($_.RemotePort)"; Path=$p.Path; Hash='-'}
}
}
$report | Format-Table -AutoSize
$report | Export-Csv "C:\vanta_hunt_$env:COMPUTERNAME.csv" -NoTypeInformation
Write-Host "[+] Hunt complete: $($report.Count) findings on $env:COMPUTERNAME"
Response Priorities
Immediate (0–4 hours)
- Block all 19 SHA256 IOCs in EDR, email gateway, and web proxy.
- Retro-hunt 30–90 days of process/file telemetry using the KQL query above — PyInstaller droppers may have executed weeks ago.
- Isolate any host with a confirmed hash hit or behavioral match (browser DB access by non-browser process).
24 Hours
- Force credential resets for any user on an affected endpoint: domain/Entra ID, VPN, and any business-critical SaaS accessed from the device. Assume all browser-stored credentials are compromised.
- Revoke active sessions and tokens — Discord tokens and browser session cookies bypass password resets; invalidate OAuth refresh tokens and enforce re-authentication.
- Alert employees to check personal accounts (Discord, Steam, Telegram, crypto wallets) if the device was used for personal logins — stealer logs hit dark web markets within hours.
- Audit crypto exposure — if wallet files or extension vaults were present on an affected host, treat funds as at imminent risk and move assets.
1 Week
- Browser policy hardening — disable or restrict browser password managers via GPO/Intune; deploy a dedicated enterprise password manager so credentials are not in DPAPI-protected Chromium stores.
- Application control — implement WDAC/AppLocker rules blocking unsigned executables in user-writable directories (
%TEMP%,%APPDATA%,Downloads); this neuters most PyInstaller droppers. - Python governance — inventory and restrict unauthorized Python interpreters on endpoints; alert on
python.exeexecution outside approved developer groups. - Detection tuning — promote the Discord/Telegram token-access Sigma rule to production after an allowlist tuning period; it generalizes across the entire infostealer family (Lumma, RedLine, Vidar, StealC).
- Awareness — brief users on cracked-software and game-cheat lures, the dominant delivery vehicle for gaming-targeted stealers.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.