Threat Level: CRITICAL — Active exploitation observed since 2026-09-04. No patch available.
Threat Summary
AlienVault OTX pulse data, sourced from Sansec research, confirms an actively exploited, unpatched zero-day vulnerability tracked as StyleSmuggler (CVE-2025-54236) affecting all current versions of Magento Open Source and Adobe Commerce, including 2.4.9. Exploitation in the wild began on September 4th, 2026, and the campaign is targeting the retail / e-commerce sector at scale.
The attack chain operates in two stages:
- Stage 1 — Injection: The adversary smuggles malicious PHP code into the platform via style properties (CSS/template style attributes processed server-side), deliberately abusing the styling pipeline to evade Magento's built-in input sanitization and layout safeguards.
- Stage 2 — Execution: The injected payload is triggered through the failed payment email template rendering engine. When the platform renders a failed-payment transactional email, the attacker-controlled PHP is evaluated — achieving unauthenticated remote code execution on the web server.
The objective is consistent with financially motivated e-commerce intrusion campaigns: deployment of backdoors and payment skimmers (Magecart-style) to harvest customer payment card data, session tokens, and administrative credentials. References to GraphQL in the pulse tags suggest the attack surface may also be reachable via Magento's GraphQL API endpoints, which are commonly exposed and unauthenticated by design.
Because no patch exists, virtual patching, WAF rules, and behavioral detection are the only lines of defense right now.
Threat Actor / Malware Profile
Attribution: Unknown. The tradecraft — two-stage template injection, PHP backdoor deployment, and payment-flow targeting — is consistent with established Magecart-affiliated e-crime groups that specialize in CMS-level compromise of payment platforms rather than client-side skimming.
Distribution Method: Direct, unauthenticated exploitation of internet-facing Magento/Adobe Commerce instances. No social engineering required. Any exposed storefront is a candidate target.
Payload Behavior:
- Malicious PHP smuggled through
stylesproperties in layout/template data - Execution triggered via the failed payment email template renderer — a clever living-off-the-platform technique because template rendering is a trusted, legitimate code path
- Post-exploitation activity typically includes web shell deployment, credential harvesting from
app/etc/env.php(database creds, encryption keys, admin panel paths), and injection of payment skimmers into checkout flows
C2 / Infrastructure:
windwsecurity.run— suspected malicious staging/C2 domain (typosquat-styled, recent-registration profile typical of e-crime infrastructure)ecomscan.com— referenced in pulse; note this domain is associated with Sansec's scanner service and may appear as a scanner artifact in logs. Analysts should distinguish scanner traffic from genuine attacker traffic before blockingntp.timesysnc.net— suspicious hostname masquerading as a time-sync service (note the transposition: "timesysnc" vs "timesync"). Likely used for beaconing disguised as NTP traffic
Persistence Mechanism: Backdoor PHP files written to the web root or pub/media directories; potential cron job abuse via Magento's cron_schedule table; admin account creation in the admin_user table.
Anti-Analysis Techniques: Code smuggling through style properties specifically designed to bypass sanitization; execution deferred to a trusted template-rendering path, which defeats naive file-upload scanning; typosquatted infrastructure blending into legitimate noise (NTP, security-branded domains).
IOC Analysis
The pulse contains 8 sampled indicators (16 total in OTX) across four types:
| Type | Indicator | Operationalization |
|---|---|---|
| CVE | CVE-2025-54236 | Vulnerability scanning, asset inventory correlation |
| Domain | windwsecurity.run | Block at DNS/proxy; hunt historical resolution |
| Domain | ecomscan.com | Contextual — verify scanner vs. attacker use before blocking |
| Hostname | ntp.timesysnc.net | DNS block; hunt for beaconing in proxy/DNS logs |
| MD5 | a07bc08eded18cc7317216cbbd7032d2 | EDR hash blocklist; retro-hunt |
| SHA1 | 11d6a0c1000576915584c49c7039206bbb4c24d1 | Secondary hash correlation |
| SHA256 | b79dfdc1eed860e0b76c629d6adfce251db379b0b45a6d728d4ef483f7551420 | Primary file indicator — likely backdoor payload |
| SHA256 | e315687a1dfe61ef4a5a5642214db6d3b2b05d81391285eebc2af664641a26a7 | Secondary payload/stager hash |
SOC Guidance:
- Push
windwsecurity.runandntp.timesysnc.netto DNS sinkhole, SWG, and EDR network blocklists immediately - Load both SHA256 hashes into your EDR's reputation/blocklist module and run retroactive hunts across the last 30 days of file creation events on all web servers
- Detonate the hashes in a sandbox (ANY.RUN, Hybrid Analysis, VirusTotal) to extract additional C2 and dropped-file artifacts
- Pivot on
ntp.timesysnc.netin passive DNS to identify sibling infrastructure — typosquat campaigns almost always operate clusters
Detection Engineering
The following detections target the specific StyleSmuggler behaviors: PHP code written by web server processes, execution via template/email rendering paths, and beaconing to campaign infrastructure.
---
title: StyleSmuggler - Web Server Process Spawning Suspicious Child Process
description: Detects PHP-FPM/Apache/Nginx spawning shells or interpreters, consistent with post-exploitation after CVE-2025-54236 RCE on Magento/Adobe Commerce
status: experimental
logsource:
category: process_creation
product: linux
author: Security Arsenal Threat Intelligence
date: 2026/09/08
references:
- https://sansec.io/research/stylesmuggler
detection:
selection_parent:
ParentImage|endswith:
- '/php-fpm'
- '/php-fpm8.1'
- '/php-fpm8.2'
- '/php-fpm8.3'
- '/apache2'
- '/httpd'
- '/nginx'
selection_child:
Image|endswith:
- '/sh'
- '/bash'
- '/dash'
- '/curl'
- '/wget'
- '/python'
- '/python3'
- '/perl'
- '/nc'
- '/ncat'
- '/base64'
condition: selection_parent and selection_child
falsepositives:
- Magento cron jobs invoking shell wrappers (review CommandLine for cron.php context)
level: high
tags:
- attack.execution
- attack.t1059
- attack.t1190
---
title: StyleSmuggler - PHP File Written to Magento Web-Accessible Directories
description: Detects creation of PHP files in web root, pub/media, or template directories by web server processes - a hallmark of StyleSmuggler backdoor deployment
status: experimental
logsource:
category: file_event
product: linux
author: Security Arsenal Threat Intelligence
date: 2026/09/08
references:
- https://sansec.io/research/stylesmuggler
detection:
selection_path:
TargetFilename|contains:
- '/var/www/html/pub/media/'
- '/pub/static/'
- '/app/code/'
- '/app/design/'
- '/var/view_preprocessed/'
- '/generated/code/'
selection_ext:
TargetFilename|endswith:
- '.php'
- '.phtml'
- '.phar'
- '.php5'
- '.php7'
filter_known:
Image|endswith:
- '/composer'
- '/bin/magento'
condition: selection_path and selection_ext and not filter_known
falsepositives:
- Legitimate deployments, module installations, cache generation
level: high
tags:
- attack.persistence
- attack.t1505.003
- attack.t1190
---
title: StyleSmuggler - Beaconing to Campaign C2 Infrastructure
description: Detects network connections or DNS queries to known StyleSmuggler C2 and staging infrastructure identified in OTX pulse data
status: experimental
logsource:
category: network_connection
author: Security Arsenal Threat Intelligence
date: 2026/09/08
references:
- https://sansec.io/research/stylesmuggler
detection:
selection_domain:
DestinationHostname|contains:
- 'windwsecurity.run'
- 'ntp.timesysnc.net'
condition: selection_domain
falsepositives:
- Unlikely; both indicators are typosquat/staging domains
level: critical
tags:
- attack.command_and_control
- attack.t1071
- attack.t1071.001
// StyleSmuggler (CVE-2025-54236) Hunt — Magento/Adobe Commerce RCE + C2
// Coverage: C2 beaconing, web shell deployment, web server process anomalies
let lookback = 14d;
let c2_indicators = dynamic(["windwsecurity.run", "ntp.timesysnc.net", "ecomscan.com"]);
let payload_hashes = dynamic([
"b79dfdc1eed860e0b76c629d6adfce251db379b0b45a6d728d4ef483f7551420",
"e315687a1dfe61ef4a5a5642214db6d3b2b05d81391285eebc2af664641a26a7"
]);
let NetworkHits = DeviceNetworkEvents
| where TimeGenerated > ago(lookback)
| where RemoteUrl has_any (c2_indicators)
or RemoteUrl contains "timesysnc"
| project TimeGenerated, DeviceName, RemoteUrl, RemoteIP, InitiatingProcessFileName, InitiatingProcessCommandLine
| extend HuntHit = "C2_Beacon";
let FileHits = DeviceFileEvents
| where TimeGenerated > ago(lookback)
| where SHA256 in (payload_hashes)
or (FolderPath has_any ("/pub/media/", "/pub/static/", "/var/view_preprocessed/", "/app/code/")
and FileName endswith ".php")
| project TimeGenerated, DeviceName, FolderPath, FileName, SHA256, InitiatingProcessFileName
| extend HuntHit = "Backdoor_File";
let ProcessHits = DeviceProcessEvents
| where TimeGenerated > ago(lookback)
| where InitiatingProcessFileName has_any ("php-fpm", "apache2", "httpd", "nginx")
| where FileName has_any ("sh", "bash", "curl", "wget", "python", "nc", "base64", "perl")
| where ProcessCommandLine !contains "cron.php"
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, AccountName
| extend HuntHit = "WebShell_Execution";
union NetworkHits, FileHits, ProcessHits
| sort by TimeGenerated desc
# StyleSmuggler (CVE-2025-54236) IOC Hunt Script — Security Arsenal
# Run on suspected Magento/Adobe Commerce web servers (Windows/IIS-hosted or jump hosts)
# For Linux hosts, see the bash equivalent below in comments.
$ErrorActionPreference = 'SilentlyContinue'
$report = @()
Write-Host "[+] StyleSmuggler IOC Hunt — $(Get-Date)" -ForegroundColor Cyan
# --- 1. Check DNS cache for C2 indicators ---
Write-Host "[*] Checking DNS cache for StyleSmuggler C2..." -ForegroundColor Yellow
$c2 = @('windwsecurity.run','ntp.timesysnc.net','ecomscan.com')
$dns = Get-DnsClientCache
foreach ($ioc in $c2) {
$hits = $dns | Where-Object { $_.Entry -like "*$ioc*" }
if ($hits) {
$report += [PSCustomObject]@{Check='DNS_Cache'; IOC=$ioc; Result="HIT — $($hits.Entry -join ', ')"; Severity='CRITICAL'}
Write-Host " [!] DNS HIT: $ioc" -ForegroundColor Red
}
}
# --- 2. Hunt for payload hashes across web roots ---
Write-Host "[*] Hashing files in common web roots (may take time)..." -ForegroundColor Yellow
$targetHashes = @(
'b79dfdc1eed860e0b76c629d6adfce251db379b0b45a6d728d4ef483f7551420',
'e315687a1dfe61ef4a5a5642214db6d3b2b05d81391285eebc2af664641a26a7',
'a07bc08eded18cc7317216cbbd7032d2'
)
$webRoots = @('C:\inetpub\wwwroot','C:\xampp\htdocs','D:\www','/var/www/html')
foreach ($root in $webRoots) {
if (Test-Path $root) {
Get-ChildItem -Path $root -Recurse -File -Include *.php,*.phtml,*.phar,*.php5 -ErrorAction SilentlyContinue |
ForEach-Object {
$sha = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
$md5 = (Get-FileHash $_.FullName -Algorithm MD5).Hash.ToLower()
if ($targetHashes -contains $sha -or $targetHashes -contains $md5) {
$report += [PSCustomObject]@{Check='File_Hash'; IOC=$sha; Result="HIT — $($_.FullName)"; Severity='CRITICAL'}
Write-Host " [!] MALICIOUS FILE: $($_.FullName)" -ForegroundColor Red
}
}
}
}
# --- 3. Hunt for recently created PHP files (backdoor deployment window) ---
Write-Host "[*] Scanning for PHP files modified since exploitation began (2026-09-04)..." -ForegroundColor Yellow
$exploitStart = Get-Date '2026-09-04'
foreach ($root in $webRoots) {
if (Test-Path $root) {
Get-ChildItem -Path $root -Recurse -File -Include *.php,*.phtml -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -gt $exploitStart } |
ForEach-Object {
$report += [PSCustomObject]@{Check='Recent_PHP'; IOC=$_.FullName; Result="Modified $($_.LastWriteTime)"; Severity='REVIEW'}
}
}
}
# --- 4. Check active network connections to suspicious domains ---
Write-Host "[*] Checking active connections..." -ForegroundColor Yellow
Get-NetTCPConnection -State Established |
Where-Object { $_.RemotePort -in 80,443,53,123 } |
ForEach-Object {
$rdns = ([System.Net.Dns]::GetHostEntry($_.RemoteAddress)).HostName
foreach ($ioc in $c2) {
if ($rdns -like "*$ioc*") {
$report += [PSCustomObject]@{Check='Active_Connection'; IOC=$ioc; Result="$($_.RemoteAddress) ($rdns) PID $($_.OwningProcess)"; Severity='CRITICAL'}
}
}
}
# --- 5. Audit local admin accounts (post-exploitation persistence) ---
Write-Host "[*] Auditing recently created local users..." -ForegroundColor Yellow
Get-LocalUser | Where-Object { $_.Created -gt $exploitStart } |
ForEach-Object {
$report += [PSCustomObject]@{Check='New_Local_User'; IOC=$_.Name; Result="Created $($_.Created)"; Severity='HIGH'}
}
# --- Output ---
Write-Host "`n[+] Hunt complete. $($report.Count) findings." -ForegroundColor Cyan
$report | Format-Table -AutoSize
$report | Export-Csv -Path "StyleSmuggler_Hunt_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation
# Linux bash equivalent for hash hunt:
# find /var/www/html -type f \( -name '*.php' -o -name '*.phtml' \) -newermt 2026-09-04 -exec sha256sum {} \; | grep -Ei 'b79dfdc1|e315687a'
# grep -rEi 'windwsecurity\.run|timesysnc\.net' /var/log/{apache2,nginx,syslog}/ 2>/dev/null
Response Priorities
Immediate (0–4 hours)
- Block
windwsecurity.runandntp.timesysnc.netat DNS, proxy, and EDR network controls. Do NOT blockecomscan.comuntil verified — it may be scanner traffic - Push both SHA256 payload hashes to EDR blocklists; execute retroactive file hunts on all Magento/Adobe Commerce hosts
- Deploy the Sigma and KQL detections above; validate alert routing to the SOC
- If you run Magento/Adobe Commerce: place the storefront behind a WAF and block requests containing PHP tags or template directives in style property parameters (
style=,styles,data-style) until a patch ships - Audit
admin_usertable and Magentocron_schedulefor unauthorized entries
24 Hours
- Assume checkout compromise if exploitation is confirmed: force password resets for all admin accounts, rotate API keys, encryption keys (
crypt/keyin env.php), and database credentials - Rotate session secrets; invalidate all active customer sessions if skimmer injection is found
- Review outbound payment webhook and transactional email logs (failed payment emails are the execution trigger — inspect for anomalous render volume since Sept 4)
- Engage PCI-DSS incident response obligations if cardholder data exposure is suspected; determine breach notification requirements
1 Week
- Apply the official Adobe patch immediately upon release; subscribe to Adobe security bulletins (APSB) and Sansec advisories
- Architecturally isolate Magento cron and email rendering services from the web tier where feasible — the template renderer is a code-execution surface and should not run with full application privileges
- Implement egress filtering on web servers: storefronts have no legitimate reason to initiate outbound connections to arbitrary domains
- Deploy file integrity monitoring (FIM) on
app/code,app/design,pub/media, andgenerated/code - Conduct a purple-team exercise replaying the two-stage injection (style property smuggling → template execution) to validate the detections above
- Review GraphQL endpoint exposure; disable introspection and rate-limit unauthenticated queries
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.