CVE-2026-48356
Adobe Commerce and Magento unrestricted file upload in the cart custom-options API (PolyShell)
CVE-2026-48356 is an unrestricted file upload flaw in Adobe Commerce, Adobe Commerce B2B and Magento Open Source that can lead to code execution on the store. Sansec, which found it and named it PolyShell, reports that the REST API accepts a file as part of a cart item's custom options and writes it to pub/media/custom_options/quote/ without checking the option ID, the product's option type, or the file extension. The only check is an image header, which a polyglot file passes.
CISA added it to the Known Exploited Vulnerabilities catalog on October 27, 2026, with a federal due date of November 10. Adobe fixed it on July 14, 2026 in bulletin APSB26-73, so the question for most teams is which instances are still unpatched and reachable. Adobe rates it 9.6; NVD still shows 9.3.
- Vendor
- Adobe
- Product
- Adobe Commerce, Adobe Commerce B2B, Magento Open Source
- Affected versions
- Commerce 2.4.9, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15, 2.4.5-p17, 2.4.4-p18 and earlier; B2B 1.5.3, 1.5.2-p5, 1.4.2-p10, 1.3.4-p17, 1.3.3-p18 and earlier; Open Source 2.4.9, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15 and earlier
- Vulnerable component
- REST guest-cart item routes (/V1/guest-carts/:cartId/items) writing to pub/media/custom_options/
- CVSS
- 9.6 (Adobe; NVD shows 9.3)
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L (Adobe); NVD lists A:N
- CWE
- CWE-434 (Unrestricted Upload of File with Dangerous Type)
- Exploitation
- Confirmed (CISA KEV)
- CISA KEV added
- October 27, 2026
- Patch
- Adobe APSB26-73 (July 14, 2026). Fixed builds carry the -2026-jul suffix, e.g. 2.4.8-2026-jul, with matching B2B builds
Is it reachable for you?
Work through these in order. A verified no at any step lowers your exposure. Patching is still the fix.
- Inventory every instance. Production, staging, UAT, dev, old migration copies and agency-hosted stores. Staging is often internet facing and patched last.
- Check the version. From the Magento root, run
bin/magento --version, andcomposer show magento/product-community-edition(Open Source) orcomposer show magento/product-enterprise-edition(Commerce). Compare against the affected list. Adobe lists 2.4.9 as affected; Sansec says 2.4.9 shipped with the fix, so a 2.4.9 store should confirm rather than assume. - Confirm APSB26-73 is applied. Fixed builds carry the -2026-jul suffix. Confirm that build, or the matching isolated security patch, is deployed on every node, and check Adobe's Quality Patches Tool for the fix's status.
- Check whether the REST API is reachable from the internet. Storefronts are public by design. Sansec names two routes that need no credentials,
POST /V1/guest-carts/:cartId/itemsandPUT /V1/guest-carts/:cartId/items/:itemId, served under/rest/and/rest/<store code>/. Sansec says other REST routes are also affected and that the GraphQL mutations use a different code path and are not. Check whether your CDN, WAF or load balancer passes these paths through. - Check the upload directory. Confirm
pub/media/custom_options/exists and what it holds:find pub/media/custom_options/ -type f ! -name '.htaccess'. Per Sansec, the upload works even if no product has a file-type custom option. - Check whether the web server serves or runs files there. This decides how bad an upload is. Nginx: Adobe's
nginx.conf.sampledenies/media/custom_options/; Sansec warns the deny block must come before any\.php$location block or PHP may still run. Apache: confirmpub/media/custom_options/.htaccessexists and denies all access, and addphp_flag engine 0for mod_php. A non-default AccessFileName means the .htaccess is never read. Safe test: place a harmless text file there and request it under/media/custom_options/and/pub/media/custom_options/; you want 403, not the file. - Check what an attacker inherits. The starting identity is an anonymous internet user. Uploaded files run as the web server or PHP-FPM user, so check what that account can read (database credentials in
app/etc/env.php), write, and reach on the network. The vector's user-interaction flag fits the stored cross-site scripting path, where a customer or admin who opens an uploaded file could lose their session, so review admin access and whether admin sessions require 2FA.
Compensating controls until you patch
These reduce risk while you schedule the patch. Test each one after you put it in place.
- WAF or virtual patch on the upload path. Block or inspect requests to the guest-cart item routes that carry a
file_infoobject, especially with filenames ending in .php, .phtml, .phar or .html. Sansec notes that only blocking the API call stops the upload; blocking web access to the directory stops files from being served, not written. Check whether your WAF vendor has published a rule. - Block execution and access in upload directories. Apply the nginx deny rule or Apache .htaccess above to
pub/media/custom_options/, and make sure PHP runs only from the intended entry points, never frompub/media. - File integrity monitoring. Alert on any new file in
pub/media/custom_options/and on new .php, .phtml or .phar files anywhere underpub/media. - EDR on web hosts. Watch for the PHP or web server process spawning shells or system commands.
- Segmentation. The storefront should reach its database, cache and search services, not internal admin networks.
- Admin access. Restrict the admin URL by IP or VPN, require 2FA, remove stale admin accounts.
What to look for in logs
From Sansec's write-up.
- Any .php, .phtml or .phar file in
pub/media/custom_options/. Sansec calls this a strong indicator of compromise. - Files in that directory that begin with an image header such as
GIF89abut contain PHP code. - REST requests to
/V1/guest-carts/.../itemscarryingfile_info, especially from sources that never complete a checkout. - Unexpected PHP files outside normal code paths, including a file named
accesson.php, which Sansec lists as a follow-on backdoor:find /var/www -name 'accesson.php' -type f. - Unexpected script tags added to CMS pages or static blocks.
How Tuskira helps
Tuskira is an agentic cyber defense platform that connects to the 200+ security and IT tools you already run. When a new critical vulnerability lands, Tuskira answers three questions.
Is there a reachable path? For example, whether an unpatched Commerce or Magento store exposes the guest-cart REST routes to the internet and serves files from pub/media/custom_options/.
Would your controls stop it? Tuskira tests the controls you already run, such as your WAF, firewall rules and EDR, against the path.
Can you close the gap now? Quell stages the compensating control change through your existing tools, with your approval, then re-tests to confirm the path is closed.
The vendor patch is the complete fix. Quell reduces exposure and proves your controls work in the meantime.
See how Quell handles emerging threatsFAQ
Am I exposed to CVE-2026-48356?
You may be if you run Adobe Commerce, Commerce B2B or Magento Open Source on a version listed in APSB26-73 without the July 2026 fix, and your REST API is reachable. The impact is higher if your web server serves or runs files from pub/media/custom_options/.
Is there a patch for CVE-2026-48356?
Yes. Adobe released fixed builds on July 14, 2026 in bulletin APSB26-73, such as 2.4.8-2026-jul and 2.4.7-2026-jul, with matching builds for Commerce B2B. Applying the update is the complete fix.
How do I mitigate CVE-2026-48356 without patching?
Block the guest-cart upload requests at your WAF, deny web access and PHP execution in pub/media/custom_options/, and monitor that directory for new files. Test each control. Blocking the directory alone doesn't stop files from being uploaded.
Is CVE-2026-48356 being exploited?
Yes. CISA added it to the Known Exploited Vulnerabilities catalog on October 27, 2026, which means CISA has evidence of exploitation, with a federal due date of November 10. Sansec, which discovered the flaw, reports exploitation attempts since March 2026, before Adobe's July fix.
Updates
Oct 27, 2026. First published, the day CISA added the CVE to KEV.
Sources
We publish an advisory when a vulnerability is Critical or on CISA KEV, has one identifiable component to check, and has a public proof of concept or reported exploitation. Advisories are updated as exploitation status changes.