CVE-2026-45247 — Mirasvit Full Page Cache Warmer (Magento / Adobe Commerce) Unauthenticated RCE

PHP Object Injection via attacker-controlled CacheWarmer cookie → unserialize() → Monolog gadget chain → remote code execution. Hunt the web host running Falcon.
Threat
CVE-2026-45247 (PHP Object Injection)
Severity
EXPLOITED ITW · CVSS 9.8
Type
Web app RCE → webshell / Magecart skimmer
Access
Unauthenticated, network (any storefront page)
KEV
Added 2026-06-03 · FCEB due 2026-06-06
Fixed In
Mirasvit FPC Warmer 1.11.12 (2026-05-25)
Version
v0.1 (Draft) · 2026-06-15
Author
HuntPack
Confidence
High (multi-vendor corroboration)
01

Executive Summary

What it is. CVE-2026-45247 is a critical (CVSS 9.8) unauthenticated remote-code-execution flaw in the Mirasvit "Full Page Cache Warmer" extension for Magento 2 / Adobe Commerce. The extension reads the attacker-controlled CacheWarmer HTTP cookie and passes it straight to PHP unserialize() with no allow-list on which classes may be instantiated. An attacker supplies a base64-encoded, crafted serialized PHP object; deserialization triggers magic methods (__destruct / __wakeup) that drive a Monolog gadget chain into system() / current(), yielding code execution as the web-server user.

Why it matters. A single crafted cookie on any storefront page is enough — no login, no admin path, fires on ordinary traffic. CISA added it to the KEV catalog on 2026-06-03 (FCEB remediation deadline 2026-06-06) on evidence of active exploitation. Imperva observed in-the-wild payloads running validation commands such as echo PWNED_CVE2026_$(date +%s) and sleep 5 before staging further tooling. The natural follow-on for a compromised Magento host is a web shell under pub/ or media/, a Magecart payment skimmer injected into checkout/CMS content, a rogue admin user, and persistence via cron or modified application files.

Defensive angle. The exploit is a cookie, so the loudest, highest-fidelity Falcon signal is behavioral on the web host: the PHP / web-server process tree (php-fpm, httpd, nginx, apache2) spawning shells or recon binaries, and executable / PHP file writes under public web roots. Those are the hunts in this pack. The cookie signature CacheWarmer=(Tz|Qz|YT)... is best matched at the WAF / reverse-proxy / access-log layer (Section 7) and forwarded to Falcon NGSIEM.

Defender priority: On every internet-facing Magento/Adobe Commerce host running Falcon, hunt php-fpm/httpd/nginx/apache2 spawning sh, bash, id, whoami, curl, wget, python (Q1) and new .php / executable writes under pub/ or media/ (Q3) right now. These two fire on the post-exploitation step regardless of how the cookie was crafted. Patch to 1.11.12 or disable the extension to remove the attack path.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Fwd
1 · GovCISA KEV catalogAdded 2026-06-03 on evidence of active exploitation; FCEB remediation due 2026-06-06.yes
1 · NVDNVD / CVEdetails CVE-2026-45247CWE-502 deserialization of untrusted data; all versions < 1.11.12; CVSS 9.8.yes
2 · VendorImperva advisoryITW payloads via CacheWarmer cookie; Monolog gadget chain (SyslogUdpHandler, BufferHandler, FingersCrossedHandler, GroupHandler); validation cmds echo PWNED_CVE2026_$(date +%s), sleep 5; targets gaming/business in US/UK/FR/AU.yes
2 · VendorIndusface blogRoot cause unserialize() of cookie; post-ex = rogue admin, unknown PHP/webshells, injected JS in CMS/checkout, payment skimmer; rotate admin + DB creds.yes
2 · PressThe Hacker NewsCookie indicator pattern CacheWarmer:(Tz|Qz|YT); payloads invoke system() / current(); disable extension as interim mitigation.yes
3 · Aggreg.Vulert / SecurityWeek / Security AffairsCorroborate KEV add, patch date 2026-05-25, fix in 1.11.12, automatable once patch diffed.partial

Hunter note: No atomic IOCs (attacker IPs, webshell hashes, skimmer domains) are published yet — attribution is unknown and reported goal is reconnaissance. This pack therefore leans on behavioral detections plus the cookie signature. The base64 cookie prefixes decode to PHP serialization markers: TzO: (object), QzC: (custom/serializable object), YTa: (array) — the presence of any of these in a CacheWarmer cookie indicates a serialized payload, which the extension never legitimately receives from a browser.

03

Hunt Brief & Attack Chain

Hunt hypotheses (ordered by fidelity)

  1. H1 (high): A web-server/PHP process (php-fpm, httpd, apache2, nginx) on a Magento host spawned a shell or recon binary (sh, bash, id, whoami, uname) — the direct footprint of gadget-chain command execution. Covers T1190 → T1059.
  2. H2 (high): The validation marker string PWNED_CVE2026 appears in a command line on the web host — Imperva's observed canary. Covers T1190 / T1059.004.
  3. H3 (high): A new .php or executable file was written under a public web root (pub/, media/, pub/static/) by the web-server user — webshell drop. Covers T1505.003.
  4. H4 (medium): The web-server/PHP process made an outbound network connection to an external host shortly after a write or shell event — tooling pull / C2 / skimmer beacon. Covers T1071 / T1105.
  5. H5 (medium): A reverse-shell command line (bash -i, /dev/tcp/, nc -e, python -c socket) is observed on the web host. Covers T1059.004 / T1571.
  6. H6 (medium): The web-server user registered a cron job or modified persistence files (crontab, /etc/cron.*). Covers T1053.003.
  7. H7 (medium): The cookie signature CacheWarmer=(Tz|Qz|YT) appears in forwarded access/WAF logs — exploitation attempt, pre-impact. Covers T1190 (native-log hunt, Section 7).
  8. H8 (low): New Magento admin user creation or app/etc/env.php / payment-config modification correlated to the web host — rogue admin / skimmer staging. Covers T1136 / T1505 (app-log hunt).

Attack chain

#StepTelemetryHunt Angle
1Recon: attacker fingerprints Magento + Mirasvit FPC Warmer < 1.11.12Web access logs, WAFRepeated requests setting CacheWarmer cookie
2Deliver: crafted base64 serialized object in CacheWarmer cookie on a storefront requestAccess/WAF logs → NGSIEMCookie value starts Tz/Qz/YT (Q7 / Section 7)
3Exploit: unserialize() instantiates Monolog gadget chain → system()/current()ProcessRollup2php-fpm/httpd parent spawns shell (Q1)
4Validate: attacker runs canary (echo PWNED_CVE2026_..., sleep 5)ProcessRollup2Canary string / sleep in cmdline (Q2)
5Stage: drop webshell under pub/ or media/FileCreateInfo / PeFileWrittenNew .php/executable in web root (Q3)
6Pull tooling / beacon C2 / fetch skimmerNetworkConnectIP4 / DnsRequestWeb process egress to external IP (Q4)
7Persist: cron, rogue admin, env.php / payment editsProcessRollup2 / FileCreateInfo / app logscron write (Q6), reverse shell (Q5), admin create (S7/H8)
8Impact: Magecart skimmer harvests cardholder data at checkoutApp logs, client-side monitoringInjected JS in CMS/checkout (native hunt, S7)
04

Consolidated IOC Table

No atomic IOCs published. No attacker IPs, webshell hashes, or skimmer domains are public as of 2026-06-15. The indicators below are behavioral / signature-based. Treat published values as starting points and validate in-tenant.

TypeValueConfidenceActionContextExpiry
Cookie signatureCacheWarmer=(Tz|Qz|YT)...highhuntSerialized PHP object (O:/C:/a:) in cookie — never sent by a real browser2026-09-15
Cmdline canaryPWNED_CVE2026highdetectImperva-observed exploitation validation marker2026-12-15
Cmdline patternsleep 5 spawned by web processmediumhuntTiming canary post-exploitation2026-09-15
Gadget classMonolog\Handler\SyslogUdpHandlerhighhuntGadget chain entry; appears in serialized payload / php-fpm error logs2026-12-15
Gadget classMonolog\Handler\BufferHandler / FingersCrossedHandler / GroupHandlerhighhuntGadget chain links2026-12-15
Behaviorphp-fpm/httpd/nginx/apache2 → sh/bash/id/whoamihighdetectPost-exploitation command execution (Q1)2026-12-15
BehaviorNew .php under pub/ or media/highdetectWebshell drop (Q3)2026-12-15
CWECWE-502 (Deserialization of Untrusted Data)highenrichRoot-cause class2026-12-15
05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Linux web host (php-fpm / nginx / apache2) running FalconProcessRollup2, FileCreateInfo, NetworkConnectIP4, DnsRequestCriticalLow — core Falcon Linux telemetry
Public web roots (pub/, media/, pub/static/)FileCreateInfo / file-write events with TargetFileNameHighMed — depends on file telemetry being enabled for Linux sensor
WAF / reverse proxy / Magento access logsHTTP log forwarding to Falcon NGSIEM (cookie field)HighHigh — cookie not in EDR; needs log ingest pipeline
Magento application (admin, env.php, payment config)App/audit logs forwarded to NGSIEMMediumHigh — app-layer, not native EDR
Storefront client (checkout/CMS JavaScript)Client-side integrity / CSP report-uri monitoringMediumHigh — outside EDR scope; needs SRI/CSP or external monitor
06

ATT&CK Mapping

TacticTechniqueNameObserved BehaviorQuery / Control
Initial AccessT1190Exploit Public-Facing ApplicationCrafted CacheWarmer cookie → unserialize() RCEQ7 / S7 · Patch
ExecutionT1059.004Command & Scripting: Unix Shellphp-fpm spawns sh/bash; canary commandsQ1, Q2, Q5
PersistenceT1505.003Server Software Component: Web Shell.php dropped under pub/ or media/Q3
PersistenceT1053.003Scheduled Task/Job: CronWeb-server user writes crontab / cron.dQ6
PersistenceT1136.001Create Account: Local AccountNew Magento admin userS7 / H8
DiscoveryT1082 / T1033System / Owner Discoveryid, whoami, uname spawned by web processQ1
Command & ControlT1071.001 / T1105Web Protocols / Ingress Tool TransferWeb process egress (curl/wget) to external hostQ4
Command & ControlT1571 / T1059.004Non-Standard Port / Reverse Shellbash -i >& /dev/tcp; nc -e; python socketQ5
Collection / ImpactT1056.003 / T1565Web Portal Capture / Data ManipulationMagecart JS skimmer in checkout/CMSS7 (native)
07

Native Audit-Log Hunts (non-CQL)

The exploit primitive is an HTTP cookie that never reaches the EDR process layer. These checks run at the web / app tier and feed Falcon NGSIEM where forwarded.

1 · WAF / reverse-proxy / Magento access logs — cookie signature

Search HTTP request logs for a CacheWarmer cookie whose value begins with a PHP serialization marker. Any match is high-fidelity — browsers never send serialized objects in this cookie.

grep -E 'CacheWarmer=(Tz|Qz|YT)' /var/log/nginx/access.log /var/log/apache2/access.log
# decode + confirm: base64 -d after the cookie value should reveal O: / C: / a: serialized PHP
# also flag overly long CacheWarmer cookie values (> 200 chars) regardless of prefix

2 · php-fpm / web-server error logs — gadget classes

grep -E 'Monolog\\(Handler\\)?(SyslogUdpHandler|BufferHandler|FingersCrossedHandler|GroupHandler)' \
  /var/log/php*-fpm.log /var/log/php_errors.log
# unserialize() of these handler classes outside legitimate logging = gadget-chain attempt

3 · Magento admin audit — rogue accounts & config tamper

  • Admin → System → Permissions → All Users: review for unexpected accounts created on/after 2026-05-25.
  • SELECT username, created, logdate FROM admin_user ORDER BY created DESC; — flag entries not in your change record.
  • Diff app/etc/env.php, payment-method config, and CMS blocks/pages against a known-good backup for injected JS or altered crypt key.

4 · Storefront client-side — Magecart skimmer

  • Compare checkout / CMS page JavaScript against baseline; look for unfamiliar external script src or inline form-field listeners.
  • If CSP is deployed, review report-uri violations for new script origins.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · Web/PHP process spawns shell or recon binary
CONF HIGHFP LOWCOST LOW

Looks for: a Magento web-server/PHP parent (php-fpm, httpd, apache2, nginx) spawning an interactive shell or recon tool — the direct footprint of gadget-chain command execution. FP: deploy/build scripts and legitimate site cron run via php-cli; scope to internet-facing storefront hosts and exclude known maintenance windows.

// HUNT: Web/PHP process spawns shell or recon binary (CVE-2026-45247 post-exploit)
// MITRE: T1190, T1059.004, T1082, T1033
// CONF: high  FP: low  COST: low | REQUIRES: Linux ProcessRollup2
// FALSE POSITIVES: deploy/build tooling, site cron via php-cli
// TUNING: restrict aid to Magento web hosts; exclude CI/deploy service accounts
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ event_platform=Lin
| ParentBaseFileName=/^(php-fpm|httpd|apache2|nginx|php)/i
| ImageFileName=/\/(sh|bash|dash|id|whoami|uname|hostname|cat|curl|wget|python[23]?|perl)$/i
| table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Q2 · Exploitation validation canary in command line
CONF HIGHFP LOWCOST LOW

Looks for: the Imperva-observed canary marker PWNED_CVE2026 or a bare sleep timing test spawned by a web process. The PWNED marker is essentially zero-FP. FP: the sleep clause alone can match benign scripts — keep it gated behind the web-process parent.

// HUNT: CVE-2026-45247 exploitation validation canary (PWNED marker / sleep test)
// MITRE: T1190, T1059.004
// CONF: high  FP: low  COST: low | REQUIRES: Linux ProcessRollup2
// FALSE POSITIVES: benign scripts using sleep (mitigated by web-parent gate)
// TUNING: PWNED_CVE2026 needs no tuning; drop the sleep alternation if noisy
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ event_platform=Lin
| ParentBaseFileName=/^(php-fpm|httpd|apache2|nginx|php)/i
| CommandLine=/PWNED_CVE2026|\bsleep\s+\d+\b/i
| table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Q3 · Webshell write under public web root (pub/ or media/)
CONF HIGHFP MEDCOST LOW

Looks for: a new .php / .phtml / executable file written under a Magento public web root — the classic webshell drop. FP: Magento static-content deploy regenerates files under pub/static/ and var/; exclude pub/static/ and deploy windows, focus on pub/media and media/ where PHP should never appear.

// HUNT: New PHP/executable written under Magento public web root (webshell)
// MITRE: T1505.003
// CONF: high  FP: medium  COST: low | REQUIRES: Linux FileCreateInfo (file telemetry)
// FALSE POSITIVES: setup:static-content:deploy writing under pub/static
// TUNING: exclude /pub/static/ paths and CI deploy accounts; PHP under media/ is never legitimate
#event_simpleName=/NewExecutableWritten|PeFileWritten/ event_platform=Lin
| TargetFileName=/\/(pub|media)\/.*\.(php|phtml|phar|pht)$/i
| TargetFileName!=/\/pub\/static\//i
| table([@timestamp, ComputerName, aid, TargetFileName, ImageFileName, UserName], limit=200)
Q4 · Web process makes outbound connection (tooling pull / C2)
CONF MEDFP MEDCOST MED

Looks for: a web-server/PHP process initiating an outbound IPv4 connection — staging additional tooling, beaconing, or fetching a skimmer. FP: Magento legitimately calls payment gateways, Adobe services, and package repos; exclude known-good destinations and RFC1918 internal addresses, then triage the remainder.

// HUNT: Web/PHP process outbound connection (ingress tool transfer / C2)
// MITRE: T1071.001, T1105
// CONF: medium  FP: medium  COST: medium | REQUIRES: Linux NetworkConnectIP4
// FALSE POSITIVES: payment gateway / Adobe / package-repo callbacks
// TUNING: allow-list known gateway + vendor CIDRs; exclude RFC1918 RemoteAddressIP4
#event_simpleName=NetworkConnectIP4 event_platform=Lin
| ContextBaseFileName=/^(php-fpm|httpd|apache2|nginx|php|sh|bash|curl|wget)/i
| RemoteAddressIP4!=/^(10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.|127\.)/
| table([@timestamp, ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
Q5 · Reverse-shell command line on web host
CONF HIGHFP LOWCOST LOW

Looks for: classic reverse-shell one-liners (bash -i + /dev/tcp, nc -e, python socket, php -r fsockopen) on a Magento host. FP: very rare in production web tier; any hit warrants immediate triage.

// HUNT: Reverse-shell command pattern on Magento web host
// MITRE: T1059.004, T1571
// CONF: high  FP: low  COST: low | REQUIRES: Linux ProcessRollup2
// FALSE POSITIVES: legitimate admin troubleshooting (rare)
// TUNING: scope to web hosts; alert on any match
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ event_platform=Lin
| CommandLine=/(bash\s+-i|\/dev\/tcp\/|nc\s+(-[a-z]*e|--exec)|python[23]?\s+-c\s+.*socket|php\s+-r\s+.*fsockopen|fsockopen\(|socket_create)/i
| table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, UserName], limit=200)
Q6 · Web-server user creates cron persistence
CONF MEDFP MEDCOST LOW

Looks for: creation/modification of cron artifacts (crontab exec, writes to /etc/cron.* or /var/spool/cron/) attributable to the web-server context. FP: Magento itself installs a cron entry at deploy; baseline the expected magento cron line and exclude it, alert on anything else.

// HUNT: Cron persistence created from web-server context
// MITRE: T1053.003
// CONF: medium  FP: medium  COST: low | REQUIRES: Linux ProcessRollup2 + FileCreateInfo
// FALSE POSITIVES: Magento's own deploy-time cron entry
// TUNING: exclude known magento cron install line; alert on web-user-owned cron edits
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ event_platform=Lin
| ParentBaseFileName=/^(php-fpm|httpd|apache2|nginx|php|sh|bash)/i
| (CommandLine=/crontab\s+(-|\/)/i or TargetFileName=/\/(etc\/cron|var\/spool\/cron)\//i)
| table([@timestamp, ComputerName, aid, ParentBaseFileName, ImageFileName, CommandLine, TargetFileName, UserName], limit=200)
Q7 · CacheWarmer cookie exploit signature (forwarded HTTP logs)
CONF HIGHFP MEDCOST MED

Looks for: the exploitation cookie itself in HTTP access/WAF logs forwarded to NGSIEM — a CacheWarmer cookie whose value begins with a base64 serialization marker (Tz/Qz/YT) or the raw O:/C:/a: marker. FP: field/parser names vary by log source — adjust http.request.cookie to your repo's schema. Legitimate CacheWarmer cookies are short opaque tokens, never serialized objects.

// HUNT: CVE-2026-45247 CacheWarmer cookie exploit signature (HTTP/WAF logs)
// MITRE: T1190
// CONF: high  FP: medium  COST: medium | REQUIRES: HTTP access/WAF log ingest to NGSIEM
// FALSE POSITIVES: schema/field-name drift across log sources
// TUNING: map cookie field to your repo; serialized markers are never legit here
cookie := coalesce([http.request.cookie, request_cookies, cs_cookie, cookie])
| cookie=/CacheWarmer=(Tz|Qz|YT|O%3A|C%3A|a%3A|O:|C:|a:)/i
| table([@timestamp, source.address, url.path, http.request.method, cookie], limit=200)

Field-validation note: Q1–Q6 use core Linux Falcon fields (ImageFileName, ParentBaseFileName, CommandLine, TargetFileName, ContextBaseFileName, RemoteAddressIP4, aid, ComputerName, UserName) — all standard. Q7 targets forwarded HTTP/WAF logs, not EDR; its field names (http.request.cookie etc.) depend on your NGSIEM parser and must be mapped to your repo before use — ⚠ validate parser fields in tenant.

09

CrowdStrike Custom IOA Recommendations

Promote the highest-fidelity behaviors (Q1, Q2, Q5) to Custom IOAs for real-time prevention on Magento web hosts. Build in Endpoint Security → Custom IOA Rule Groups, platform Linux, assign to a host group scoped to internet-facing commerce servers.

IOA NameTypeParent / Image / Cmdline patternActionExclusions
Magento Web Process Spawns ShellProcess CreationParent php-fpm|httpd|apache2|nginx → Image (sh|bash|dash)Detect → BlockCI/deploy service accounts
CVE-2026-45247 Canary MarkerProcess CreationCommandLine contains PWNED_CVE2026BlockNone (zero-FP marker)
Reverse Shell from Web TierProcess CreationCommandLine matches /dev/tcp/ or nc -e or fsockopen under web parentBlockNone
PHP Written to Public Web RootFile CreationTargetFileName matches /(pub|media)/.*\.php$, not under /pub/static/Detectpub/static/, deploy windows

Roll out in Detect mode first. Run each IOA in Detect for one full deploy/maintenance cycle to confirm the exclusions cover legitimate static-content deploys and site cron, then flip the high-confidence rules (canary, reverse shell) to Block.

10

Machine-Readable IOC Appendix

Quick-copy blocks for direct ingestion. No atomic IOCs are published yet — the Falcon IOC CSV uses REPLACE_WITH_... placeholders for values you extract during triage (webshell hash, skimmer domain, attacker IP).

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,REPLACE_WITH_WEBSHELL_SHA256,prevent,critical,2026-12-15,CVE-2026-45247 webshell payload,campaign:Mirasvit-CacheWarmer
domain,REPLACE_WITH_C2_OR_SKIMMER_DOMAIN,detect,high,2026-09-15,CVE-2026-45247 C2 / skimmer domain,campaign:Mirasvit-CacheWarmer
ipv4,REPLACE_WITH_ATTACKER_IP,detect,high,2026-09-15,CVE-2026-45247 exploit source IP,campaign:Mirasvit-CacheWarmer
Behavioral Signaturesregex / strings
cookie_signature: CacheWarmer=(Tz|Qz|YT|O:|C:|a:)
cmdline_canary:   PWNED_CVE2026
web_parent:       php-fpm | httpd | apache2 | nginx
shell_children:   sh | bash | dash | id | whoami | uname | curl | wget
webshell_path:    /(pub|media)/.*\.(php|phtml|phar|pht)$  (exclude /pub/static/)
revshell:         /dev/tcp/ | nc -e | fsockopen( | python -c .*socket
Named Tooling / Gadget Chainhunt strings
Monolog\Handler\SyslogUdpHandler
Monolog\Handler\BufferHandler
Monolog\Handler\FingersCrossedHandler
Monolog\Handler\GroupHandler
# PHP serialization markers (base64): Tz=>O:  Qz=>C:  YT=>a:
# Functions abused by chain: system()  current()
Patch / Mitigation Auditverify exposure
# Confirm Mirasvit FPC Warmer version (must be >= 1.11.12)
composer show mirasvit/module-cache-warmer 2>/dev/null | grep -i versions
php bin/magento module:status | grep -i Mirasvit_CacheWarmer
# Interim: disable the extension to remove the attack path
php bin/magento module:disable Mirasvit_CacheWarmer && php bin/magento cache:flush
# CISA KEV: CVE-2026-45247 | FCEB due 2026-06-06
11

Detection Validation Gates

GateCheckPass criteria
Telemetry readyLinux sensor on Magento hosts reports ProcessRollup2 + FileCreateInfo + NetworkConnectIP4Events visible in last 24h for each web aid
Benign baselineRun Q3/Q6 across a deploy cycleStatic-content deploy and Magento cron entry appear → added to exclusions
Positive testIn a lab, have php-fpm spawn id and write a .php under media/Q1 and Q3 both fire
Canary testEcho PWNED_CVE2026_test from a web-context shell in labQ2 fires; IOA blocks if promoted
Log pipelineConfirm HTTP/WAF cookie field is parsed into NGSIEMQ7 cookie field resolves to real values
PromotionQ1/Q2/Q5 stable with zero FP over one cyclePromote to Custom IOA (Detect → Block)
12

Hardening — Tiered & Deployable

Immediate (this week — no compatibility risk)
  • Patch or disable the extension. Upgrade Mirasvit Full Page Cache Warmer to 1.11.12+; if you can't patch immediately, module:disable Mirasvit_CacheWarmer removes the vulnerable unserialize() path. MITRE M1051 · vendor advisory
  • WAF rule for the cookie. Block/alert requests with a CacheWarmer cookie whose value matches (Tz|Qz|YT|O:|C:|a:) or exceeds a sane length. M1050 · Imperva/Indusface guidance
  • Make web roots non-executable for PHP. Ensure media/ and pub/media/ cannot execute PHP (web-server config), so a dropped .php can't be invoked. M1022 · Adobe Commerce security best practice
Near term (1–4 weeks — pilot first)
  • Disable dangerous PHP functions for the web SAPI: add system,exec,shell_exec,passthru,popen,proc_open to disable_functions in php.ini (pilot — Magento itself does not need these in fpm). M1042 · CIS PHP / DISA
  • Least-privilege web user. Run php-fpm as a dedicated unprivileged user with no shell and no write access outside var/, media/ uploads, and cache dirs. M1026 · CIS Linux Benchmark
  • File-integrity monitoring on app/etc/env.php, payment config, and CMS content tables to catch skimmer injection. M1040 · best practice ⚠ no formal benchmark
Strategic (1–3 months — architectural)
  • Content Security Policy + Subresource Integrity on checkout to neutralize Magecart skimmers even if a host is compromised. M1021 · Adobe Commerce CSP
  • Segment & restrict web-host egress to known payment-gateway / vendor CIDRs so tooling pull and skimmer beacon (Q4) fail. M1030 · CIS / NIST
  • Extension supply-chain governance: inventory all third-party Magento modules, subscribe to vendor PSIRT feeds, and gate new modules on a security review. M1016 · NIST SSDF
13

Deployable Playbooks

Playbook A — Patch / mitigate the extension

## 1. Check installed version
composer show mirasvit/module-cache-warmer | grep -i versions
php bin/magento module:status | grep -i Mirasvit_CacheWarmer

## 2a. Patch (preferred)
composer require mirasvit/module-cache-warmer:^1.11.12 --update-with-dependencies
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:flush

## 2b. Interim mitigation if patch is blocked
php bin/magento module:disable Mirasvit_CacheWarmer
php bin/magento cache:flush

## 3. Verify the version is >= 1.11.12
composer show mirasvit/module-cache-warmer | grep -i versions

Playbook B — Harden the web tier (nginx + PHP)

## Deny PHP execution under media/ (nginx) — drop in server block
location ~* /(media|pub/media)/.*\.(php|phtml|phar|pht)$ { deny all; return 403; }

## php.ini for the fpm pool (pilot before prod)
disable_functions = system,exec,shell_exec,passthru,popen,proc_open,proc_close
expose_php = Off
allow_url_include = Off

## Reload
php-fpm -t && systemctl reload php-fpm
nginx -t && systemctl reload nginx

Playbook C — WAF signature (ModSecurity-style)

## Block serialized-object CacheWarmer cookies
SecRule REQUEST_COOKIES:CacheWarmer "@rx ^(Tz|Qz|YT|O:|C:|a:)" \
  "id:2026045247,phase:1,deny,status:403,log,\
   msg:'CVE-2026-45247 Mirasvit CacheWarmer deserialization attempt'"

## Also flag abnormally long values
SecRule REQUEST_COOKIES:CacheWarmer "@gt 200" \
  "id:2026045248,phase:1,t:length,pass,log,\
   msg:'CVE-2026-45247 oversized CacheWarmer cookie'"
14

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the affected web host in Falcon; preserve memory/disk; do not power off. Block attacker source IP at edge.SOC / IRFalcon RTR session, host containment log
EradicatePatch to 1.11.12 (or disable extension). Remove webshells found by Q3. Kill rogue cron (Q6) and reverse shells (Q5). Delete unauthorized admin users.Web ops / IRFile hashes, cron diffs, admin_user diff
RotateRotate Magento admin passwords, integration tokens, DB creds, env.php crypt key, API keys. Invalidate all admin sessions.Web opsCredential-rotation ticket
RecoverRestore tampered files/CMS content from known-good backup; redeploy static content; re-enable host after clean scan.Web opsBackup restore log, clean Falcon scan
Assess impactDetermine if a payment skimmer ran and over what window; engage PCI/forensics and notify per breach obligations if cardholder data was exposed.IR / Legal / ComplianceSkimmer timeline, client-side JS diff
15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1190Cookie exploit deliveryQ7 (logs)Partial (needs HTTP log ingest)
T1059.004Web process spawns shell / canaryQ1, Q2YesGood
T1505.003Webshell file writeQ3YesGood
T1571 / revshellReverse shellQ5YesGood
T1071 / T1105Tooling pull / C2 egressQ4Partial (FP tuning needed)
T1053.003Cron persistenceQ6Partial
T1136.001Rogue Magento adminGAP (app-log only, S7/H8)
T1056.003 / T1565Magecart skimmer / CMS JS injectGAP (client-side; CSP/SRI + S7)

Gaps: rogue-admin creation and client-side skimmer injection sit outside EDR telemetry — cover them with Magento app/audit-log forwarding (Section 7, H8) and CSP/SRI monitoring respectively. The cookie-delivery signal (Q7) is only as good as your HTTP/WAF log pipeline into NGSIEM. Validation: run the gates in Section 11 before promoting any IOA; baseline Q3/Q6 across a deploy cycle to seed exclusions.

16

Hunt Summary Ticket

TITLE:      Hunt — CVE-2026-45247 Mirasvit Cache Warmer Magento RCE (PHP Object Injection)
SEVERITY:   Critical (CVSS 9.8 · CISA KEV · exploited ITW)
SCOPE:      Internet-facing Magento 2 / Adobe Commerce hosts running Falcon (Linux)
HYPOTHESIS: Crafted CacheWarmer cookie → unserialize() → Monolog gadget chain → RCE;
            post-ex = webshell under pub/media, reverse shell, cron, rogue admin, Magecart skimmer
QUERIES:    Q1 web-proc spawns shell · Q2 PWNED canary · Q3 webshell write ·
            Q4 web egress · Q5 reverse shell · Q6 cron · Q7 cookie signature (logs)
DO FIRST:   Run Q1 + Q3 on all Magento web hosts; confirm extension version >= 1.11.12
FINDINGS:   <fill in>
GAPS:       Rogue-admin + skimmer = app/client-side (no EDR); cookie hunt needs HTTP log ingest
ACTIONS:    Patch/disable extension · WAF cookie rule · rotate admin+DB creds · contain on hit
OWNER:      HuntPack
VERSION:    v0.1 · 2026-06-15
17

Changelog

v0.32026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.22026-06-29CQL syntax review (crowdstrike-logscale-v3): removed invalid FileCreateInfo event (Q3, Q6).
v0.12026-06-15Initial draft. 7 CQL queries (Q1–Q7), 4 Custom IOA recommendations, tiered hardening, 3 deployable playbooks, containment runbook. Behavioral-first pack — no atomic IOCs published yet.
18

References

TierSourceUsed ForAccessed
1 · GovCISA KEV CatalogKEV add date, FCEB deadline2026-06-15
1 · NVDCVEdetails CVE-2026-45247CWE-502, affected versions, CVSS2026-06-15
2 · VendorImperva advisoryITW payloads, Monolog gadget chain, canary commands, targeting2026-06-15
2 · VendorIndusface blogRoot cause, post-ex behavior, mitigation2026-06-15
2 · PressThe Hacker NewsCookie signature pattern, KEV reporting2026-06-15
3 · Aggreg.Vulert KEV blogPatch date, fix version corroboration2026-06-15
3 · PressSecurityWeekExploitation confirmation2026-06-15