Zeven WordPress-plugins van BdThemes maakten stille beheerdersaccounts aan op de sites die ze draaien, meldt beveiligingsbedrijf Wordfence, zonder dat er ook maar één bestand op de server veranderde.
Het gaat om premium Elementor-uitbreidingen die op veel Nederlandse bedrijfssites staan. Element Pack alleen al heeft ruim 100.000 actieve installaties en is sinds 8 augustus gesloten voor download in de officiële pluginmap, samen met de zes andere getroffen plugins. De gebruikelijke controles zeggen hier niets: er kwam geen update binnen, er wijzigde geen bestand, geen versienummer wijkt af. Wie alleen kijkt of alles bij is, kijkt naar het verkeerde scherm.
De feed was het inbraakpad, niet de plugin
De plugins bevatten een component, Biggopti, die promotiebanners ophaalt bij de eigen API van BdThemes en die in het beheerscherm toont. Achter die API zit geen applicatieserver maar een statische opslagbucket bij DigitalOcean met platte JSON-bestanden. Een aanvaller kreeg schrijfrechten op die bucket en verving de legitieme JSON-antwoorden door geprepareerde payloads, schrijft Wordfence in zijn analyse van 8 augustus.
Dat werkte omdat de plugincode zelf een fout bevatte. Het veld display_id uit dat JSON-antwoord belandde zonder escaping in een HTML-id-attribuut, een cross-site-scriptinglek dat op 1 maart 2026 met Prime Slider 4.1.9 in de code kwam en daarna meeliftte naar de andere plugins. Het lek heeft een CVSS-score van 5.4 en staat nog altijd als niet gepatcht geregistreerd. Het vergiftigde veld brak uit dat attribuut en zette er een event-handler in die via een CSS-animatie binnen tien milliseconden afvuurt, op elke wp-admin-pagina die een ingelogde beheerder opent.
Wat het script achterlaat
Het script draait in de browsersessie van de beheerder en heeft daarmee alles wat die beheerder heeft. Met de nonce uit de actieve sessie maakt het via de REST API een nieuwe beheerder aan. Daarna installeert het via het gewone plugin-uploadformulier een nepplugin met een webshell erin, emer-run.php, en die zet twee modules in de map voor must-use-plugins: een achterdeur die zonder wachtwoord toegang geeft via een URL-parameter, en een module die de aangemaakte accounts uit de gebruikerslijst filtert en het gebruikersaantal naar beneden bijstelt. Beide bestanden kregen een tijdstempel uit september 2025 om tussen de rest op te gaan.
Een tweede variant van de payload, x.js, stond op de infrastructuur van BdThemes zelf. Die berekent de inloggegevens uit de hostnaam van de site: een gebruikersnaam van bd_ plus zes tekens, een wachtwoord van Bd@26! plus diezelfde tekens, gekoppeld aan een e-mailadres op wordpress.org. Dat scheelt de aanvaller een centrale lijst van besmette sites, en het geeft de verdediger een precies zoekpatroon, want je kunt exact uitrekenen welke gebruikersnaam je moet zoeken.
Het commandoserverdomein achter de campagne is volgens Wordfence hetzelfde als bij twee eerdere pluginkapingen van de afgelopen twee maanden, bij Advanced Responsive Video Embedder en bij OptinMonster.

Waar je nu kijkt
Draai je een van de zeven plugins (Element Pack, Prime Slider, Pixel Gallery, Ultimate Post Kit, Ultimate Store Kit, Live Copy Paste of Smart Admin Assistant), begin dan niet in het beheerscherm, want daar haalt de verbergmodule de nieuwe accounts juist weg. Kijk in de database en op schijf.
- Gebruikers: accounts met een e-mailadres op wordpress.org of developer.wordpress.org, en gebruikersnamen die beginnen met bd_ gevolgd door zes tekens.
- Bestanden: emer-run.php, en in de mu-plugins-map class-wp-token-validate.php, een class-wp-query-bestand met een willekeurige achtervoeging, en wp-cache-optimizer.php.
- Instellingen: de opties fz_emer_login_tokens en fz_emer_done_v1 in de optietabel.
Vind je iets, dan is opruimen alleen niet genoeg: ververs alle beheerderswachtwoorden en de geheime sleutels in wp-config.php, zodat lopende sessies eruit vliegen. Wordfence-klanten met een betaald abonnement kregen de detectieregels op 7 augustus, gratis gebruikers krijgen ze pas na de standaardvertraging van dertig dagen, dus rond 6 september.
De campagne kan al sinds 23 juni actief zijn geweest, de begindatum die in het vergiftigde JSON-bestand stond. Wordfence werd op 7 augustus gewaarschuwd en zag de aanval diezelfde dag in het wild, waarna de plugins uit de pluginmap gingen en de eindpunten op 8 augustus weer schone JSON teruggaven. BdThemes heeft er zelf nog geen verklaring over gepubliceerd.
Een inkoopkeuze, geen onderhoudskwestie
Patchen dicht een gat maar verwijdert geen achterdeur, en dit incident duwt die regel een stap verder: hier viel er niets te patchen. Er kwam geen update binnen, er veranderde geen bestand, en de versiecheck bleef groen. Wat er wel gebeurde, is dat een leverancier de controle over zijn eigen opslagbucket verloor en dat die bucket rechtstreeks JavaScript mocht uitvoeren in het scherm waar een beheerder is ingelogd.
Bij elke plugin die je installeert kies je niet alleen code, maar ook een blijvende verbinding naar de servers van de maker. Die verbinding staat nog open lang nadat de installatie klaar is, en niemand controleert hem opnieuw. Het is dezelfde verschuiving als bij grote IT-toeleveranciers, waar niet het bedrijf zelf maar het account dat de leverancier in jouw omgeving heeft het echte aanvalsoppervlak vormt. Drie pluginkapingen in twee maanden, met hetzelfde commandoserverdomein erachter, laten zien dat aanvallers die conclusie al hebben getrokken.
Veelgestelde vragen
Minder plugins, meer grip
Als je site of platform afhangt van een stapel plugins die live meepraten met de servers van hun makers, denk ik graag mee over wat je zelf in handen wilt houden. Ik doe het hele traject, van meedenken en ontwerp tot bouwen, koppelen en automatiseren, self-hosted waar dat kan.
Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.
