Someone found the master key to every online checkout counter and started robbing stores three days before the locksmith arrived
CVE-2026-75650, dubbed StyleSmuggler by Sansec, is an unauthenticated remote code execution flaw in Adobe Commerce and Magento Open Source's template engine (CWE-1336). The attack is a two-stage chain: first, the attacker poisons a PHP file that Magento itself writes — such as a failure report or system log — by injecting template directives through styles properties that bypass existing sanitization. Second, the attacker triggers rendering of that poisoned file (e.g., via a failed-payment email path), achieving arbitrary PHP execution as the web-server user. Every release from 2.4.4 through 2.4.9 is affected, including fully patched August 2026 builds like 2.4.6-p15. The hotfix VULN-39341 was released September 7; exploitation began September 4.
Adobe's CVSS 10.0 / Priority 1 rating is accurate and, unusually, may even *understate* the operational severity. The vector is AV:N/AC:L/PR:N/UI:N/S:C — network-reachable, no auth, no user interaction, scope change — and real-world exploitation confirms this is trivially weaponizable. Post-exploitation payloads include a Rust-based persistent backdoor that masquerades as kernel workers ([kworker/u:8:0]), fc-cache, or chronyd, exfiltrating data via disguised NTP traffic on UDP/123. A separate campaign is deploying PHP webshells and payment skimmers. Given that Magento stores process credit-card data and PII under PCI DSS scope, this is a textbook 10.0.
5 steps from start to impact.
Identify target Magento instance
/magento_version), or GraphQL introspection endpoints. Shodan and FOFA index roughly 50,000–111,000 exposed Magento instances globally. No authentication or special tooling is required — a browser suffices.- Target runs Adobe Commerce or Magento Open Source 2.4.4–2.4.9
- Storefront is internet-accessible (by design for e-commerce)
- None — Magento storefronts are public-facing by definition
http.component:magento. GreyNoise may tag scanning IPs probing Magento-specific paths.Poison a Magento-generated PHP file via styles injection
styles properties. Magento's failure-report generator or logging subsystem writes this payload verbatim into a .php file on disk, bypassing existing template-injection guards that only inspect standard template parameters. No authentication, session, or CSRF token is needed.- Magento's failure-report or logging path writes user-controlled input to a .php file
- Existing WAF rules do not block the specific template-injection markers in style attributes
- A WAF rule specifically targeting template markers in style attributes could block this, but no vendor shipped such a rule before Sept 5
.php files in var/report/ or log directories.Trigger template rendering to execute payload
www-data or magento. This grants file-system read/write and outbound network access.- Magento processes the poisoned file through its template rendering engine
- PHP-FPM / web server user has write access to web-accessible directories
- None in default configurations — the rendering path is a normal application flow
Deploy persistent backdoor and webshells
[kworker/u:8:0], fc-cache, chronyd) and communicates over UDP/123 disguised as NTP traffic. Simultaneously, PHP webshells are dropped into pub/media/catalog/product/cache/ directories. The attacker reads app/etc/env.php to harvest database credentials, encryption keys, and payment gateway secrets.- Code execution achieved in step 3
- Outbound UDP/123 not blocked from web tier
- Egress filtering blocking UDP/123 from web servers would disrupt C2, but NTP is commonly allowed
- EDR on the web host could detect the Rust binary, but many Magento hosts lack endpoint agents
pub/media/, pub/static/, var/report/. Process monitoring for unexpected binaries running as web user. Network monitoring for UDP/123 from web-tier hosts to non-corporate NTP servers.Exfiltrate PCI data and inject payment skimmers
- Database credentials obtained from env.php
- Web-root write access for skimmer injection
- PCI-compliant tokenization limits direct card-data theft from the database, but skimmers capture data in-flight at the browser
- Content-Security-Policy headers could limit skimmer injection, but most Magento stores have permissive CSP
The supporting signals.
| In-the-Wild Exploitation | YES — active since Sept 4, 2026. Sansec confirmed first exploitation at 22:20 UTC on Sept 4. Multiple threat actors observed, including one deploying Rust-based backdoors and a separate campaign using PHP droppers via GraphQL reconnaissance. |
|---|---|
| Proof-of-Concept | No public PoC repository identified as of Sept 8, but exploitation is trivial and already weaponized — the attack requires only crafted HTTP requests. Sansec's writeup provides sufficient detail for reproduction. |
| EPSS Score | Not yet scored (CVE disclosed Sept 7, 2026). Expected to spike to top 1% percentile given active exploitation and zero-auth attack surface. |
| KEV Status | Not yet listed as of Sept 8, 2026. CISA KEV addition expected imminently given confirmed active exploitation and Adobe Priority 1 rating. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0 Critical. Every metric is at maximum severity. Scope: Changed means the attacker escapes the vulnerable component's security authority. |
| Affected Versions | Adobe Commerce 2.4.4 through 2.4.9, Magento Open Source 2.4.4 through 2.4.9, Adobe Commerce B2B 1.3.3 through 1.5.3. Includes all patch levels (e.g., 2.4.6-p15 with August 2026 updates is vulnerable). |
| Fixed Version | Hotfix VULN-39341 (VULN-39341-composer-patches.zip from repo.magento.com), released Sept 7, 2026 via APSB26-146. Applied as a composer patch — no full version upgrade required. |
| Scanning / Exposure | Shodan/FOFA index ~50,000–111,000 Magento/Adobe Commerce storefronts globally. All are internet-facing by design. Every unpatched instance is exploitable without authentication. |
| Disclosure Date | Sept 5, 2026 (Sansec advisory). Adobe hotfix Sept 7, 2026. Exploitation predates both (Sept 4). |
| Discoverer | Sansec (Dutch e-commerce security firm). Sansec Shield customers were protected from Sept 5. Sansec named the attack chain *StyleSmuggler*. |
noisgate verdict.
The single most decisive factor is that the affected component is an internet-facing e-commerce platform processing payment data, under active exploitation with zero authentication requirements — the attacker population is the entire internet, the target population is every Magento store, and the blast radius is PCI-scoped customer data plus persistent server compromise. No friction point in the chain narrows the reachable population or raises the attacker bar.
Why this verdict
- Zero authentication barrier: CVSS vector confirms PR:N/UI:N — any internet host can exploit any Magento storefront. No credentials, sessions, or user interaction required. This is the widest possible attack surface.
- Active exploitation predating patch: Attacks began Sept 4, the advisory dropped Sept 5, the hotfix arrived Sept 7. Every unpatched store was a sitting target for 3+ days with no vendor mitigation available. Multiple independent threat actors are confirmed.
- Role multiplier: Adobe Commerce / Magento is *canonically* an internet-facing production application that processes payment card data under PCI DSS. The blast radius of compromise is not limited to the server — it extends to every customer's financial data, enabling mass payment skimming, PII exfiltration, and brand destruction. ~50k–111k instances are exposed globally; 100% of installs occupy this high-value role by definition. The floor is CRITICAL.
- Persistent post-exploitation tooling: Observed payloads include a compiled Rust backdoor using NTP-disguised C2 and PHP webshells — this is not smash-and-grab but sustained access designed to survive patching without full incident response.
- Scope: Changed: The CVSS S:C flag is earned — the attacker pivots from the web application to the underlying OS, database tier, and downstream payment processors via harvested credentials.
Why not higher?
CVSS 10.0 is the maximum possible score. The vendor rating is already at ceiling. There is no higher bucket than CRITICAL.
Why not lower?
Every friction-audit criterion argues against downgrade: the attacker position is unauthenticated remote, the prerequisite chain has zero compounding narrowing factors, the exposed population is 100% of installs (internet-facing by design), and no standard security control (EDR, WAF, MFA, NGFW) stopped the initial wave. Active exploitation with persistent backdoors and PCI-scoped data at risk categorically prevents any reduction below CRITICAL.
What to do — in priority order.
- Apply hotfix VULN-39341 immediately — Download
VULN-39341-composer-patches.zipfrom repo.magento.com and apply via composer. This is the definitive fix. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days (by Sept 10). Given active exploitation, deploy within hours. - Block PHP execution in media/static directories at the web-server layer — Add Nginx/Apache rules denying
.phpexecution inpub/media/,pub/static/, andvar/report/. This breaks the webshell persistence path. Example for Nginx:location ~* ^/(pub/media|pub/static|var)/.+\.php$ { deny all; } - Deploy WAF rules blocking template-injection markers in style attributes — Configure your WAF (Cloudflare, Akamai, AWS WAF, Fastly) to block requests containing Magento template directives (
{{,}},block type=,template=) inside CSS style attribute values. Sansec Shield has shipped signatures since Sept 5. - Restrict outbound UDP/123 from web tier to sanctioned NTP servers only — The Rust backdoor uses UDP/123 disguised as NTP for C2. Restrict egress so only your corporate NTP servers are reachable on this port from the web tier. This disrupts the observed C2 channel.
- Conduct full compromise assessment on unpatched instances — If your store was unpatched between Sept 4–7, assume compromise. Audit
admin_usertable for unauthorized entries, scanpub/media/andvar/report/for unexpected PHP files, check for unknown processes masquerading askworker,fc-cache, orchronyd, and rotate all credentials: admin passwords, API tokens, OAuth secrets, payment gateway keys, database credentials, SSH keys, and encryption keys. Do this at the credential *source*, not just within Magento. - Enable file-integrity monitoring on web-root and config directories — Deploy FIM (OSSEC, Wazuh, Tripwire, or cloud-native equivalent) on
pub/,var/,app/etc/, andvendor/to detect unauthorized file changes — both for this CVE and future Magento attacks.
- Network-level IP blocking — multiple source IPs across hosting and residential proxy pools are observed; the attacker population is too distributed for IP-based blocking to be effective.
- MFA on Magento admin panel — the attack does not target the admin login; it exploits the public storefront request path, so admin MFA provides zero protection against initial exploitation.
- Content-Security-Policy headers alone — while CSP can limit *skimmer* injection effectiveness, it does not prevent the RCE itself or the backdoor deployment; it only narrows one post-exploitation outcome.
- Upgrading to 2.4.9 without the hotfix — version 2.4.9 is itself vulnerable; only the VULN-39341 composer patch fixes the flaw.
Crowdsourced verification payload.
Run this script on each Magento application server as a user with read access to the Magento installation directory. Invoke with: bash check_cve_2026_75650.sh /var/www/magento (replace with your Magento root path). No root privileges required — just read access to the composer and patches directories.
#!/usr/bin/env bash
# check_cve_2026_75650.sh — Detect CVE-2026-75650 (StyleSmuggler) patch status
# Usage: bash check_cve_2026_75650.sh /path/to/magento
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
set -euo pipefail
MAGE_ROOT="${1:-}"
if [[ -z "$MAGE_ROOT" || ! -d "$MAGE_ROOT" ]]; then
echo "Usage: $0 /path/to/magento-root"
exit 2
fi
# Method 1: Check via magento-patches CLI (preferred)
if [[ -x "$MAGE_ROOT/vendor/bin/magento-patches" ]]; then
PATCH_STATUS=$("$MAGE_ROOT/vendor/bin/magento-patches" -n status 2>/dev/null || true)
if echo "$PATCH_STATUS" | grep -qi '39341.*applied\|VULN-39341.*Applied'; then
echo "PATCHED — VULN-39341 hotfix is applied (confirmed via magento-patches)."
exit 0
elif echo "$PATCH_STATUS" | grep -qi '39341'; then
echo "VULNERABLE — VULN-39341 hotfix is present but NOT applied."
exit 1
fi
fi
# Method 2: Check composer.json / composer.lock for the patch reference
if grep -rq 'VULN-39341\|vuln-39341' "$MAGE_ROOT/composer.json" "$MAGE_ROOT/composer.lock" 2>/dev/null; then
echo "PATCHED — VULN-39341 reference found in composer configuration."
exit 0
fi
# Method 3: Check if the Magento version is in the affected range
VERSION_FILE="$MAGE_ROOT/vendor/magento/framework/AppInterface.php"
COMPOSER_LOCK="$MAGE_ROOT/composer.lock"
VERSION=""
if [[ -f "$VERSION_FILE" ]]; then
VERSION=$(grep -oP "VERSION\s*=\s*'\K[^']+" "$VERSION_FILE" 2>/dev/null || true)
elif [[ -f "$COMPOSER_LOCK" ]]; then
VERSION=$(grep -A2 '"magento/product-community-edition"\|"magento/product-enterprise-edition"' "$COMPOSER_LOCK" \
| grep -oP '"version":\s*"\K[^"]+' | head -1 || true)
fi
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN — Could not determine Magento version. Manually verify VULN-39341 hotfix status."
exit 2
fi
echo "Detected Magento version: $VERSION"
# All 2.4.4 through 2.4.9 are vulnerable without the hotfix
if echo "$VERSION" | grep -qP '^2\.4\.[4-9]'; then
echo "VULNERABLE — Version $VERSION is in the affected range (2.4.4–2.4.9) and VULN-39341 hotfix was NOT detected."
exit 1
else
echo "UNKNOWN — Version $VERSION may not be in the known affected range. Verify with Adobe advisory APSB26-146."
exit 2
fiIf you remember one thing.
VULN-39341 composer hotfix today, not Monday, not this week — today. The noisgate mitigation SLA for CRITICAL is ≤3 days, but active exploitation overrides that to patch/mitigate immediately, within hours. The noisgate remediation SLA is ≤90 days for a full security review and hardening pass. Any instance that was unpatched between Sept 4–7 should be treated as compromised: rotate every credential (database, admin, API, payment gateway, SSH keys) at the source, hunt for Rust backdoors masquerading as system daemons and PHP webshells in pub/media/, and engage your PCI IR process. Do not wait for CISA KEV listing — the threat is confirmed and ongoing.Sources
- Sansec — StyleSmuggler 0-day Research
- Adobe Security Bulletin APSB26-146
- The Hacker News — Magento Zero-Day Coverage
- SOCRadar — StyleSmuggler Analysis
- CCB Belgium — Active Exploitation Advisory
- SecurityArsenal — Detection and Mitigation Guide
- CyberSecurityNews — Adobe Commerce Vulnerabilities
- MageDispatch — APSB26-146 Hotfix Details
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.