{"id":10227,"date":"2026-03-20T16:28:48","date_gmt":"2026-03-20T16:28:48","guid":{"rendered":"https:\/\/plumrocket.com\/blog\/?p=10227"},"modified":"2026-03-20T16:34:01","modified_gmt":"2026-03-20T16:34:01","slug":"polyshell-magento-vulnerability","status":"publish","type":"post","link":"https:\/\/plumrocket.com\/blog\/polyshell-magento-vulnerability","title":{"rendered":"PolyShell: A New Vulnerability in Magento &#038; Adobe Commerce"},"content":{"rendered":"\n<p>A new Magento vulnerability called <strong>PolyShell<\/strong> has been publicly disclosed, affecting nearly all production versions of Magento 2 and Adobe Commerce. This flaw allows attackers to upload files that can execute malicious code on your server \u2014 and no login or account is required to attempt an attack.<\/p>\n\n\n\n<p>At Plumrocket, we are committed to keeping our clients and the wider Magento community informed and protected. In this article, we explain what PolyShell vulnerability is, how it works, which versions and server setups are at risk, and the immediate steps you should take to secure your store before an attack occurs.&nbsp;If you need help or suspect your store may be at risk, <a href=\"\/contacts\" title=\"\/contacts\" target=\"_blank\" rel=\"noreferrer noopener\">contact us<\/a> \u2014 our team will assist you immediately.<\/p>\n\n\n\n<h2>What Is PolyShell and How Did This Magento Vulnerability Happen?<\/h2>\n\n\n\n<p>A new security vulnerability in Magento and Adobe Commerce was publicly disclosed on March 17, 2026. Named PolyShell, it allows attackers to upload executable files to any store through the REST API \u2014 without needing an account or login. No production patch exists yet, and the exploit method is already circulating.<\/p>\n\n\n\n<p>The vulnerability exists in the Magento REST API \u2014 the part of your store that handles behind-the-scenes communication between different systems. Attackers can exploit a flaw in how the API processes file uploads to upload a special file that disguises itself as an image but actually contains executable code. This technique is called a polyglot \u2014 a file that is simultaneously a valid image and a valid program.<\/p>\n\n\n\n<p>The most serious aspect: <strong>attackers do not need a login or an account to do this<\/strong>. Anyone on the internet who knows the technique can attempt to upload the file to your store.<\/p>\n\n\n\n<p>This vulnerability has existed in Magento since the very first release of Magento 2. It went undetected for years.<\/p>\n\n\n\n<p><span style=\"color:#9b4202\" class=\"has-inline-color\"><strong>No official patch exists yet for production stores<\/strong><br><\/span>Adobe has fixed this in a pre-release version of Magento (2.4.9-alpha3+), but has not yet released an isolated patch for the versions that almost all live stores run today.<\/p>\n\n\n\n<h2>How Does the Attack Work?<\/h2>\n\n\n\n<p>When a customer adds a product to their cart, Magento allows them to upload a file as part of a product&#8217;s customization options \u2014 for example, a photo for a custom-printed mug. Magento is supposed to accept only image files and save them safely.<\/p>\n\n\n\n<p>PolyShell exploits the way Magento validates these uploads. An attacker crafts a file that passes Magento&#8217;s image check \u2014 it looks like a valid image \u2014 but is also a runnable script. When saved to the server and later accessed through a browser, the server may execute it as code rather than serve it as an image.<\/p>\n\n\n\n<h2>What Can Attackers Actually Do?<\/h2>\n\n\n\n<p>Depending on your server&#8217;s configuration, the consequences range from bad to catastrophic:<\/p>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p><strong>Full remote code execution<\/strong><br>On many server setups, an attacker can run any code on your server \u2014 accessing databases, reading customer data, and installing backdoors for persistent access.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p><strong>Account takeover (admin &amp; customer)<\/strong><br>Via stored cross-site scripting (XSS), an attacker can hijack administrator and customer sessions, gaining full control of your store.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p><strong>Silent backdoor installation<\/strong><br>Even if code cannot run today, the file stays on your server. A future change \u2014 a server migration, a config update \u2014 can activate it weeks or months later.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p><strong>Payment data theft<\/strong><br>Attackers with server access can install skimmers that silently capture customer payment details at checkout \u2014 a major compliance and liability risk.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2>Is Your Store Affected?<\/h2>\n\n\n\n<p>The short answer: <strong>if you run any production version of Magento Open Source or Adobe Commerce, your store is potentially vulnerable<\/strong>. The table below outlines the specific risk level based on your setup:<\/p>\n\n\n\n<div class=\"wp-block-wpdatatables-wpdatatables-gutenberg-block\">\n<div class=\"wpdt-c row wpDataTableContainerSimpleTable wpDataTables wpDataTablesWrapper\n wdtscroll\"\n    >\n        <table id=\"wpdtSimpleTable-35\"\n           style=\"border-collapse:collapse;\n                   border-spacing:0px;\"\n           class=\"wpdtSimpleTable wpDataTable\"\n           data-column=\"3\"\n           data-rows=\"5\"\n           data-wpID=\"35\"\n           data-responsive=\"0\"\n           data-has-header=\"1\">\n\n                    <thead>        <tr class=\"wpdt-cell-row \" style=\"height:47px;\">\n                                <th class=\"wpdt-cell wpdt-bc-313035 wpdt-fs-000015 wpdt-ff-000004 wpdt-tc-FFFFFF wpdt-align-center wpdt-bold\"\n                                            data-cell-id=\"A1\"\n                    data-col-index=\"0\"\n                    data-row-index=\"0\"\n                    style=\" width:197px;                    padding:10px;\n                    \"\n                    >\n                                        Vulnerability Type                    <\/th>\n                                                <th class=\"wpdt-cell wpdt-bc-313035 wpdt-fs-000015 wpdt-ff-000004 wpdt-tc-FFFFFF wpdt-align-center wpdt-bold\"\n                                            data-cell-id=\"B1\"\n                    data-col-index=\"1\"\n                    data-row-index=\"0\"\n                    style=\" width:320px;                    padding:10px;\n                    \"\n                    >\n                                        Affected Versions \/ Setup                    <\/th>\n                                                <th class=\"wpdt-cell wpdt-bc-313035 wpdt-ff-000004 wpdt-fs-000015 wpdt-bold wpdt-tc-FFFFFF\"\n                                            data-cell-id=\"C1\"\n                    data-col-index=\"2\"\n                    data-row-index=\"0\"\n                    style=\" width:108px;                    padding:10px;\n                    \"\n                    >\n                                        Risk Level                    <\/th>\n                                        <\/tr>\n                    <tbody>        <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left wpdt-bold\"\n                                            data-cell-id=\"A2\"\n                    data-col-index=\"0\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Unrestricted file upload                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left\"\n                                            data-cell-id=\"B2\"\n                    data-col-index=\"1\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        All Magento Open Source & Adobe Commerce versions up to 2.4.9-alpha2                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-F44336 wpdt-bold\"\n                                            data-cell-id=\"C2\"\n                    data-col-index=\"2\"\n                    data-row-index=\"1\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        High                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left wpdt-bold wpdt-bc-F5F4F4\"\n                                            data-cell-id=\"A3\"\n                    data-col-index=\"0\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Stored XSS                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left wpdt-bc-F5F4F4\"\n                                            data-cell-id=\"B3\"\n                    data-col-index=\"1\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        All versions before 2.3.5, or any store with a custom server configuration                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-FFA507 wpdt-bc-F5F4F4 wpdt-bold\"\n                                            data-cell-id=\"C3\"\n                    data-col-index=\"2\"\n                    data-row-index=\"2\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Elevated                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left wpdt-bold\"\n                                            data-cell-id=\"A4\"\n                    data-col-index=\"0\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Remote code execution (RCE) via PHP upload                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left\"\n                                            data-cell-id=\"B4\"\n                    data-col-index=\"1\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Stock Nginx on 2.0.0\u20132.2.x (via crafted filenames).\n\nAny Nginx configuration that passes all .php files to FastCGI.\n\nApache versions before 2.3.5 without proper PHP execution restrictions.                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-F44336 wpdt-bold\"\n                                            data-cell-id=\"C4\"\n                    data-col-index=\"2\"\n                    data-row-index=\"3\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Critical                    <\/td>\n                                        <\/tr>\n                            <tr class=\"wpdt-cell-row \" >\n                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-align-left wpdt-bold wpdt-bc-F5F4F4\"\n                                            data-cell-id=\"A5\"\n                    data-col-index=\"0\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Patched versions                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-000000 wpdt-bc-F5F4F4\"\n                                            data-cell-id=\"B5\"\n                    data-col-index=\"1\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Shipping labels and delivery tracking                    <\/td>\n                                                <td class=\"wpdt-cell wpdt-fs-000015 wpdt-tc-4CAF50 wpdt-bc-F5F4F4 wpdt-bold\"\n                                            data-cell-id=\"C5\"\n                    data-col-index=\"2\"\n                    data-row-index=\"4\"\n                    style=\"                    padding:10px;\n                    \"\n                    >\n                                        Fixed                    <\/td>\n                                        <\/tr>\n                    <\/table>\n<\/div><style id='wpdt-custom-style-35'>\n.wpdt-bc-313035 { background-color: #313035 !important;}\n.wpdt-fs-000015 { font-size: 15px !important;}\n.wpdt-ff-000004 { font-family: Arial, Helvetica, sans-serif !important;}\n.wpdt-tc-FFFFFF { color: #FFFFFF !important;}\n.wpdt-tc-000000 { color: #000000 !important;}\n.wpdt-tc-F44336 { color: #F44336 !important;}\n.wpdt-bc-F5F4F4 { background-color: #F5F4F4 !important;}\n.wpdt-tc-FFA507 { color: #FFA507 !important;}\n.wpdt-tc-4CAF50 { color: #4CAF50 !important;}\n<\/style>\n<\/div>\n\n\n\n<h2>How to Protect Your Magento Store Right Now<\/h2>\n\n\n\n<p>There is no official patch from Adobe for production stores yet. Until one is released, here are the three most important steps to take:<\/p>\n\n\n\n<h3 style=\"font-size:24px\">1. Restrict access to the vulnerable upload directory<\/h3>\n\n\n\n<p>Your web server should deny all access to the directory <code>pub\/media\/custom_options\/<\/code>. This can be done via Nginx or Apache rules and helps prevent any uploaded malicious files from being executed.<\/p>\n\n\n\n<h3 style=\"font-size:24px\">2. Review your server configuration carefully<\/h3>\n\n\n\n<p>Default (out-of-the-box) configurations are often more secure than heavily customized ones. Double-check that your setup does not allow <code>.php<\/code> or other executable files to run inside media directories.<\/p>\n\n\n\n<h3 style=\"font-size:24px\">3. Deploy active protection<\/h3>\n\n\n\n<p>Use a reliable server-side scanning tool to inspect the custom_options directory and the rest of your environment for suspicious or unknown files. This helps identify whether your store has already been compromised.<\/p>\n\n\n\n<p><p style=\"background-color: #ECF4F8;min-height:100px;box-shadow: 0 3px 10px 0 rgba(0,0,0,.15); padding: 20px 20px;\">If you suspect your store may be affected or need help securing your environment, don\u2019t take chances. <a href=\"\/contacts\" title=\"\/contacts\" target=\"_blank\" rel=\"noreferrer noopener\">Contact us<\/a> and our team will assess your store and guide you on the next steps.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A new security vulnerability in Magento and Adobe Commerce was publicly disclosed on March 17, 2026. Named PolyShell, it allows attackers to upload executable files to any store through the REST API \u2014 without needing an account or login. No production patch exists yet, and the exploit method is already circulating.<\/p>\n","protected":false},"author":6,"featured_media":10232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[22,11,452],"tags":[],"table_tags":[],"_links":{"self":[{"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/posts\/10227"}],"collection":[{"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/comments?post=10227"}],"version-history":[{"count":8,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/posts\/10227\/revisions"}],"predecessor-version":[{"id":10236,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/posts\/10227\/revisions\/10236"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/media\/10232"}],"wp:attachment":[{"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/media?parent=10227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/categories?post=10227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/tags?post=10227"},{"taxonomy":"table_tags","embeddable":true,"href":"https:\/\/plumrocket.com\/blog\/wp-json\/wp\/v2\/table_tags?post=10227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}