StyleSmuggler: the Magento zero-day Adobe patched in hotfix VULN-39341
Every release up to August 2026 is affected, including 2.4.9, so you need hotfix VULN-39341 on top
Adobe has released a fix. On 7 September 2026, the day this article was first published, Adobe released security bulletin APSB26-146 . It tracks the flaw as CVE-2026-75650, rates it critical with a CVSS base score of 10.0 and priority 1, and says Adobe is aware of it being exploited in the wild. The US Cybersecurity and Infrastructure Security Agency (CISA) added it to its Known Exploited Vulnerabilities catalogue on 8 September 2026. The fix is hotfix VULN-39341. Adobe's hotfix article lists the patch file for each affected version and says to rotate your encryption key once the hotfix is applied, along with every credential that may have been encrypted or exposed with it.
We have kept the original disclosure timeline below as history, including what our 7 September fleet sweep found, and brought the patch advice up to date. If your store was unpatched at any point after 4 September, still run the check further down this page once the hotfix is on: a patch does not remove anything an attacker has already installed. Adobe's regular September update, APSB26-138, was released the next day and is a separate fix that you also need: see applying APSB26-138 as well as the StyleSmuggler hotfix. Adobe's October 2026 bulletin fixed a second flaw in the same template engine, BlockStrap, and its patch does not include this hotfix: see BlockStrap, CVE-2026-103849.
TL;DR
On 5 September 2026 the ecommerce security firm Sansec disclosed StyleSmuggler, an unauthenticated remote code execution flaw in Magento and Adobe Commerce. Attacks began on 4 September. All current versions are affected, including 2.4.9, and the first confirmed victim was already patched to August 2026. When we first published on 7 September, Adobe had published no advisory, no CVE, no patch and no workaround, and its next scheduled security release was 8 September. Adobe has since released a fix: apply hotfix VULN-39341 from APSB26-146, rotate your keys and credentials as Adobe advises, and use the detection script on this page to check your store, whoever hosts it.
We swept every Magento server we host on 7 September. That sweep found no compromised customer store and one injection attempt that never executed. The detail of what we found, and how we know it did not run, is further down this page.
How the attack works, in two stages
The attacker first gets PHP written into a file that Magento itself creates, typically an exception report under var/report. Those files are ordinary JSON stack traces, so nothing looks unusual about Magento writing one.
The second stage is the clever part, and it is why the usual defences do not help. Execution is triggered through Magento's Payment Transaction Failed Reminder email function, which runs from cron. That means the injected file never has to be reachable from a browser. Blocking direct access to var/ over HTTP, which most well-configured stores already do, does not stop it.
Successful exploitation installs a persistent backdoor disguised as a Linux kernel thread, which is why it survives a casual look at the process list.
Indicators of compromise
These are the indicators published by Sansec. Check all of them, not just one, because the stages leave different traces.
kworker/u:8:0 owned by a non-root user~/.local/share/.gvfsd/gvfsd-user/tmp/.kw_*247.cdnflare[.]xyz99.84.67.186, 88.216.72.181, 5.181.86.133PHP inside files under var/reportCheck your own store, whoever hosts it
This is the script we ran across our own fleet. It is read only. It changes nothing, deletes nothing and sends nothing anywhere. Run it as root on the server your store runs on. If you do not have server access, send it to whoever does.
#!/bin/bash
# StyleSmuggler IOC check. Sansec advisory 2026-09-05. READ ONLY.
HIT=0
echo "[1] Backdoor process"
ps -eo user,pid,args | grep -F 'kworker/u:8:0' | grep -v '^root' | grep -v grep && HIT=1
echo "[2] Backdoor binary"
find /home /root /var/www -maxdepth 7 -path '*/.local/share/.gvfsd/gvfsd-user' 2>/dev/null && HIT=1
echo "[3] Dropper artefacts"
ls -la /tmp/.kw_* /var/tmp/.kw_* /dev/shm/.kw_* 2>/dev/null && HIT=1
echo "[4] Live connections to known C2"
ss -tan 2>/dev/null | grep -E '99\.84\.67\.186|88\.216\.72\.181|5\.181\.86\.133' && HIT=1
echo "[5] PHP injected into Magento report files"
for D in /home/*/public_html /var/www/*; do
[ -d "$D/var/report" ] || continue
grep -rlE '<\?=eval\(|<\?php.*eval\(|base64_decode' "$D/var/report" 2>/dev/null && HIT=1
done
echo "[6] Hardening posture"
php -i 2>/dev/null | grep '^disable_functions' | grep -q proc_open \
&& echo " proc_open disabled: yes" || echo " proc_open disabled: NO"
for M in /tmp /var/tmp /dev/shm; do
findmnt -no OPTIONS "$M" 2>/dev/null | grep -q noexec \
&& echo " $M noexec: yes" || echo " $M noexec: NO"
done
[ "$HIT" = "0" ] && echo "RESULT: no indicators found" \
|| echo "RESULT: INDICATORS FOUND. Do not clean or reboot. Preserve state."If it finds something, stop. Do not delete the file, clean the server or reboot. Preserving the current state is what makes it possible to establish what happened, when, and whether anything left the building. Cleaning first destroys the only evidence you have.
What to do now that Adobe has released a fix
Apply the fix first. Install Adobe's hotfix VULN-39341, using the patch file Adobe lists for your exact version in its hotfix article . Then rotate your encryption key and, as Adobe says, every credential that may have been encrypted or exposed with it: admin passwords, integration tokens, OAuth client secrets, payment gateway API credentials, database credentials, SSH and deploy keys, and API keys for other integrations. Rotate them at their source, not only inside Magento.
If we host your store, we apply patches like this one in staging, then work alongside your developer or agency to coordinate them to production.
Before the fix existed, Sansec recommended four mitigations, and they are still sensible hardening alongside the hotfix. In our sweep of every Magento server we host, the two most commonly missing were the third and fourth.
- 1Temporarily disable GraphQL if your store does not use it. Check with your developer first, because headless and PWA storefronts depend on it.
- 2Block requests carrying the exploit parameters at the web server, in front of Magento.
- 3Disable proc_open in PHP. On our fleet this was enabled everywhere, and it is a one-line change in php.ini.
- 4Mount /tmp, /var/tmp and /dev/shm with noexec. On our fleet /tmp and /var/tmp were already correct and /dev/shm was not.
Before the fix, there was a fifth option: disable the Payment Transaction Failed Reminder job. It removed the trigger without touching the vulnerability, at the cost of the reminder emails. It was a stopgap, not a substitute for the hotfix.
What we found on our own fleet
We ran the check above on every Magento server we host, on 7 September, two days after Sansec published. That sweep found no compromised customer store. No backdoor process, no dropper, no command and control traffic on any server.
We did find one injection attempt, on one server, and we are publishing that rather than rounding it to zero. Two files under var/report carried an injected payload. They stood out for three reasons: only two of 3,777 report files on that store matched, both carried old filenames but had been rewritten on 5 September, and both were exactly 8,832 bytes where every normal report on that store is 2,564.
It never executed. The payload carried its own 180 second self-expiry based on the file's modification time, and that window had closed long before we found it. It also required a specific secret HTTP header to run at all. We left both files in place as evidence rather than deleting them.
We are a listed Sansec partner , which is how this reached us quickly. Being the host rather than a plugin vendor is the reason we could check every store ourselves instead of emailing customers a bulletin and hoping.
StyleSmuggler: frequently asked questions
Frequently Asked Questions
Want someone to run this check for you?
We will run the StyleSmuggler check against your Magento store once, free, and send you the result in plain English. You do not have to be a customer and there is nothing to install. If it comes back clean, that is a useful thing to know today.
EveryHost hosts Magento and Adobe Commerce on-premise, and nothing else. Read more in our APSB26-92 briefing or on our Sentinel security page.