Unpatched Magento and Adobe Commerce flaw exploited to backdoor online stores since 4 September
A two-stage template injection with no vendor patch yet shows why hardening and virtual patching matter in the zero-day window.
Sansec, a Dutch e-commerce security company, has disclosed a previously unknown vulnerability in Magento Open Source and Adobe Commerce that attackers began exploiting on 4 September 2026. The firm calls the flaw StyleSmuggler. According to a report published by The Hacker News on 5 September, the bug lets an unauthenticated attacker run code on a store's server and install a backdoor that persists. All current releases are affected, including 2.4.6, 2.4.7, 2.4.8 and 2.4.9.
The exploit works in two stages. First, the attacker plants PHP code inside a file that Magento itself writes to disk, such as a failure report. Second, they trigger the platform's "Payment Transaction Failed Reminder" email function, which renders a template and, in doing so, executes the injected code. No email needs to be delivered and no user needs to click anything. One early-warning sign described by Sansec is a malformed reminder email containing raw, unresolved {{var ...}} template tags.
The backdoor found on compromised servers is a stripped Rust binary of roughly 1.9 MB, built for both x86-64 and arm64. It runs under the process name [kworker/u:8:0] to resemble a Linux kernel thread and is stored at ~/.local/share/.gvfsd/gvfsd-user. A cron job restarts it every five minutes; on one store the cron entry had been written 1,728 times. Disrex Group, which handled two compromised stores running 2.4.8 and 2.4.7-p2, also saw one attempted breach.
As of 6 September, Adobe had not published an advisory, CVE identifier, patch or workaround, and its next scheduled security release was due on 8 September. Sansec said it went public early because stores were being compromised in real time. Interim mitigations listed in the report include temporarily disabling GraphQL, applying community patches from Disrex, ProxiBlue or Graycore, disabling PHP's proc_open function, and mounting /tmp, /var/tmp and /dev/shm with the noexec option.
Why it matters
Commerce platforms sit on the direct path to card data and customer records, so a pre-authentication code execution bug is about as serious as web vulnerabilities get. The gap between first exploitation on 4 September and a vendor fix due on 8 September shows how much of modern defence now happens in the window before a patch exists. It also shows the security community increasingly publishing early and shipping community patches rather than waiting for a coordinated release. Store operators who can act on interim mitigations quickly are the ones who will get through weeks like this one.
Commerce platforms sit on the direct path to card data and customer records, so a pre-authentication code execution bug is about as serious as web vulnerabilities get.
Attacker plants PHP in a file Magento writes
No login needed; the payload rides inside data the platform stores itself, such as a failure report.
Reminder email template is triggered
The Payment Transaction Failed Reminder function renders a template that includes the planted text.
Injected code executes during rendering
The template engine cannot tell attacker text from developer text, so it runs the PHP.
Rust backdoor installed and kept alive
A 1.9 MB binary masquerades as a kernel thread and cron restarts it every five minutes.
Interim controls
Disable GraphQL, apply community patches, block proc_open, mount temp dirs noexec.
What you can learn from this
Server-side template injection turns data into code. Magento renders email templates by expanding placeholders such as {{var ...}} into live values, and a rendering engine that can call PHP is effectively an interpreter. If an attacker can get their own text into something that engine later renders, the template system will faithfully execute it, because it cannot tell attacker-supplied text from developer-supplied text. That is why StyleSmuggler needs no login: the dangerous step happens inside a trusted internal function, not at the front door.
Two-stage exploits separate the write from the trigger. Many web attacks first find a way to place content on disk, then find a separate feature that reads and processes that content. Each half may look harmless on its own; a failure report being written is normal, and a reminder email being rendered is normal. The vulnerability lives in the combination, which is why threat modelling should trace where user-influenced data ends up and every code path that later consumes it.
Persistence is about surviving restarts, not just getting in. The backdoor here is re-launched by cron every five minutes and named to look like a kernel worker thread, which is a classic masquerading technique. Cron is a scheduler that runs commands on a timetable with the privileges of the user who owns the entry, so a single line can resurrect malware indefinitely. Defenders who only kill a process without removing the scheduler entry will watch it come back within minutes.
Hardening limits what an attacker can do after the bug fires. Disabling proc_open removes a PHP function used to spawn external programs, and mounting temporary directories with noexec tells the kernel to refuse to run binaries stored there. Neither fixes the vulnerability, but together they break steps in the attacker's chain, which is the essence of defence in depth. This works because most exploit chains assume a permissive environment, and every assumption you violate raises the attacker's cost.
Virtual patching buys time when the vendor cannot. Community patches and web application firewall rules that block the specific request pattern are ways of closing a hole without touching the vulnerable code itself. They are imperfect, because a clever variation may slip past, but they are fast to deploy and easy to remove once the official fix arrives. Knowing where such a rule would go in your stack is half the preparation. A useful habit is to write the rule as narrowly as the exploit requires, so legitimate traffic keeps flowing and the rule can be reasoned about later.
We teach this
How to use this in practice
Check what version you are running and whether GraphQL is reachable. On any Magento or Adobe Commerce install you manage, run
bin/magento --versionand then request/graphqlfrom outside your network withcurl -I. Done looks like a written note of the exact version and a decision, recorded with a date, on whether GraphQL can be disabled until an official patch lands. If it cannot, note which community patch you would apply and who signs it off. Also search your mail logs for reminder emails containing unresolved template tags, since Sansec lists that as an early indicator of tampering.Audit scheduled tasks and hidden binaries on one Linux host. Run
crontab -lfor the web user andls -la ~/.local/share/looking for directories starting with a dot, thenps aux | grep kworkerand compare againstls /proc/<pid>/exeto confirm each entry is a real kernel thread with no backing file. Done means a short checklist you could hand to a colleague that says what a clean result looks like on that server. Repeat the check a day later, because a five-minute cron cycle means anything you removed will reappear quickly if the scheduler entry survived.Review PHP and filesystem hardening on a test box. Open
php.ini, finddisable_functions, and decide whetherproc_openand its relatives belong there for your workload; then runmount | grep -E "tmp|shm"and see whethernoexecappears. Done means a one-page before-and-after record of the settings and a test proving the site still works with the stricter values.Draw the attack chain as a diagram. Sketch five boxes: attacker request, file written by the application, email template rendered, PHP executed, cron persistence installed. Under each box write the control that would break that step. Done is a diagram you can explain in two minutes to someone who has never seen Magento, because that is the same exercise you will need for the next platform. Date it and keep it beside your incident runbook so you can compare it with Adobe's advisory once that is published.
Sources
Our reporting is an original summary; full coverage is at the links above.
Don't just read about it — build it.
Square 1 teaches the skills behind the headlines, with every line of your work graded by AI. Find your starting point in 3 minutes.
Get your free skill report