Back to Intelligence

TRUST#GRAFT WordPress Admin PHP Backdoor + Year-End Phishing Credential Harvesting: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
October 23, 2026
9 min read

Two live OTX pulses converge on a single theme: browser-session abuse and credential theft at scale. One campaign hijacks authenticated WordPress administrator sessions to plant persistent PHP backdoors; the other floods finance, technology, telecom, manufacturing, real estate, and aviation sectors with year-end phishing lures impersonating compensation adjustments, Q4 invoices, access reviews, and benefits statements. Both are credential-centric operations feeding the dark web access-broker economy.


Threat Summary

TRUST#GRAFT (attributed to the Web Media Optimizer malware family) is a multi-stage attack chain that begins with JavaScript loaders injected into compromised websites. Victims — specifically WordPress administrators — are presented with fake Cloudflare-style verification screens (a ClickFix-pattern social engineering technique) while the script silently performs browser fingerprinting, harvests credentials from browser storage, and profiles the environment. The critical pivot: once an authenticated WordPress admin session is detected, the malware abuses that live session to deploy a persistent PHP backdoor on the server, converting a client-side compromise into full web-server control. Compromised WordPress infrastructure is routinely resold on dark web forums as initial access for ransomware affiliates and SEO-poisoning operators.

2026 Year End Phishing Lures represents a seasonal social-engineering wave exploiting fiscal-year-close administrative noise. Attackers impersonate HR compensation notices, Q4 financial documents, DocuSign signing requests, SharePoint access reviews, and invoice follow-ups. The infrastructure — heavily concentrated on Japanese hosting (GMO Internet AS7506, NTT AS4713, J:COM AS4721) — supports credential-harvesting pages designed to capture corporate SSO identities. Targeted verticals (Finance, Technology, Telecommunications, Manufacturing, Real Estate, Aviation) align with organizations processing high volumes of year-end approvals, where a single captured credential enables BEC, wire fraud, or internal pivoting.

Collectively, these pulses reveal a credential-theft kill chain operating at both ends of the attack surface: end-user browsers and server-side administrative control panels.


Threat Actor / Malware Profile

Web Media Optimizer (TRUST#GRAFT)

  • Distribution Method: Malicious JavaScript injected into legitimate/compromised websites; fake Cloudflare verification interstitials (ClickFix technique) tricking users into executing or approving attacker-controlled actions.
  • Payload Behavior: Browser fingerprinting (canvas, user-agent, plugin enumeration), extraction of credentials and session tokens from browser storage, environment profiling to identify authenticated WordPress admin sessions.
  • Persistence Mechanism: Server-side PHP backdoor written via the hijacked admin session (typically via theme/plugin editor or malicious plugin upload), enabling long-term web shell access independent of the original client compromise.
  • C2 Communication: Outbound beacons to loader/exfiltration domains including gerlace.com, caapman.me, okuneva.sbs, and vtevens.icu — note the abuse of low-reputation TLDs (.sbs, .icu).
  • Anti-Analysis Techniques: Conditional execution gated on fingerprint results (only firing the admin-pivot stage when a high-value session is detected), obfuscated JavaScript loaders, and disposable domain rotation.

Year-End Phishing Operation

  • Distribution Method: Bulk email lures themed around raises, Q4 invoices, benefits enrollment, and IT access reviews; DocuSign and SharePoint impersonation pages.
  • Payload Behavior: Credential-harvesting landing pages cloning Microsoft 365 / SSO portals; captured credentials staged for account takeover or resale.
  • Infrastructure: Concentrated on JP hosting (AS7506 GMO, AS4713 NTT, AS4721 J:COM) with mix of compromised legitimate domains (bvlbetonvloeren.be, tropical100.com.do, rsfashionsdesignbd.com) and throwaway registrations (englaus.sbs).

IOC Analysis

Indicator TypeCount (sampled)ExamplesOperationalization
Domains7gerlace.com, caapman.me, okuneva.sbs, vtevens.icu, englaus.sbsDNS sinkhole / proxy block; alert on resolution in DNS & proxy logs; retro-search 90 days
IPv44157.7.189.101, 157.7.44.119, 118.20.84.128, 123.98.253.31Egress firewall block; correlate with web proxy and email gateway logs; flag AS7506/4713/4721 hosting for year-end lure pages
FileHash (MD5/SHA1/SHA256)4+07955dcb5f4f80c90ede398879589f2e369eb2d84c4975d3c8adf08433783409EDR hash blocklist; scan web servers for matching PHP artifacts in wp-content, themes, and uploads directories

SOC teams should operationalize via: (1) threat intel platform ingestion (MISP/OpenCTI) with automatic push to DNS firewall and secure web gateway; (2) retro-hunt across proxy, DNS, and email security logs for the domain set; (3) WordPress integrity scanning — diff core/theme/plugin PHP files against known-good, audit recently modified .php files in wp-content/uploads/, and review admin accounts created in the last 90 days; (4) email gateway retro-search for lure themes ("compensation adjustment", "Q4 invoice", "access review", "benefits statement") delivered from the listed IPs/domains.


Detection Engineering

YAML
---
title: TRUST#GRAFT Fake Cloudflare ClickFix JavaScript Loader Execution
id: 7c3a1f2e-9b41-4d6a-a8e5-2f1c9d4b6a01
status: experimental
description: Detects browser process spawning command interpreters or script hosts consistent with ClickFix-style fake verification lures and clipboard/paste-execution patterns observed in TRUST#GRAFT Web Media Optimizer campaigns.
author: Security Arsenal Threat Intelligence
date: 2026/10/24
references:
    - https://www.securonix.com/blog/trust-graft-wordpress-admin-php-backdoor/
logsource:
    category: process_creation
    product: windows
detection:
    selection_browser_parent:
        ParentImage|endswith:
            - '\chrome.exe'
            - '\msedge.exe'
            - '\firefox.exe'
            - '\brave.exe'
    selection_child:
        Image|endswith:
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\cmd.exe'
            - '\mshta.exe'
            - '\wscript.exe'
            - '\cscript.exe'
            - '\rundll32.exe'
    condition: selection_browser_parent and selection_child
falsepositives:
    - Browser-based legitimate admin tooling (rare)
level: high
tags:
    - attack.initial_access
    - attack.t1189
    - attack.t1204
    - attack.t1059
---
title: TRUST#GRAFT PHP Backdoor Dropped Into WordPress Content Directories
id: 8d4b2f3a-1c52-4e7b-b9f6-3a2d0e5c7b12
status: experimental
description: Detects web server processes (php-fpm, apache, nginx, IIS worker) writing PHP files into WordPress content, uploads, theme, or plugin directories — consistent with TRUST#GRAFT abuse of authenticated admin sessions to deploy persistent PHP backdoors.
author: Security Arsenal Threat Intelligence
date: 2026/10/24
references:
    - https://www.securonix.com/blog/trust-graft-wordpress-admin-php-backdoor/
logsource:
    category: file_event
    product: linux
    service: webserver
detection:
    selection_path:
        TargetFilename|contains:
            - '/wp-content/uploads/'
            - '/wp-content/themes/'
            - '/wp-content/plugins/'
            - '/wp-includes/'
    selection_ext:
        TargetFilename|endswith: '.php'
    filter_known:
        TargetFilename|contains:
            - '/wp-content/plugins/'  # plugin installs write here legitimately; tune per CMS management workflow
    condition: selection_path and selection_ext and not filter_known
falsepositives:
    - Legitimate plugin/theme installations via WP admin panel — correlate with admin audit logs and change windows
level: high
tags:
    - attack.persistence
    - attack.t1505.003
    - attack.t1100
---
title: Network Connection to TRUST#GRAFT or Year-End Phishing Infrastructure
id: 9e5c3a4b-2d63-4f8c-c0a7-4b3e1f6d8c23
status: experimental
description: Detects DNS resolution or outbound connection to domains associated with the TRUST#GRAFT loader C2 and the 2026 year-end phishing lure infrastructure published in OTX pulses.
author: Security Arsenal Threat Intelligence
date: 2026/10/24
logsource:
    category: dns
    product: windows
detection:
    selection_domain:
        query|contains:
            - 'gerlace.com'
            - 'caapman.me'
            - 'okuneva.sbs'
            - 'vtevens.icu'
            - 'englaus.sbs'
            - 'rsfashionsdesignbd.com'
            - 'bvlbetonvloeren.be'
            - 'tropical100.com.do'
    condition: selection_domain
falsepositives:
    - Threat research activity
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
    - attack.t1566
KQL — Microsoft Sentinel / Defender
// Sentinel hunt: TRUST#GRAFT C2 + year-end phishing infrastructure + ClickFix browser-spawned execution
let SuspiciousDomains = dynamic(["gerlace.com","caapman.me","okuneva.sbs","vtevens.icu","englaus.sbs","rsfashionsdesignbd.com","bvlbetonvloeren.be","tropical100.com.do"]);
let SuspiciousIPs = dynamic(["157.7.189.101","157.7.44.119","118.20.84.128","123.98.253.31"]);
let ScriptHosts = dynamic(["powershell.exe","pwsh.exe","cmd.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe"]);
let Browsers = dynamic(["chrome.exe","msedge.exe","firefox.exe","brave.exe"]);
union isfuzzy=true
(
    DeviceNetworkEvents
    | where TimeGenerated > ago(30d)
    | where RemoteUrl has_any (SuspiciousDomains) or RemoteIP in (SuspiciousIPs)
    | project HuntType="NetworkIOC", TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteUrl, RemoteIP, RemotePort
),
(
    DeviceProcessEvents
    | where TimeGenerated > ago(30d)
    | where InitiatingProcessFileName in~ (Browsers) and FileName in~ (ScriptHosts)
    | project HuntType="ClickFixExecution", TimeGenerated, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, AccountName
),
(
    DeviceFileEvents
    | where TimeGenerated > ago(30d)
    | where SHA256 in~ ("07955dcb5f4f80c90ede398879589f2e369eb2d84c4975d3c8adf08433783409","0a3cb24e0d0c05b544a3e32affe3ea8a4ed87c0cc90e918c10b94d3b849d76fa")
       or MD5 in~ ("197f6a5103870ab3bb1a213f27a63c73")
    | project HuntType="MalwareHash", TimeGenerated, DeviceName, FolderPath, FileName, SHA256
)
| sort by TimeGenerated desc
PowerShell
# Security Arsenal - TRUST#GRAFT & Year-End Phishing Host Hunt
# Run elevated on endpoints and (adapted paths) WordPress servers
$ErrorActionPreference = 'SilentlyContinue'
$Report = @()

# 1) Check DNS client cache for malicious domains
$badDomains = @('gerlace.com','caapman.me','okuneva.sbs','vtevens.icu','englaus.sbs','rsfashionsdesignbd.com','bvlbetonvloeren.be','tropical100.com.do')
$dns = Get-DnsClientCache | Where-Object { $n = $_.Name; $badDomains | Where-Object { $n -like "*$_*" } }
if ($dns) { $Report += [pscustomobject]@{Check='DNSCache'; Finding=($dns | Out-String)} }

# 2) Active/established connections to malicious IPs
$badIPs = @('157.7.189.101','157.7.44.119','118.20.84.128','123.98.253.31')
$conns = Get-NetTCPConnection -State Established | Where-Object { $_.RemoteAddress -in $badIPs }
if ($conns) { $Report += [pscustomobject]@{Check='NetConnections'; Finding=($conns | Select-Object LocalPort,RemoteAddress,RemotePort,OwningProcess | Out-String)} }

# 3) Hash sweep for known Web Media Optimizer payloads
$badHashes = @('07955dcb5f4f80c90ede398879589f2e369eb2d84c4975d3c8adf08433783409','0a3cb24e0d0c05b544a3e32affe3ea8a4ed87c0cc90e918c10b94d3b849d76fa')
$sweepPaths = @('C:\inetpub','C:\xampp\htdocs','C:\wamp64\www','C:\Users\Public\Downloads')
foreach ($p in $sweepPaths) {
    Get-ChildItem -Path $p -Recurse -Include *.php,*.js,*.exe,*.dll -File | ForEach-Object {
        $h = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
        if ($badHashes -contains $h) { $Report += [pscustomobject]@{Check='MalwareHash'; Finding=$_.FullName} }
    }
}

# 4) WordPress PHP backdoor sweep: recently modified .php files in uploads (should be near-zero)
$wpRoots = @('C:\inetpub\wwwroot','C:\xampp\htdocs','/var/www/html')
foreach ($root in $wpRoots) {
    if (Test-Path $root) {
        Get-ChildItem -Path $root -Recurse -Include *.php -File |
            Where-Object { $_.FullName -match 'wp-content\\uploads' -and $_.LastWriteTime -gt (Get-Date).AddDays(-90) } |
            ForEach-Object { $Report += [pscustomobject]@{Check='UploadsPHP'; Finding="$($_.FullName) modified $($_.LastWriteTime)"} }
    }
}

# 5) Persistence review: suspicious scheduled tasks & run keys spawned by browsers/script hosts
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'powershell|mshta|wscript|cscript|rundll32' -and $_.TaskPath -notlike '\Microsoft*' } |
    ForEach-Object { $Report += [pscustomobject]@{Check='ScheduledTask'; Finding="$($_.TaskName) -> $($_.Actions.Execute) $($_.Actions.Arguments)"} }
$runKeys = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')
foreach ($k in $runKeys) {
    (Get-ItemProperty $k).PSObject.Properties | Where-Object { $_.Value -match 'powershell|mshta|wscript|appdata' } |
        ForEach-Object { $Report += [pscustomobject]@{Check='RunKey'; Finding="$k\$($_.Name) = $($_.Value)"} }
}

if ($Report.Count -eq 0) { Write-Output '[+] No TRUST#GRAFT / phishing indicators found.' } else { $Report | Format-List }

Response Priorities

Immediate (0–4 hours)

  • Block all listed domains and IPs at DNS firewall, secure web gateway, and egress firewall; sinkhole gerlace.com, caapman.me, okuneva.sbs, vtevens.icu.
  • Push the SHA256/MD5 hashes to EDR blocklists and scan all WordPress servers for matching PHP artifacts.
  • Audit every WordPress instance for unauthorized admin accounts, recently modified PHP in wp-content/uploads/, and unexpected plugin/theme changes in the last 90 days.
  • Run the ClickFix process-ancestry hunt (browser → script host) across the fleet.

24 Hours

  • Both campaigns are credential-theft operations: enforce forced password resets and MFA re-verification for any user who visited a flagged domain, and for all WordPress administrators organization-wide.
  • Review IdP/SSO sign-in logs (Entra ID, Okta) for anomalous authentications following phishing-lure delivery windows; revoke active sessions and refresh tokens for exposed accounts.
  • Retro-search email gateways for year-end lure subjects and purge undelivered copies; notify targeted users.
  • Assume any harvested WordPress admin credential was used: rotate application passwords, API keys, and database credentials.

1 Week

  • Harden WordPress: disable the built-in theme/plugin file editor (DISALLOW_FILE_EDIT), enforce FIDO2 MFA for admins, restrict admin panel access by network allowlist, and deploy file-integrity monitoring on web roots.
  • Deploy ClickFix-aware controls: block browser-spawned script interpreters via EDR policy, and restrict powershell.exe/mshta.exe for standard users.
  • Upgrade email defenses for seasonal lures: banner external emails referencing HR/finance actions, enforce DMARC reject, and add DocuSign/SharePoint lookalike-domain detection.
  • Conduct targeted user awareness for finance/HR/IT staff on year-end compensation, invoice, and access-review phishing themes.

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.