Adobe Commerce "PolyShell" file upload exploited to plant webshells on stores
An unauthenticated upload flaw in Magento's REST API has been used since March 2026 to drop webshells and inject JavaScript loaders into stores. CISA added it to KEV on 2026-10-27. Install APSB26-73, then check for existing compromise.
CISA added the CVE to KEV on 2026-10-27 after evidence of active exploitation. Sansec reports automated attacks since 2026-03-19, months before Adobe's July patch, including 471 stores compromised in one hour.
What you need to know
- Exposure: supported Adobe Commerce and Magento Open Source 2.4.x lines before the -2026-jul builds (see table). Sansec says the bug dates to the first Magento 2 release, so end-of-life versions are exposed too.
- Impact: unauthenticated attackers upload disguised executable files through guest-cart REST routes. Webshells, stored XSS or account takeover can follow, depending on server config.
- Exploitation: mass, automated attacks since March 2026. The CVE is in CISA KEV with a federal due date of 2026-11-10. No actor has been named.
- Fix: install APSB26-73 (-2026-jul builds). Patching does not remove an existing compromise, so hunt on every store exposed before the patch.
- Detect: look for any .php, .phtml or .phar file under pub/media/custom_options/, accesson.php anywhere in the docroot, and loader code in cms_block and cms_page.
What's happening
CVE-2026-48356 is a CWE-434 unrestricted file upload flaw in Adobe Commerce and Magento Open Source. Adobe rates it Critical and says it needs no authentication and no admin privileges 1. Sansec found and named the bug "PolyShell". Sansec says it lets unauthenticated attackers upload executable files through Magento's REST API by disguising code as an image 4. Adobe fixed it for supported release lines in APSB26-73 on 2026-07-14 1.
Sansec says attacks began on 2026-03-19, two days after its public disclosure and before any production patch existed 4. Sansec reports that malicious PHP had been uploaded to 56.7% of stores by 2026-03-24, and that malicious uploads had hit 82% by 2026-04-14 4. These figures come from Sansec's own telemetry. On 2026-03-30, a fully automated chain compromised 471 stores in one hour 5. Each compromise followed the same steps: upload a webshell, plant accesson.php backdoors, then inject a JavaScript loader into CMS content 5.
Sansec links PolyShell to a long-running loader campaign that has hit 953 stores since July 2025 6. PolyShell is one of the access routes, but Sansec has not shown how the earliest infections began 6. The loader filters out scanners. No final payload has been recovered, so the campaign's goal is unconfirmed 6. CISA added the CVE to KEV on 2026-10-27, with ransomware use listed as unknown 2. Adobe's bulletin, in its 2026-08-11 revision, said Adobe was not aware of exploits in the wild 1.
How it works
Sansec says the vulnerable upload path never checks the submitted option against the product's real custom options and never restricts file extensions 4. The only check is an image-header test. A polyglot file, valid as an image but also containing code, passes that test 4. Sansec says the code has existed since the first Magento 2 release. GraphQL mutations use a different code path and are not affected 4.
The most dangerous entry points are anonymous guest-cart REST API routes, though Sansec says they are not the only vulnerable ones. Uploaded files land under pub/media/custom_options/ 4. The impact depends on the web server. Code execution needs a server that runs PHP from the upload directory, such as a non-stock nginx config that sends every .php file to fastcgi 4. Other configurations allow stored XSS or account takeover 4. Where execution is blocked, the file still stays on disk and becomes dangerous if the config changes later 4.
Adobe's vector requires user interaction and marks the scope as changed 1. CISA's description refers to code execution in the context of the current user, with possible control of the victim's account or session 3. That wording is closer to a client-side impact than to the server-side webshells Sansec observed. Defenders should treat both outcomes as possible.
What to do
In order of priority- 1
Install APSB26-73 for your release line (the
-2026-julbuilds), published 2026-07-14 1. CISA requires federal agencies to apply vendor mitigations by 2026-11-10, or stop using the product if no mitigation is available 2. - 2
Until you can patch, use a WAF rule that blocks the vulnerable REST API upload call. Sansec, which sells such a WAF, says only that stops the attack 4. Web-server rules that deny access to
pub/media/custom_options/limit the damage but do not stop uploads 4. - 3
Make sure the web server never executes PHP from media and upload directories. Code execution depends on a config that runs PHP there, such as nginx passing every
.phpfile to fastcgi 4. - 4
Assume breach on any store exposed before patching. Run the hunts above, remove webshells, backdoors and injected CMS content, and delete rogue admin accounts. Sansec saw a 2.4.7-p10 store with no missing core patches get the loader after a rogue admin account and a GSocket backdoor had been found on it 6.
- 5
After cleanup, rotate the database, admin and API integration credentials 6. Also install APSB25-88 for SessionReaper (CVE-2025-54236): on 60% of loader-infected installs missing a core patch, Sansec found files uploaded through PolyShell or SessionReaper 6.
Detection
- List every file in
pub/media/custom_options/andpub/media/customer_address/other than.htaccess4,6. Any.php,.phtmlor.pharfile there is a strong sign of compromise 4. On one store, Sansec found PolyShell webshells disguised as PNG images inpub/media/custom_options/quote/6. - Search the whole document root for files named
accesson.php. Sansec found copies inassets/images/subdirectories under many top-level folders, includingapp,lib,pub,vendor,var,bin,setupandgenerated4. - The
accesson.phpbackdoor returns the fixed string8194460on any request, which attackers use to find live shells 4. Look for that string in responses from crawls of your own sites. Also check web logs for requests toaccesson.php. - Review web server logs for anonymous upload requests to guest-cart REST API routes, the most dangerous entry points Sansec identifies 4. Sansec says other routes are also vulnerable, so do not rely on guest-cart logs alone 4.
- Query
cms_blockandcms_page(check for a table prefix) for content containingfpCode,se_referrerorlocalStorage.getItem. Theupdate_timecolumn shows the attacker's latest write 6. Loader domains may be base64-encoded, so search for these code patterns as well as domain names 6. - Check
admin_userfor unrecognized accounts and look for unfamiliar processes. Sansec found a rogue admin account and a GSocket backdoor on one compromised store 6. - If a store loads any listed loader domain, assume the attacker can still write to the database. Removing the injected script does not remove that access 6.
Indicators
As published by the cited sources| Type | Value | Context |
|---|---|---|
| file path | pub/media/custom_options/ (especially quote/) | Upload location. Any .php/.phtml/.phar file here is a strong sign of compromise. Uploads land in quote/.4 |
| file path | accesson.php (in assets/images/ under many top-level directories) | Post-exploitation backdoor filename4 |
| other | 8194460 | Beacon string printed by the accesson.php backdoor5 |
| domain | lanhd6549tdhse.top | Loader domain in the 2026-03-30 PolyShell mass wave; registered 2026-03-256 |
| domain | deepveindrilling.com | Newest loader domain, registered 2026-10-06; loader URLs use ?s=d35c5031 or ?s=49b7ca5f&fp=6 |
| domain | additionalver.com | Loader/Keitaro domain, first seen on stores 2026-06-086 |
| domain | manulfie.click | Earliest loader domain (2025-07). Re-registered 2026-05-23, so new traffic may reach an unrelated owner.6 |
| domain | neswnsssn.click | Loader domain from 2025-12. Re-registered 2026-05-22; same caveat applies.6 |
| domain | leqdger.click | Ledger typo-squat payload host served to real visitors in 2025-12; now expired6 |
| domain | crypto-insider.top | Payload host served to real visitors in 2025-126 |
| other | localStorage key fpCode | Browser key used by the newer loader; also found in cms_block.content6 |
| other | localStorage key 136c1e07507f4a97 (also 136c1e07507f4a98) | Key used by the March 2026 loader6 |
Timeline
Sansec sees the first PolyShell probing and adds protection to its WAF. 4
Sansec publicly discloses PolyShell. No official patch exists for production versions. 4
Sansec observes the first in-the-wild attacks. Its timeline dates mass scanning from 2026-03-23. 4
An automated mass wave injects the lanhd6549tdhse.top loader into 471 stores in one hour. 5
Adobe releases Magento 2.4.9. Sansec says it contains the fix, but Adobe's bulletin lists 2.4.9 as affected. 4
Adobe publishes APSB26-73 with fixes for supported release lines, and the CVE is published. 1
First stores load the newest loader domain, deepveindrilling.com. 6
Sansec publishes research tying the 953-store loader campaign partly to PolyShell (CVE-2026-48356). 6
CISA adds CVE-2026-48356 to KEV with a federal due date of 2026-11-10. 2
Sources
- 1Security update available for Adobe Commerce | APSB26-73Adobe · Vendor · Jul 14, 2026
- 2CISA Adds Two Known Exploited Vulnerabilities to CatalogCISA · Government · Oct 27, 2026
- 3Known Exploited Vulnerabilities Catalog entry: CVE-2026-48356CISA · Government · Oct 27, 2026
- 4PolyShell: unrestricted file upload in Magento and Adobe CommerceSansec · Research · Mar 17, 2026
- 5Mass PolyShell attack wave hits 471 stores in one hourSansec · Research · Mar 30, 2026
- 6deepveindrilling.com: Magento CMS block loader hits 953 storesSansec · Research · Oct 24, 2026
Corroborated by independent sources. Researched and drafted by the VulnDigest briefs agent from 6 sources, then checked against them by a separate review step on Oct 28, 2026.
Adobe has not confirmed exploitation: its bulletin (2026-08-11 revision) said Adobe was not aware of exploits. Exploitation evidence comes from CISA's KEV listing and Sansec's research.
The March 2026 attack dates and percentages come only from Sansec's own telemetry. No independent telemetry has been published.
Sansec says Magento 2.4.9 (released 2026-05-12) contains the fix, but Adobe lists 2.4.9 as affected. We follow Adobe: install the -2026-jul build for your line.
Version strings are from Adobe's bulletin. Sansec confirms APSB26-73 is Adobe's PolyShell fix for supported lines. Sansec says older end-of-life versions are also vulnerable; the bulletin lists no fix for them.
CVSS 9.6 is Adobe's score. Some outlets report 9.3 (A:N). Adobe's CVE text describes a user-context impact, while Sansec observed server-side webshells.
No actor has been named and the loader's final payload has not been recovered. CISA lists ransomware use as unknown.
Spotted an error? Open an issue on sochub.io.