AlienVault OTX pulse data published 2026-08-10 details an active, unattributed malware delivery campaign built around a multi-stage PowerShell loader that abuses legitimate cloud hosting — specifically Vercel infrastructure — to stage ZIP archives containing executable payloads. The campaign's delivery infrastructure pivots between a hardcoded IP address (203.188.171.166) and the domain dorenzaa.com, both of which serve PowerShell content that retrieves and unpacks archives from attacker-controlled Vercel deployments.
The attack chain is a textbook living-off-trusted-sites (LOTS) pattern:
- Stage 1 — Initial PowerShell retrieval: A PowerShell script contacts dorenzaa.com or 203.188.171.166, initiating the loader sequence.
- Stage 2 — Obfuscated download cradle: Heavily obfuscated PowerShell stages leverage Base64 encoding layered with XOR encoding to conceal the actual payload URLs and decryption logic. The obfuscation defeats naive string-based signatures and forces analysts into manual deobfuscation.
- Stage 3 — Archive retrieval: The loader downloads ZIP archives hosted on Vercel (*.vercel.app infrastructure), inheriting the platform's trusted reputation and TLS certificate — meaning network controls keyed on domain reputation will greenlight the traffic.
- Stage 4 — Local extraction and execution: The archive is extracted locally and payloads are executed, including binaries masquerading as legitimate software: Grape.exe, UltraToolliteSetup.exe, and draw.io.exe (a trojanized or renamed binary abusing the trusted draw.io diagramming tool brand).
The objective at this stage of analysis is payload delivery and staging — the loader is a delivery vehicle. The disguised filenames (a setup installer, a popular utility) indicate the campaign is engineered for social engineering plausibility and endpoint trust evasion, consistent with initial-access operations that typically precede stealer, RAT, or ransomware affiliate deployment. The use of disposable Vercel projects gives the operator near-zero-cost, rapidly rotatable infrastructure — a hallmark of crimeware distribution economics.
Threat Actor / Malware Profile
Attribution: Unknown. No named threat actor or malware family is currently tied to the campaign. The tradecraft — multi-stage PowerShell, XOR+Base64 stacking, trusted-cloud staging — is shared across a broad swath of crimeware loaders (SmokeLoader, PrivateLoader, and various pay-per-install services all exhibit similar patterns), so defenders should treat this as a loader-as-a-service delivery chain until payload attribution matures.
Distribution method: PowerShell download cradles reaching out to dorenzaa.com / 203.188.171.166, which redirect payload staging to Vercel-hosted ZIP archives. Likely initial vectors include malspam links, SEO-poisoned or compromised sites serving fake software downloads (the draw.io.exe and UltraToolliteSetup.exe filenames strongly suggest fake-software/update lures).
Payload behavior: Archives are extracted to local disk and executed in-place. Payloads use legitimate-software naming (draw.io.exe) to blend into user-driven installs and evade casual inspection. Expect child-process execution from PowerShell with extracted binaries launching from user-writable paths (AppData, Temp, Downloads).
C2 / staging communication: HTTP/HTTPS to Vercel edge infrastructure over standard TLS. Because Vercel domains carry valid certs and strong reputation, detection must pivot on process-to-network correlation (PowerShell initiating HTTPS to *.vercel.app) rather than destination reputation alone.
Persistence mechanism: Not yet confirmed in the pulse; loaders of this class commonly establish run-key or scheduled-task persistence after payload execution. Hunt accordingly (see hunt script).
Anti-analysis techniques:
- Multi-layer encoding: Base64 wrapped in XOR-encrypted blobs across successive PowerShell stages
- Hidden execution: window-style suppression and obfuscated invocation to avoid user visibility and simplistic command-line detections
- Trusted infrastructure laundering: Vercel staging defeats blocklists and TLS inspection shortcuts
- Masquerading: payloads named after legitimate applications (draw.io, UltraToollite)
IOC Analysis
The pulse contains 16 indicators across three types:
| Type | Indicators | Operational Use |
|---|---|---|
| Domain | dorenzaa.com | DNS sinkhole / block at resolver and proxy; retro-hunt DNS logs for 90 days |
| FileHash-SHA256 (2) | d8620f4df9...5a64, 3eaf786bfb...a61 | Primary EDR block; immutable — highest-fidelity indicators |
| FileHash-MD5 / SHA1 (6 shown) | b385111d..., 0cd022f3..., 5efe9666..., b02d6b80..., 2fdc615e..., etc. | Legacy tooling coverage; feed to AV/EDR custom blocklists |
Operationalization guidance for SOC teams:
- Hashes first. SHA256 values are collision-resistant and immutable — push to EDR block lists immediately. MD5/SHA1 remain useful for legacy proxy/AV platforms that lack SHA256 support.
- Domain + IP blocking is necessary but insufficient. dorenzaa.com and 203.188.171.166 can be burned and rotated within hours. The durable detection is the behavioral pattern: PowerShell → Vercel → ZIP → local EXE execution.
- Decode the obfuscation. For acquired script samples, decode Base64 layers with
certutil -decode(Windows), CyberChef (base64 → XOR brute-force with single-byte keys), or Python (base64.b64decodethen XOR loop). Didier Stevens'xorsearch/decoderutilities accelerate XOR key recovery. - Pivot on Vercel. Any corporate endpoint resolving and downloading archives from *.vercel.app via a script interpreter is a high-fidelity anomaly in most enterprises — Vercel is a developer platform, not a software distribution source for end users.
Detection Engineering
---
title: Multi-Stage PowerShell Loader Downloading Archive from Vercel Infrastructure
description: Detects PowerShell processes initiating network connections or download cradles targeting Vercel-hosted staging infrastructure, consistent with the dorenzaa.com / 203.188.171.166 multi-stage loader campaign.
id: 7f3a1c2e-9b4d-4e1a-a8c5-2d6f0b9e3a71
status: experimental
author: Security Arsenal Threat Intelligence
references:
- https://malwr-analysis.com/2026/08/08/investigating-a-multi-stage-powershell-loader/
date: 2026/08/10
logsource:
category: network_connection
product: windows
detection:
selection_process:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
selection_domain:
DestinationHostname|contains:
- '.vercel.app'
- 'dorenzaa.com'
selection_ip:
DestinationIp: '203.188.171.166'
condition: selection_process and (selection_domain or selection_ip)
falsepositives:
- Developer workstations legitimately deploying to Vercel via PowerShell CLIs
level: high
tags:
- attack.command_and_control
- attack.t1105
- attack.t1059.001
---
title: Suspicious PowerShell Download Cradle with Base64 and XOR Obfuscation Indicators
description: Detects PowerShell command lines combining encoded/obfuscated content with download and archive extraction behaviors seen in the multi-stage loader chain.
id: 8a2b4d6f-1c3e-4f5b-b9d7-3e1a0c8f2b64
status: experimental
author: Security Arsenal Threat Intelligence
references:
- https://malwr-analysis.com/2026/08/08/investigating-a-multi-stage-powershell-loader/
date: 2026/08/10
logsource:
category: process_creation
product: windows
detection:
selection_image:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
selection_download:
CommandLine|contains:
- 'Invoke-WebRequest'
- 'Invoke-RestMethod'
- 'DownloadFile'
- 'DownloadString'
- 'Net.WebClient'
- 'curl'
- 'wget'
selection_obfuscation:
CommandLine|contains:
- 'FromBase64String'
- '-enc'
- '-ec'
- '-bxor'
- 'bxor'
- 'Expand-Archive'
- 'System.IO.Compression'
selection_hidden:
CommandLine|contains:
- '-w hidden'
- '-WindowStyle Hidden'
- '-NoProfile'
- '-noni'
condition: selection_image and selection_download and (selection_obfuscation or selection_hidden)
falsepositives:
- Administrative automation scripts with encoded parameters
- Software deployment tooling using hidden windows
level: high
tags:
- attack.execution
- attack.t1059.001
- attack.t1027
- attack.t1140
---
title: Execution of Masqueraded Payload Binaries from User-Writable Paths
description: Detects execution of the loader's dropped payloads (Grape.exe, UltraToolliteSetup.exe, draw.io.exe) from user-writable directories following archive extraction, where the parent is a script interpreter or archive utility.
id: 3c9e7a15-6d2f-4b8c-c1e4-5a0b2d7f9e38
status: experimental
author: Security Arsenal Threat Intelligence
references:
- https://malwr-analysis.com/2026/08/08/investigating-a-multi-stage-powershell-loader/
date: 2026/08/10
logsource:
category: process_creation
product: windows
detection:
selection_name:
Image|endswith:
- '\Grape.exe'
- '\UltraToolliteSetup.exe'
- '\draw.io.exe'
selection_path:
Image|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\Downloads\'
- '\Users\Public\'
selection_parent:
ParentImage|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\cmd.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\explorer.exe'
condition: selection_name and (selection_path or selection_parent)
falsepositives:
- Legitimate user-initiated draw.io installation (validate signer: draw.io is signed by JGraph Ltd)
level: critical
tags:
- attack.execution
- attack.t1036
- attack.t1204.002
// Hunt: Multi-Stage PowerShell Loader — Vercel staging, obfuscation, and masqueraded payloads
// Microsoft Sentinel / Defender for Endpoint
let Lookback = 14d;
let SuspiciousHosts = dynamic(["dorenzaa.com", "vercel.app"]);
let LoaderHashes = dynamic([
"d8620f4df9e0159a8db675868b4ed9a205638c847439f52cf1c88541d0655a64",
"3eaf786bfb4ae5688b347511f98d74c948b7dc0749558acbdc6bbe33dcfa3a61",
"b385111d6599a30210b7be8f7674a163",
"0cd022f31b436d6c83ddc1b5c14d47dc",
"5efe9666ca501077aefc818dae7be59f",
"b02d6b80c14bc5556bd7eaa6f1bc502b59818f90",
"2fdc615e948222bec395f988bebcea4da854756d"]);
let NetEvents =
DeviceNetworkEvents
| where Timestamp > ago(Lookback)
| where RemoteUrl has_any (SuspiciousHosts) or RemoteIP == "203.188.171.166"
| where InitiatingProcessFileName in~ ("powershell.exe", "pwsh.exe", "cmd.exe")
| project NetTime = Timestamp, DeviceName, DeviceId, RemoteUrl, RemoteIP,
InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessId;
let ProcEvents =
DeviceProcessEvents
| where Timestamp > ago(Lookback)
| where FileName in~ ("Grape.exe", "UltraToolliteSetup.exe", "draw.io.exe")
or ProcessCommandLine has_any ("FromBase64String", "-bxor", "Expand-Archive", "DownloadFile", "Invoke-WebRequest")
| project ProcTime = Timestamp, DeviceName, DeviceId, FileName, ProcessCommandLine,
FolderPath, SHA256, MD5, InitiatingProcessFileName;
let HashHits =
DeviceProcessEvents
| where Timestamp > ago(Lookback)
| where SHA256 in~ (LoaderHashes) or MD5 in~ (LoaderHashes)
| project HashTime = Timestamp, DeviceName, DeviceId, FileName, SHA256, MD5, FolderPath;
union NetEvents, ProcEvents, HashHits
| sort by DeviceName, NetTime desc
<#
.SYNOPSIS
Hunt script: Multi-Stage PowerShell Loader (dorenzaa.com / Vercel staging)
.DESCRIPTION
Checks a Windows endpoint for artifacts associated with the OTX-reported
multi-stage PowerShell loader campaign: network beacons, masqueraded payload
files, known hashes, and common persistence mechanisms.
#>
$ErrorActionPreference = 'SilentlyContinue'
$Findings = @()
Write-Host "[*] Security Arsenal — Multi-Stage PowerShell Loader IOC Hunt" -ForegroundColor Cyan
# --- 1. Known payload hashes ---
$KnownHashes = @(
'd8620f4df9e0159a8db675868b4ed9a205638c847439f52cf1c88541d0655a64',
'3eaf786bfb4ae5688b347511f98d74c948b7dc0749558acbdc6bbe33dcfa3a61',
'b385111d6599a30210b7be8f7674a163',
'0cd022f31b436d6c83ddc1b5c14d47dc',
'5efe9666ca501077aefc818dae7be59f'
)
# --- 2. Masqueraded payload filenames in user-writable paths ---
$PayloadNames = @('Grape.exe','UltraToolliteSetup.exe','draw.io.exe')
$SearchPaths = @("$env:TEMP", "$env:LOCALAPPDATA", "$env:APPDATA", "$env:USERPROFILE\Downloads", 'C:\Users\Public')
Write-Host "[*] Checking for masqueraded payloads and matching hashes..." -ForegroundColor Cyan
foreach ($Path in $SearchPaths) {
foreach ($Name in $PayloadNames) {
Get-ChildItem -Path $Path -Filter $Name -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object {
$Hash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
$Md5 = (Get-FileHash $_.FullName -Algorithm MD5).Hash.ToLower()
$Match = ($KnownHashes -contains $Hash) -or ($KnownHashes -contains $Md5)
$Findings += [PSCustomObject]@{
Type = 'PayloadFile'; Path = $_.FullName; SHA256 = $Hash
KnownBad = $Match; LastWrite = $_.LastWriteTime
}
}
}
}
# --- 3. Active / recent network connections to C2 or staging ---
Write-Host "[*] Checking network connections for dorenzaa.com / 203.188.171.166 / *.vercel.app..." -ForegroundColor Cyan
$BadIP = '203.188.171.166'
Get-NetTCPConnection | Where-Object { $_.RemoteAddress -eq $BadIP } | ForEach-Object {
$Proc = Get-Process -Id $_.OwningProcess
$Findings += [PSCustomObject]@{
Type = 'NetworkConnection'; Path = "$($Proc.ProcessName) (PID $($_.OwningProcess)) -> $($_.RemoteAddress):$($_.RemotePort)"
SHA256 = ''; KnownBad = $true; LastWrite = ''
}
}
# --- 4. DNS cache check for malicious domain / vercel subdomains ---
Get-DnsClientCache | Where-Object { $_.Entry -match 'dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa|dorenzaa' } | Out-Null
Get-DnsClientCache | Where-Object { $_.Entry -match 'dorenzaa\.com|vercel\.app' } | ForEach-Object {
$Findings += [PSCustomObject]@{
Type = 'DNSCache'; Path = $_.Entry; SHA256 = ''; KnownBad = ($_.Entry -match 'dorenzaa\.com'); LastWrite = ''
}
}
# --- 5. Persistence checks: Run keys, scheduled tasks referencing payloads ---
Write-Host "[*] Checking persistence mechanisms..." -ForegroundColor Cyan
$RunKeys = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
)
foreach ($Key in $RunKeys) {
(Get-ItemProperty $Key).PSObject.Properties | Where-Object {
$_.Value -match 'Grape\.exe|UltraToollite|draw\.io|powershell.*-enc|FromBase64String'
} | ForEach-Object {
$Findings += [PSCustomObject]@{
Type = 'RunKey'; Path = "$Key :: $($_.Name) = $($_.Value)"; SHA256 = ''; KnownBad = $true; LastWrite = ''
}
}
}
Get-ScheduledTask | Where-Object {
($_.Actions.Execute -match 'powershell|pwsh') -and
(($_.Actions.Arguments -match '-enc|-bxor|vercel|dorenzaa|DownloadFile|Expand-Archive'))
} | ForEach-Object {
$Findings += [PSCustomObject]@{
Type = 'ScheduledTask'; Path = "$($_.TaskName) :: $($_.Actions.Execute) $($_.Actions.Arguments)"
SHA256 = ''; KnownBad = $true; LastWrite = ''
}
}
# --- Report ---
Write-Host "`n===== HUNT RESULTS =====" -ForegroundColor Yellow
if ($Findings.Count -eq 0) {
Write-Host "[+] No indicators found. Endpoint appears clean for this campaign." -ForegroundColor Green
} else {
$Findings | Format-Table -AutoSize
$Findings | Export-Csv -Path ".\Loader_Hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
Write-Host "[!] $($Findings.Count) finding(s) — results exported to CSV. Escalate to IR." -ForegroundColor Red
}
Response Priorities
Immediate (0-4 hours):
- Block
dorenzaa.comand203.188.171.166at DNS resolver, web proxy, and firewall egress - Push all 16 IOC hashes to EDR/AV custom block lists (SHA256 first)
- Deploy the Sigma and KQL detections above; run the KQL retro-hunt across 14-90 days of telemetry
- Alert-on-match for any endpoint executing Grape.exe, UltraToolliteSetup.exe, or unsigned draw.io.exe from user-writable paths
24 hours:
- Triage any host with confirmed loader execution as potentially compromised — loaders of this class are first-stage droppers for stealers and RATs; assume follow-on payloads may have executed
- If stealer or credential-access behavior is confirmed on any endpoint, force enterprise-wide credential rotation for affected users (including cached browser credentials, session tokens, and any credentials entered post-compromise); revoke active sessions in IdP (Entra ID/Okta)
- Isolate affected endpoints for forensic imaging before reimaging
1 week:
- Implement *egress filtering policy for .vercel.app (and similar developer hosting: netlify.app, pages.dev, workers.dev) — most enterprises have zero legitimate end-user business need; allowlist via proxy exception for dev teams only
- Enforce PowerShell Constrained Language Mode and enable Script Block Logging + Module Logging enterprise-wide; route to SIEM
- Deploy AMSI-based inspection and application control (WDAC/AppLocker) rules blocking unsigned binaries from executing in AppData/Temp/Downloads
- Add a threat-hunt hypothesis to the SOC rotation: "script interpreters spawning archive-extraction and child executables from trusted-cloud downloads"
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.