Inhoud van dit artikel
De Amerikaanse cyberdienst CISA heeft PolyShell op 27 oktober 2026 toegevoegd aan de lijst van actief misbruikte kwetsbaarheden. Voor Magento-shops is dat geen nieuws over de patch. Die bestaat al sinds juli. Het is wel een signaal dat er nog genoeg winkels openstaan om misbruik de moeite waard te maken.
Het venijn zit in de volgorde. Wie in maart of april kwetsbaar was, kan al een webshell op de server hebben staan. Een patch zet de deur dicht. Wat er al binnen is, blijft gewoon liggen.
Ontwikkelende situatie. Dit artikel is geschreven op 28 oktober 2026, een dag na de KEV-opname. Versienummers volgen het Adobe-bulletin APSB26-73 en het bijbehorende knowledge base-artikel KA-37421.
Wat is er aan de hand?
PolyShell is de naam die het Nederlandse securitybedrijf Sansec gaf aan een lek in de REST API van Magento Open Source en Adobe Commerce. Het officiële nummer is CVE-2026-48356. Adobe classificeert het als unrestricted file upload (CWE-434) en geeft het een CVSS-score van 9.6. In het CVE-record en bij NVD staat 9.3. Het verschil zit alleen in de score voor beschikbaarheid.
Zo werkt het, volgens het onderzoek van Sansec:
- De guest-cart endpoints
POST /V1/guest-carts/:cartId/itemsenPUT /V1/guest-carts/:cartId/items/:itemIdvereisen geen login. - Je kunt daar een bestand meesturen als custom option van een winkelwagenregel.
- Magento controleert niet goed of die optie bestaat, of het type een bestand mag zijn, en welke extensie het bestand heeft.
- De enige check is of het bestand op een afbeelding lijkt. Een polyglot, een geldige GIF of PNG met PHP-code erin, komt daar zonder moeite langs.
- Het bestand belandt in
pub/media/custom_options/quote/, een map die via het web bereikbaar is.
Of die code daarna ook draait, hangt af van je webserverconfiguratie. Bij een nginx-config die elk .php-bestand naar PHP-FPM doorstuurt, of Apache zonder php_flag engine 0 in die map, heb je remote code execution. Anders blijft het bij een bestand op schijf, of bij stored XSS. Volgens Sansec geldt dat laatste voor versies vóór 2.3.5 of bij afwijkende configuraties. GraphQL gebruikt een ander codepad en is volgens Sansec niet kwetsbaar.
De tijdlijn
- 17 maart 2026: Sansec waarschuwt publiek. Er is dan nog geen patch voor productieversies.
- 19 maart: eerste aanvallen in het wild.
- 30 maart: massale aanvalsgolf. In het rapport over de bijbehorende loader-campagne meldt Sansec dat in één uur 471 winkels een script-loader kregen, nadat er via PolyShell webshells waren geplaatst.
- 14 juli: Adobe publiceert APSB26-73 met de fix voor alle ondersteunde releaselijnen.
- 27 oktober: CISA zet CVE-2026-48356 op de KEV-lijst. Amerikaanse federale instanties moeten vóór 10 november patchen.
Over de schaal van het misbruik: Sansec schrijft dat op 24 maart op "56,7% van alle winkels" kwaadaardige PHP was geüpload, en later dat het aanvallen zag op 79,5% van de winkels. Op dezelfde pagina staat bij dat laatste getal "beschermde winkels". Het gaat dus om winkels die Sansec monitort, niet om alle Magento-shops wereldwijd. Een absoluut aantal gehackte winkels publiceert niemand.
Let op een tegenstelling. Adobe schrijft in het bulletin nog steeds dat het "niet op de hoogte is van misbruik in het wild". Het bulletin dateert van vóór de KEV-opname. CISA en Sansec zeggen allebei dat het lek actief misbruikt wordt.
Wie loopt risico?
Volgens APSB26-73 zijn deze versies kwetsbaar:
| Product | Kwetsbaar | Gefixt |
|---|---|---|
| Magento Open Source | 2.4.9, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15 en eerder | 2.4.9-2026-jul, 2.4.8-2026-jul, 2.4.7-2026-jul, 2.4.6-2026-jul |
| Adobe Commerce | 2.4.9, 2.4.8-p5, 2.4.7-p10, 2.4.6-p15, 2.4.5-p17, 2.4.4-p18 en eerder | de -2026-jul-variant van elke lijn |
| Adobe Commerce B2B | 1.5.3, 1.5.2-p5, 1.4.2-p10, 1.3.4-p17, 1.3.3-p18 en eerder | de -2026-jul-variant van elke lijn |
| Adobe Commerce Events | 1.6.0 t/m 1.20.0 | 1.21.0 |
Sansec en Adobe zijn het niet eens over 2.4.9
Sansec schreef in mei dat Magento 2.4.9 de fix al bevatte. Adobe noemt 2.4.9 in APSB26-73 juist als kwetsbaar en levert er een aparte patch voor (2.4.9-2026-jul). Wij volgen Adobe. Draai je 2.4.9 zonder de juli-patch, dan behandel je je shop als kwetsbaar.
De isolated patch past niet op elke versie
Adobe levert de fix als isolated patch per releaselijn. Die patch past alleen op het laatste patchniveau van die lijn. De 2.4.7-patch werkt dus alleen op 2.4.7-p10. Zit je op 2.4.7-p6, dan moet je eerst naar p10. Voor Magento Open Source zijn de patches alleen te downloaden vanaf 2.4.6. Draai je Open Source 2.4.5 of ouder, dan is er geen patch. Dan is upgraden de enige weg.
Op Adobe Commerce Cloud zit de fix in de laatste update van cloud-patches. Adobe waarschuwt dat de isolated patch daar bovenop installeren tot fouten kan leiden.
Wat je nu doet: de checklist
Doe het in deze volgorde. Eerst de deur dicht, dan zoeken, dan opruimen.
1. Patch.
- Stel vast op welke versie en welk patchniveau je zit (
composer show magento/product-community-editionof de enterprise-variant). - Breng de shop naar het laatste patchniveau van je lijn.
- Pas de juli-patch uit KA-37421 toe, of upgrade naar een
-2026-jul-release. - Gebruik je Adobe Commerce Events, ga dan naar 1.21.0.
- Controleer het resultaat met de Commerce Version Tool van Adobe. Die werkt pas nadat de CE-patch is toegepast.
2. Sluit de uploadmap af.
Blokkeer webtoegang tot pub/media/custom_options/. Sansec geeft voor nginx dit blok, te plaatsen vóór elk \.php$-blok:
location ~* ^/pub/media/custom_options/ {
deny all;
return 403;
}
Op Apache controleer je of de .htaccess in die map de PHP-engine uitzet en toegang weigert. Let op: dit voorkomt dat geplaatste bestanden uitgevoerd worden. Het voorkomt niet dat ze geüpload worden. Dat doet alleen de patch of een WAF die de API-call zelf blokkeert.
3. Zoek naar geplaatste bestanden. Zie de volgende sectie.
4. Ruim op en roteer.
- Verwijder alles wat er niet hoort en zet een schone versie terug waar nodig.
- Verwijder onbekende accounts in de
admin_user-tabel. - Wijzig daarna de wachtwoorden van de database, admin-accounts en API-integraties.
Twijfel je of je alles hebt gevonden? Dan is het verstandiger de server als gecompromitteerd te behandelen. Op /security/gehackt lees je hoe wij zo'n opschoning aanpakken.
Hoe controleer je of je geraakt bent?
Patchen verwijdert geen bestanden die eerder zijn geüpload. Ook niet als de patch al in juli is geïnstalleerd. Dit zijn de checks die Sansec noemt, aangevuld met wat voor de hand ligt.
Uploads in de custom_options-map
find pub/media/custom_options/ -type f ! -name '.htaccess'
Elk .php-, .phtml- of .phar-bestand in die map is volgens Sansec een sterke aanwijzing voor een compromittering. Ook "afbeeldingen" verdienen een blik: een polyglot heeft een geldige afbeeldingsheader. Zoek binnen die map op PHP-tags:
grep -rlE "<\?(php|=)" pub/media/custom_options/
Bekende bestandsnamen uit de aanvallen zijn onder meer index.php, bypass.phtml, c.php, r.php, rce.php, test.php, json-shell.php en static.php. Sansec zag ook namen met een cijfer ervoor, zoals 780index.php.
De accesson.php-backdoor
find /var/www -name 'accesson.php' -type f
Pas het pad aan naar je eigen webroot. Op één gehackte winkel vond Sansec dit bestand in nieuwe assets/images/-submappen in vrijwel elke hoofdmap: app/, var/, vendor/, pub/ en generated/. De backdoor print altijd 8194460. Daarmee testen aanvallers of hun shell nog leeft.
Scripts in CMS-content
Na de uploads volgde in veel gevallen een script-loader in CMS-blokken. Sansec noemt onder meer de domeinen lanhd6549tdhse.top, additionalver.com en deepveindrilling.com. Zoek in cms_block en cms_page op die domeinen en op onbekende <script>-tags. Hoe je dat met veilige SQL doet, staat in ons artikel over de deepveindrilling-loader in CMS-blokken.
Logs
Zoek in je access logs naar POST en PUT op /rest/ en guest-carts/.../items met ongewoon grote bodies. Sansec publiceerde tientallen IP-adressen die naar het lek scanden. Vind je een treffer, kijk dan wat er rond dat tijdstip in pub/media/ is aangemaakt.
Vind je iets? Ga dan niet alleen dat ene bestand verwijderen. Een webshell is een ingang, en wie binnen was, heeft vaak meer achtergelaten: een admin-account, een cronjob of een extra backdoor.
Waar dit past naast andere Magento-lekken
PolyShell is niet het enige Magento-lek dit jaar. BlockStrap en StyleSmuggler hebben elk hun eigen patch en eigen sporen. Het patroon is wel steeds hetzelfde. Een shop die achterloopt met patches, loopt achter op meerdere fronten tegelijk. Wil je dat structureel geregeld hebben, kijk dan naar Magento support of ons overzicht van Magento-security.
Veelgestelde vragen
Ik heb de juli-patch al geïnstalleerd. Ben ik veilig?+
Tegen nieuwe uploads via dit lek wel. Maar was je shop tussen maart en het moment van patchen kwetsbaar, dan kan er al iets geplaatst zijn. Draai dus alsnog de controles hierboven.
Is 2.4.9 kwetsbaar of niet?+
Sansec zegt dat 2.4.9 de fix bevatte, Adobe noemt 2.4.9 kwetsbaar en levert een aparte patch. Wij volgen Adobe: zonder 2.4.9-2026-jul behandel je de shop als kwetsbaar.
Is een nginx-regel op pub/media/custom_options genoeg?+
Nee. Die regel voorkomt dat geüploade bestanden via het web uitgevoerd worden. Aanvallers kunnen ze nog steeds uploaden. Verandert je configuratie later, dan kunnen ze alsnog actief worden. Het is een extra slot, geen vervanging voor de patch.
Ik draai Magento Open Source 2.4.5. Wat nu?+
Adobe biedt voor Open Source alleen patches vanaf 2.4.6. Op 2.4.5 of ouder is er geen officiële fix. Upgraden is dan de weg. Na een korte analyse krijg je van ons een onderbouwde inschatting van wat dat vraagt.
Waarom staat het pas nu op de KEV-lijst als de patch al uit juli is?+
CISA voegt een lek toe zodra het bewijs ziet van actief misbruik. CISA publiceert dat bewijs niet. De KEV-opname zegt niets over de patch. Het zegt dat er nog steeds misbruik plaatsvindt.
Raakt dit ook Shopify-winkels?+
Nee. PolyShell zit in de REST API van Magento Open Source en Adobe Commerce. Shopify draait op een ander platform.
Twijfel je of jouw shop is geraakt? Plan een gesprek. Je praat direct met de mensen die het onderzoek doen.
Bronnen: Adobe APSB26-73, Adobe KA-37421, CISA KEV-catalogus en CISA-alert van 27 oktober 2026, Sansec: PolyShell, Sansec: deepveindrilling-loader, Rescana. Geschreven op 28 oktober 2026.




