Exploited in the wildCRITICALCISA KEV

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.

Adobe Commerce and Magento Open SourceCVE-2026-48356CVSS9.6CWE-434Web & app servers
Published Oct 28, 2026

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.

Mar 16, 2026225 daysOct 27, 2026

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. 1

    Install APSB26-73 for your release line (the -2026-jul builds), 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. 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. 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 .php file to fastcgi 4.

  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. 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/ and pub/media/customer_address/ other than .htaccess 4,6. Any .php, .phtml or .phar file there is a strong sign of compromise 4. On one store, Sansec found PolyShell webshells disguised as PNG images in pub/media/custom_options/quote/ 6.
  • Search the whole document root for files named accesson.php. Sansec found copies in assets/images/ subdirectories under many top-level folders, including app, lib, pub, vendor, var, bin, setup and generated 4.
  • The accesson.php backdoor returns the fixed string 8194460 on 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 to accesson.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_block and cms_page (check for a table prefix) for content containing fpCode, se_referrer or localStorage.getItem. The update_time column 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_user for 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
TypeValueContext
file pathpub/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 pathaccesson.php (in assets/images/ under many top-level directories)Post-exploitation backdoor filename4
other8194460Beacon string printed by the accesson.php backdoor5
domainlanhd6549tdhse.topLoader domain in the 2026-03-30 PolyShell mass wave; registered 2026-03-256
domaindeepveindrilling.comNewest loader domain, registered 2026-10-06; loader URLs use ?s=d35c5031 or ?s=49b7ca5f&fp=6
domainadditionalver.comLoader/Keitaro domain, first seen on stores 2026-06-086
domainmanulfie.clickEarliest loader domain (2025-07). Re-registered 2026-05-23, so new traffic may reach an unrelated owner.6
domainneswnsssn.clickLoader domain from 2025-12. Re-registered 2026-05-22; same caveat applies.6
domainleqdger.clickLedger typo-squat payload host served to real visitors in 2025-12; now expired6
domaincrypto-insider.topPayload host served to real visitors in 2025-126
otherlocalStorage key fpCodeBrowser key used by the newer loader; also found in cms_block.content6
otherlocalStorage key 136c1e07507f4a97 (also 136c1e07507f4a98)Key used by the March 2026 loader6

Timeline

  1. Sansec sees the first PolyShell probing and adds protection to its WAF. 4

  2. Sansec publicly discloses PolyShell. No official patch exists for production versions. 4

  3. Sansec observes the first in-the-wild attacks. Its timeline dates mass scanning from 2026-03-23. 4

  4. An automated mass wave injects the lanhd6549tdhse.top loader into 471 stores in one hour. 5

  5. Adobe releases Magento 2.4.9. Sansec says it contains the fix, but Adobe's bulletin lists 2.4.9 as affected. 4

  6. Adobe publishes APSB26-73 with fixes for supported release lines, and the CVE is published. 1

  7. First stores load the newest loader domain, deepveindrilling.com. 6

  8. Sansec publishes research tying the 953-store loader campaign partly to PolyShell (CVE-2026-48356). 6

  9. CISA adds CVE-2026-48356 to KEV with a federal due date of 2026-11-10. 2

Sources

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.