Back to Intelligence

Wazza Device Code Phishing Kit + GCP LLMjacking Campaign: OTX Pulse Analysis — Microsoft 365 & Cloud Credential Theft Detection Pack

SA
Security Arsenal Team
October 21, 2026
11 min read

Threat Summary

Two converging credential-theft campaigns surfaced in OTX telemetry on 2026-10-21, and together they paint a clear picture of where identity-focused attackers are concentrating effort in late 2026: abusing legitimate cloud authentication mechanisms rather than breaking them.

Campaign 1 — Wazza Phishing Kit (Microsoft 365): Active since early July 2026, Wazza is a multi-stage phishing kit targeting Microsoft 365 tenants through OAuth device code phishing. The chain begins with phishing emails sent from already-compromised accounts (giving them high internal trust), delivering PDF lures themed as invoices and contracts. Victims are redirected through a layered infrastructure of Google Sites pages, Cloudflare Workers endpoints, and throwaway European-registered domains (.eu TLDs dominate the indicator set) before landing on a device code authorization flow. Instead of stealing a password, the kit tricks the victim into entering a legitimate Microsoft device code — handing the attacker a fully authorized OAuth token that bypasses most MFA configurations.

Campaign 2 — GCP LLMjacking (Google Cloud Platform): A separate campaign uses sponsored search ads (malvertising) to serve fake Google login pages, harvesting privileged GCP user credentials. Post-compromise, the attackers manipulate organizational policies to disable security guardrails, create service accounts with Gemini API access, invite external attacker-controlled accounts into the organization, and then run large-scale LLM workloads billed to the victim — a technique known as LLMjacking. The IOC set is dominated by typosquat domains imitating Google properties (groosl.com, gboogl.com, gcoalg.com) and at least one active phishing host (212.73.134.136).

Collective assessment: Both campaigns monetize cloud identity compromise rather than endpoint malware. One harvests OAuth tokens for Microsoft 365; the other harvests credentials for GCP console access. The end goals differ — account takeover/BEC enablement vs. compute/billing abuse — but the initial access vector and the credential-theft economy are the same. Organizations should expect stolen credentials from both campaigns to appear in dark web credential markets and initial access broker (IAB) listings within days of capture.

Threat Actor / Malware Profile

Wazza Phishing Kit

  • Attribution: Unknown threat actor; kit-based operation suggests phishing-as-a-service (PhaaS) distribution to multiple affiliates.
  • Distribution: Phishing emails sent from compromised legitimate accounts, containing business-themed PDF attachments (invoices, contracts, purchase orders).
  • Attack chain: PDF lure → Google Sites redirector → Cloudflare Workers relay (e.g., beacon-surge-sync.workers.dev) → attacker-controlled .eu domains → Microsoft device code authorization page.
  • Payload behavior: No traditional malware payload. The "payload" is a live OAuth token. Victims are shown a legitimate Microsoft login/device code prompt; entering the code authorizes the attacker's session. Tokens are then replayed for mailbox access, inbox rule creation, and downstream BEC or internal phishing.
  • C2 / infrastructure: Abuses legitimate services (Google Sites, Cloudflare Workers) as traffic relays to blend with enterprise-approved SaaS, with disposable .eu domains (beton-beton.eu, cardamomo.eu, diabetesnet.eu, etc.) as the phishing presentation layer.
  • Persistence: Refresh tokens issued through the device code flow persist independent of password changes unless explicitly revoked; attackers commonly add mailbox forwarding rules or register additional auth methods.
  • Anti-analysis: Heavy use of Cloudflare Workers for dynamic content delivery, domain rotation across dozens of low-reputation .eu registrations, and delivery via trusted platforms to defeat URL reputation engines.

GCP LLMjacking Campaign

  • Attribution: Unknown; financially motivated cloud resource abuse group.
  • Distribution: Sponsored search ads (Google Ads malvertising) ranking typosquat phishing pages above legitimate results for cloud console search terms.
  • Attack chain: Malvertising → typosquat domain (groosl.com, gboogl.com, gcoalg.com, gbrokl.space/xyz) → fake Google login page → credential capture → GCP console access → org policy manipulation → service account creation with Gemini API permissions → external account invitation → mass LLM API consumption on victim billing.
  • Post-exploitation: Disables organizational policy constraints (e.g., domain restriction, service account creation guardrails), establishes cross-tenant persistence via invited external identities, and monetizes via resale of LLM API access or direct fraud. Victim impact is measured in runaway cloud billing — often tens of thousands of dollars before detection.

IOC Analysis

Indicator composition:

  • Domains (majority): Two distinct clusters. The Wazza set (beton-beton.eu, bike-msca.eu, bodi-project.eu, bruoth-family.eu, cardamomo.eu, coppietersrecherche.eu, diabetesnet.eu) consists of rotated .eu phishing presentation domains. The LLMjacking set (groosl.com, groonl.com, gboogl.com, gbrokl.space, gbrokl.xyz, gcoalg.com, gcslom.com) is a typosquat farm imitating Google properties — note the consistent character-substitution pattern (g + doubled/transposed letters).
  • Hostnames: beacon-surge-sync.workers.dev — Cloudflare Workers relay. Workers.dev subdomains cannot be blocked wholesale in most enterprises, so this indicator should be matched at the URL/hostname level in proxy and DNS logs.
  • IPv4: 212.73.134.136 — phishing page host for the LLMjacking campaign; suitable for perimeter egress blocking and netflow retro-hunts.

Operationalization guidance for SOC teams:

  1. DNS/proxy retro-hunt (72h+ lookback): Query resolver and secure web gateway logs for all listed domains. Any hit on a Wazza .eu domain combined with a subsequent login.microsoftonline.com device code event is a near-certain compromise.
  2. Typosquat pattern matching: Don't rely solely on exact-match IOCs for the LLMjacking cluster — implement fuzzy/regex matching for g[brc][ro]+[skgl]+\.(com|space|xyz)-style permutations, as this actor rotates names rapidly.
  3. Identity log correlation: These IOCs are only half the detection story. The authoritative detection surface is Entra ID sign-in logs (device code flow events) and GCP audit logs (org policy changes, service account creation, IAM invites).
  4. Tooling: Normalize domains through your TI platform (OTX, MISP) into firewall/DNS sinkhole feeds; enrich with VirusTotal/URLScan for redirect-chain mapping; use Cloudflare Workers hostname matches in proxy logs to pivot to full redirect chains.

Detection Engineering

YAML
---
title: Microsoft 365 Device Code Flow Authentication From Suspicious Source
description: Detects OAuth device code authentication events in Entra ID indicative of Wazza-style device code phishing, where victims are tricked into authorizing attacker sessions.
status: experimental
author: Security Arsenal Threat Intel
logsource:
    product: azure
    service: signinlogs
detection:
    selection_flow:
        authentication_protocol: 'deviceCode'
    selection_risk:
        risk_level_aggregated: 'high'
        is_interactive: false
    filter_known:
        ip_address|startswith:
            - '10.'
            - '192.168.'
    condition: selection_flow and not filter_known
fields:
    - user_principal_name
    - ip_address
    - user_agent
    - app_display_name
falsepositives:
    - Legitimate device code logins for CLI tools (Azure CLI, PowerShell, VS Code) from corporate IPs
level: high
tags:
    - attack.initial_access
    - attack.t1566
    - attack.t1550.001
    - attack.t1528
date: 2026/10/21
---
title: GCP Organization Policy Guardrail Disabled Followed by Service Account Creation
description: Detects LLMjacking post-compromise behavior — organizational policy modification to disable security constraints followed by service account creation and external IAM grants.
status: experimental
author: Security Arsenal Threat Intel
logsource:
    product: gcp
    service: audit
detection:
    selection_policy:
        method_name: 'SetOrgPolicy'
    selection_policy_keys:
        constraint|contains:
            - 'iam.allowedPolicyMemberDomains'
            - 'iam.disableServiceAccountCreation'
            - 'iam.disableServiceAccountKeyCreation'
    selection_iam:
        method_name:
            - 'CreateServiceAccount'
            - 'SetIamPolicy'
            - 'CreateServiceAccountKey'
    timeframe: 1h
    condition: selection_policy and selection_policy_keys and selection_iam
fields:
    - principal_email
    - method_name
    - resource_name
    - caller_ip
falsepositives:
    - Terraform/administrative automation performing legitimate policy and IAM changes
level: critical
tags:
    - attack.defense_evasion
    - attack.t1562
    - attack.persistence
    - attack.t1136
    - attack.impact
    - attack.t1496
date: 2026/10/21
---
title: Network Connection to Wazza Phishing Kit Infrastructure
description: Detects endpoint network connections to known Wazza device code phishing kit domains and Cloudflare Workers relay hostnames identified in OTX pulses.
status: experimental
author: Security Arsenal Threat Intel
logsource:
    category: dns
detection:
    selection_domain:
        query|contains:
            - 'beton-beton.eu'
            - 'bike-msca.eu'
            - 'bodi-project.eu'
            - 'bruoth-family.eu'
            - 'cardamomo.eu'
            - 'coppietersrecherche.eu'
            - 'diabetesnet.eu'
            - 'beacon-surge-sync.workers.dev'
            - 'groosl.com'
            - 'groonl.com'
            - 'gboogl.com'
            - 'gbrokl.space'
            - 'gbrokl.xyz'
            - 'gcoalg.com'
            - 'gcslom.com'
    condition: selection_domain
fields:
    - query
    - answer
    - src_ip
falsepositives:
    - Unlikely; these are purpose-built phishing domains
level: critical
tags:
    - attack.initial_access
    - attack.t1566.002
    - attack.command_and_control
    - attack.t1071.001
date: 2026/10/21
KQL — Microsoft Sentinel / Defender
// Hunt: Device code phishing (Wazza) + typosquat infrastructure + suspicious OAuth flows
// Microsoft Sentinel — 14 day lookback
let PhishIOCs = dynamic([
    "beton-beton.eu","bike-msca.eu","bodi-project.eu","bruoth-family.eu",
    "cardamomo.eu","coppietersrecherche.eu","diabetesnet.eu",
    "beacon-surge-sync.workers.dev","groosl.com","groonl.com","gboogl.com",
    "gbrokl.space","gbrokl.xyz","gcoalg.com","gcslom.com"
]);
let PhishHits = DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where RemoteUrl has_any (PhishIOCs) or RemoteIP == "212.73.134.136"
| project PhishTime=TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteUrl, RemoteIP, LocalIP;
// Correlate endpoint phishing contact with Entra device code sign-ins
let DeviceCodeSignins = SigninLogs
| where TimeGenerated > ago(14d)
| where AuthenticationProtocol == "deviceCode" or tostring(AuthenticationDetails) has "device code"
| extend IsRisky = iff(RiskLevelDuringSignIn in ("high","medium") or IPAddress !startswith "10.", true, false)
| project SigninTime=TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, IsRisky, Location;
PhishHits
| join kind=inner (DeviceCodeSignins) on $left.LocalIP == $right.IPAddress
| where abs((SigninTime - PhishTime)) < 2h
| project PhishTime, SigninTime, DeviceName, UserPrincipalName, RemoteUrl, IPAddress, AppDisplayName, IsRisky, Location
| order by SigninTime desc
PowerShell
# Security Arsenal — Wazza + LLMjacking IOC Hunt Script
# Checks: DNS cache, proxy-adjacent artifacts, Entra token artifacts, suspicious inbox rules
# Run elevated on endpoints; pair with Entra ID / GCP audit log review

$ErrorActionPreference = 'SilentlyContinue'
$report = @()

$PhishDomains = @(
    'beton-beton.eu','bike-msca.eu','bodi-project.eu','bruoth-family.eu',
    'cardamomo.eu','coppietersrecherche.eu','diabetesnet.eu',
    'beacon-surge-sync.workers.dev','groosl.com','groonl.com','gboogl.com',
    'gbrokl.space','gbrokl.xyz','gcoalg.com','gcslom.com'
)
$PhishIP = '212.73.134.136'

Write-Host "[*] Checking DNS client cache for phishing infrastructure..." -ForegroundColor Cyan
$dnsCache = Get-DnsClientCache
foreach ($d in $PhishDomains) {
    $hit = $dnsCache | Where-Object { $_.Entry -like "*$d*" }
    if ($hit) { $report += [pscustomobject]@{Check='DNSCache'; IOC=$d; Detail=$hit.Data; Severity='CRITICAL'} }
}

Write-Host "[*] Checking active/historical TCP connections to phishing IP..." -ForegroundColor Cyan
$conns = Get-NetTCPConnection | Where-Object { $_.RemoteAddress -eq $PhishIP }
if ($conns) {
    foreach ($c in $conns) {
        $proc = Get-Process -Id $c.OwningProcess
        $report += [pscustomobject]@{Check='NetworkConnection'; IOC=$PhishIP; Detail="$($proc.ProcessName) (PID $($c.OwningProcess)) -> $($c.RemoteAddress):$($c.RemotePort)"; Severity='CRITICAL'}
    }
}

Write-Host "[*] Checking browser history databases for phishing domains (Chrome/Edge)..." -ForegroundColor Cyan
$historyPaths = @(
    "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\History",
    "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\History"
)
foreach ($hp in $historyPaths) {
    if (Test-Path $hp) {
        $tmp = Join-Path $env:TEMP ("hist_" + [guid]::NewGuid().ToString('N'))
        Copy-Item $hp $tmp -Force
        $raw = [System.IO.File]::ReadAllBytes($tmp)
        $txt = [System.Text.Encoding]::ASCII.GetString($raw)
        foreach ($d in $PhishDomains) {
            if ($txt -match [regex]::Escape($d)) {
                $report += [pscustomobject]@{Check='BrowserHistory'; IOC=$d; Detail="Found in $hp"; Severity='HIGH'}
            }
        }
        Remove-Item $tmp -Force
    }
}

Write-Host "[*] Checking for suspicious Office 365 token cache artifacts (possible token theft)..." -ForegroundColor Cyan
$msalCache = "$env:LOCALAPPDATA\.IdentityService"
$wamPaths = @("$env:LOCALAPPDATA\Packages\Microsoft.AAD.BrokerPlugin_cw5n1h2txyewy")
foreach ($p in @($msalCache) + $wamPaths) {
    if (Test-Path $p) {
        $recent = Get-ChildItem $p -Recurse -Force | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-3) }
        if ($recent) {
            $report += [pscustomobject]@{Check='TokenCacheActivity'; IOC='MSAL/WAM cache'; Detail="$($recent.Count) token artifacts modified in last 72h — correlate with device code sign-in logs"; Severity='MEDIUM'}
        }
    }
}

Write-Host "[*] Checking for Outlook inbox rules indicating post-compromise persistence..." -ForegroundColor Cyan
$rulesPath = "HKCU:\Software\Microsoft\Office\16.0\Outlook\Profiles"
if (Test-Path $rulesPath) {
    $report += [pscustomobject]@{Check='InboxRules'; IOC='N/A'; Detail='Outlook profile present — export rules via Graph: GET /me/mailFolders/inbox/messageRules and audit for forwarding/deletion rules'; Severity='INFO'}
}

Write-Host "`n===== HUNT RESULTS =====" -ForegroundColor Yellow
if ($report.Count -gt 0) {
    $report | Sort-Object Severity | Format-Table -AutoSize
    $report | Export-Csv -Path ".\wazza_llmjack_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
    Write-Host "[*] Results exported to CSV. CRITICAL/HIGH hits: isolate host and begin identity response." -ForegroundColor Red
} else {
    Write-Host "[+] No indicators found on this host. Continue identity-log correlation in Sentinel." -ForegroundColor Green
}

Write-Host "`n[*] MANUAL FOLLOW-UP (cloud side):" -ForegroundColor Cyan
Write-Host "    Entra: Search-UnifiedAuditLog for 'device code' flows; revoke refresh tokens via Revoke-MgUserSignInSession"
Write-Host "    GCP: gcloud logging read 'protoPayload.methodName=(SetOrgPolicy OR CreateServiceAccount)' --freshness=7d"

Response Priorities

Immediate (0–4 hours)

  • Block all 16 IOC domains and 212.73.134.136 at DNS sinkhole, secure web gateway, and egress firewall. Add beacon-surge-sync.workers.dev as a hostname-level block (do not blanket-block workers.dev).
  • Pull Entra ID sign-in logs filtered on authentication_protocol = deviceCode for the last 14 days. Any non-corporate-IP device code sign-in = treat as compromised.
  • Pull GCP audit logs for SetOrgPolicy, CreateServiceAccount, CreateServiceAccountKey, and IAM grants to external domains in the last 14 days.
  • Run the PowerShell hunt script on endpoints of any user who received invoice/contract-themed PDFs since July 2026.

24 Hours (identity response — this is credential-theft activity)

  • Revoke refresh tokens and force re-authentication for every user with a suspicious device code event (Revoke-MgUserSignInSession). Password resets alone are insufficient against OAuth token theft.
  • Audit and remove unauthorized inbox forwarding/deletion rules and newly registered MFA/auth methods on affected accounts.
  • For GCP: disable and delete attacker-created service accounts and keys, remove external IAM bindings, restore org policies (iam.allowedPolicyMemberDomains, service account creation constraints), and review Gemini API usage for billing anomalies.
  • Assume harvested credentials are en route to dark web markets/IABs — check credential exposure services for your domains and force rotation where found.

1 Week (architectural hardening)

  • Disable the OAuth device code flow tenant-wide in Entra ID via Conditional Access authentication flows policy unless a documented business need exists — this single control neutralizes the entire Wazza kit class.
  • Enforce phishing-resistant MFA (FIDO2/passkeys) for privileged and cloud-console users in both Entra and GCP.
  • Block or alert on sponsored search results at the proxy for cloud-console-related queries, and deploy typosquat pattern detection for Google/Microsoft brand permutations.
  • Enable GCP billing budget alerts with tight thresholds and Gemini API quota alerts — LLMjacking is first visible in billing telemetry, not security telemetry.
  • Deploy the Sigma rules above to production and validate the Sentinel KQL hunt as a scheduled analytic rule with a 2-hour correlation window.

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.