{"id":266,"date":"2026-08-09T10:45:16","date_gmt":"2026-08-09T08:45:16","guid":{"rendered":"https:\/\/helloblog.io\/nl\/bdthemes-supplychainaanval-vergiftigde-api\/"},"modified":"2026-08-09T10:45:16","modified_gmt":"2026-08-09T08:45:16","slug":"bdthemes-supplychainaanval-vergiftigde-api","status":"publish","type":"post","link":"https:\/\/helloblog.io\/nl\/bdthemes-supplychainaanval-vergiftigde-api\/","title":{"rendered":"BdThemes-supplychainaanval via vergiftigde API: controleer je WordPress-sites"},"content":{"rendered":"\n<p>Een gecompromitteerde promotiefeed heeft meerdere BdThemes-plugins veranderd in een aanvalskanaal. Aanvallers hoefden geen bestanden in de WordPress.org-repository te wijzigen: een vergiftigd JSON-antwoord liet JavaScript draaien in iedere ingelogde beheerderssessie en kon zo volledige siteovername veroorzaken.<\/p>\n\n\n\n<p>De WordPress-pluginteam heeft alle getroffen plugins tijdelijk gesloten terwijl het onderzoek en een volledige inspectie lopen. Controleer sites met deze plugins direct op de indicatoren in dit artikel, ook als je geen verdachte wijzigingen in pluginbestanden ziet.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-danger is-style-danger is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Volledige sitecompromittering mogelijk<\/h4>\n\n\n<p>Deze aanval werkt zonder pluginupdate en laat de pluginbestanden op schijf ongemoeid. Alleen bestandsintegriteitscontroles missen de primaire infectieketen daarom mogelijk.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wat is er gecompromitteerd?<\/h2>\n\n\n\n<p>BdThemes levert in meerdere plugins een intern systeem met de naam <em>Biggopti<\/em>. Dit systeem haalt promotiebanners op vanaf een API en toont ze in het WordPress-dashboard. De API gebruikt geen dynamische applicatieserver, maar statische JSON-bestanden in een DigitalOcean Spaces-bucket die Cloudflare beschermt.<\/p>\n\n\n\n<p>Aanvallers kregen schrijfrechten op die opslagbucket of op de infrastructuur eromheen. Zij vervingen legitieme JSON-antwoorden door kwaadaardige records en maakten misbruik van een XSS-kwetsbaarheid die de pluginmakers in de parser voor die antwoorden hadden ge\u00efntroduceerd.<\/p>\n\n\n\n<p>XSS, of cross-site scripting, betekent dat onbetrouwbare invoer als uitvoerbare browsercode op een pagina terechtkomt. Hier draait die code in de browser van een ingelogde WordPress-beheerder, stilzwijgend bij elke laadactie van een <code>wp-admin<\/code>-pagina.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getroffen plugins en kwetsbaarheid<\/h2>\n\n\n\n<p>De kwetsbaarheid zit in Biggopti en heeft een CVSS-score van <strong>5,4 (gemiddeld)<\/strong>. De patchstatus is <strong>niet gepatcht<\/strong>. Het betreft XSS via de parameter <code>display_id<\/code> uit de Sigmative API, doordat de code uitvoer onvoldoende escapt.<\/p>\n\n\n\n<p>De volgende plugins gebruiken de getroffen Biggopti-functionaliteit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/bdthemes-element-pack-lite\">Element Pack Addons for Elementor<\/a> (<code>bdthemes-element-pack-lite<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/bdthemes-prime-slider-lite\">Prime Slider Addons for Elementor<\/a> (<code>bdthemes-prime-slider-lite<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/pixel-gallery\">Pixel Gallery Addons for Elementor<\/a> (<code>pixel-gallery<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/ultimate-post-kit\">Ultimate Post Kit Addons for Elementor<\/a> (<code>ultimate-post-kit<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/ultimate-store-kit\">Ultimate Store Kit<\/a> voor WooCommerce, EDD en Elementor (<code>ultimate-store-kit<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/live-copy-paste\">Live Copy Paste for Elementor<\/a> (<code>live-copy-paste<\/code>)<\/li>\n\n\n<li><a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/wordpress-plugins\/smart-admin-assistant\">Smart Admin Assistant<\/a> (<code>smart-admin-assistant<\/code>)<\/li>\n\n<\/ul>\n\n\n\n<p>De kwetsbaarheid maakt het mogelijk dat iemand die de Sigmative API-server of de bijbehorende opslag compromitteert, willekeurige scripts in ge\u00efnjecteerde pagina&#8217;s uitvoert. Bekijk de volledige kwetsbaarheidsregistratie voor de technische classificatie: <a href=\"https:\/\/www.wordfence.com\/threat-intel\/vulnerabilities\/id\/7bf1d6f9-afe2-41c2-968b-20dbc474cd73\">Biggopti Library \u2013 Cross-Site Scripting via display_id from Sigmative API<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">De fout in de dashboardbanner<\/h2>\n\n\n\n<p>Elke BdThemes-plugin die Biggopti gebruikt, laadt een client-side JavaScript-bestand tijdens <code>admin_init<\/code>. Daardoor draait het script onvoorwaardelijk bij iedere <code>wp-admin<\/code>-paginalaadactie. Het script vraagt de bannergegevens op bij de API en bouwt vervolgens een HTML-notice in de DOM, de documentstructuur van de browser.<\/p>\n\n\n\n<p>Daarbij neemt de code <code>display_id<\/code> uit het externe JSON-antwoord rechtstreeks op in een HTML-<code>id<\/code>-attribuut. Die waarde krijgt geen client-side escaping. Het patroon komt neer op het volgende onveilige gedrag:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ displayId komt uit een extern JSON-antwoord en is niet ontsmet.\nconst displayId = banner.display_id || banner.id || 'default';\nconst elementId = 'bdt-admin-biggopti-api-biggopti-' + displayId;\nconst attributes = 'id=&quot;' + elementId + '&quot;';\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\">\/\/ displayId komt uit een extern JSON-antwoord en is niet ontsmet.<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">const<\/span><span style=\"color:#79B8FF\"> displayId<\/span><span style=\"color:#F97583\"> =<\/span><span style=\"color:#E1E4E8\"> banner.display_id <\/span><span style=\"color:#F97583\">||<\/span><span style=\"color:#E1E4E8\"> banner.id <\/span><span style=\"color:#F97583\">||<\/span><span style=\"color:#9ECBFF\"> 'default'<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">const<\/span><span style=\"color:#79B8FF\"> elementId<\/span><span style=\"color:#F97583\"> =<\/span><span style=\"color:#9ECBFF\"> 'bdt-admin-biggopti-api-biggopti-'<\/span><span style=\"color:#F97583\"> +<\/span><span style=\"color:#E1E4E8\"> displayId;<\/span><\/span>\n<span class=\"line\"><span style=\"color:#F97583\">const<\/span><span style=\"color:#79B8FF\"> attributes<\/span><span style=\"color:#F97583\"> =<\/span><span style=\"color:#9ECBFF\"> 'id=\"'<\/span><span style=\"color:#F97583\"> +<\/span><span style=\"color:#E1E4E8\"> elementId <\/span><span style=\"color:#F97583\">+<\/span><span style=\"color:#9ECBFF\"> '\"'<\/span><span style=\"color:#E1E4E8\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In hetzelfde script ontsmet de code het attribuut <code>data-display-id<\/code> w\u00e9l. Die routine vervangt onder meer <code>&amp;<\/code>, <code>&lt;<\/code>, <code>&gt;<\/code>, en dubbele aanhalingstekens door HTML-entiteiten. De bescherming geldt echter niet voor de injectie in het <code>id<\/code>-attribuut.<\/p>\n\n\n\n<p>De SVN-geschiedenis plaatst de fout op 1 maart 2026. Prime Slider-versie 4.1.9, met SVN-revisie <code>r3471891<\/code>, voegde toen de Biggopti-API-JavaScript toe en gebruikte <code>display_id<\/code> zonder escaping in het <code>id<\/code>-attribuut. Daarna kwam dezelfde aanpak in andere plugins terecht.<\/p>\n\n\n\n<p>Latere releases voegden een op <code>DOMParser<\/code> gebaseerde sanitizer toe voor het inhoudsveld van de banner. Die verwijdert gevaarlijke HTML-tags en inline eventhandlers uit de inhoud, maar laat de onveilige <code>id<\/code>-attribuutinjectie bestaan. Op 10 mei veranderde het endpoint naar <code>api-data-all-records<\/code>; ook toen bleef het <code>id<\/code>-attribuut onge\u00ebscaped.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Van JSON-record naar beheerderstoegang<\/h2>\n\n\n\n<p>De kwaadaardige <code>display_id<\/code> sluit het HTML-<code>id<\/code>-attribuut af en voegt een <code>onanimationstart<\/code>-eventhandler toe. Een CSS-animatie start die handler binnen 10 milliseconden. Daardoor haalt de browser een vervolgscripts op zodra een beheerder een willekeurige dashboardpagina opent, zonder zichtbare interactie.<\/p>\n\n\n\n<p>De oudste mogelijke actieve datum van de XSS-campagne is 23 juni 2026. Het vergiftigde record gebruikte een promotiebericht voor een zomeractie met die <code>start_date<\/code>. De API-antwoorden bevatten op het moment van onderzoek nog de kwaadaardige gegevens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primair script: w2.js<\/h3>\n\n\n\n<p>Voor plugins die <code>api-data-all-records<\/code> gebruiken, laadt de aanval het primaire script <code>w2.js<\/code>. Dat script benadert eerst de command-and-controlserver (C2) op <code>ia-cdn[.]com\/fz\/c<\/code> met de origin van de getroffen site. De C2 geeft doelinstructies terug; bij de status <code>skip<\/code> of <code>done<\/code> stopt het script.<\/p>\n\n\n\n<p>Als de aanval doorgaat, gebruikt het script de actieve <code>X-WP-Nonce<\/code> uit de beheerderssessie om via de WordPress REST API een nieuwe administrator aan te maken. Als dat niet lukt, probeert het de gebruikelijke formulierverzendingen in WordPress.<\/p>\n\n\n\n<p>Vervolgens downloadt het vanaf de C2 een nepplugin als ZIP en installeert die via het normale formulier voor pluginuploads. De aanvallers maskeren die plugin met een neutraal klinkende slug zoals <code>wp-smart-thumbnails<\/code>. De ZIP bevat een webshell met de naam <code>emer-run.php<\/code>, die rechtstreeks via een URL wordt aangeroepen.<\/p>\n\n\n\n<p>De webshell installeert daarna twee persistentiemodules in de map voor Must-Use-plugins. De aangetroffen voorbeelden droegen tijdstempels uit september 2025 om op legitieme bestanden te lijken; bestandsnamen kunnen per infectie verschillen. Een module maakt magisch inloggen als administrator mogelijk via <code>?_wplogin=&lt;token&gt;<\/code> en richt zich op de beheerder die het langst geregistreerd staat. De andere module haakt in op WordPress-databasequeries, verbergt de aangemaakte accounts in de gebruikerslijst en verlaagt ook de weergegeven gebruikersaantallen.<\/p>\n\n\n\n<p>Tijdens elke fase stuurt het script resultaten terug naar de C2 met <code>navigator.sendBeacon<\/code>. Die browser-API verstuurt data ook als de pagina sluit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alternatief script: x.js<\/h3>\n\n\n\n<p>Het alternatieve script <code>x.js<\/code> stond rechtstreeks op de infrastructuur van BdThemes en werd geleverd aan plugins met het endpoint <code>api-data-records<\/code>. Dit script maakt beheerdersgegevens die het deterministisch afleidt uit de hostnaam van de getroffen site.<\/p>\n\n\n\n<p>De gebruikersnaam volgt het patroon <code>bd_<\/code> plus een base36-hash van zes tekens. Het wachtwoord is eveneens uit die hash afgeleid en het account krijgt een e-mailadres op <code>@wordpress.org<\/code>. Omdat de gegevens voorspelbaar zijn, hoeven de aanvallers geen centrale lijst met gecompromitteerde sites te bewaren; incidentresponders kunnen de verwachte accountnaam en inloggegevens voor een verdacht domein zelf afleiden.<\/p>\n\n\n\n<p>Het script gebruikt de sessie van de beheerder om <code>wp-admin\/user-new.php<\/code> op te vragen, haalt daar een nonce op en verstuurt vervolgens het formulier om een administrator te maken. Daarna rapporteert het resultaat, de inloggegevens, de site-origin, de logout-URL en de pagina-URL aan de C2. Als de browser <code>localStorage<\/code> ondersteunt, schrijft het een vlag om de actie niet opnieuw uit te voeren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Indicatoren van compromittering<\/h2>\n\n\n\n<p>Doorzoek zowel bestanden als de database en controleer accounts handmatig. De aanval kan nieuwe beheerders verbergen in de gebruikerslijst, dus vergelijk queryresultaten, de daadwerkelijke database en je verwachte accountinventaris.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Primair payloadadres: <code>ia-cdn[.]com\/fz\/w2.js<\/code>.<\/li>\n\n\n<li>C2-beaconendpoint: <code>ia-cdn[.]com\/fz\/c<\/code>.<\/li>\n\n\n<li>Vergiftigde API-endpoints, inmiddels opgeschoond: <code>api[.]sigmative[.]io\/prod\/store\/api\/biggopti\/api-data-all-records<\/code>, <code>api[.]sigmative[.]io\/prod\/store\/api\/biggopti\/api-data-records<\/code> en <code>api[.]sigmative[.]io\/prod\/store\/api\/biggopti\/x.js<\/code>.<\/li>\n\n\n<li>Webshellbestand: <code>emer-run.php<\/code>, MD5 <code>1024732009983dd5e54b4cf5593f04d4<\/code>.<\/li>\n\n\n<li>MU-plugin voor magic login: <code>class-wp-token-validate.php<\/code>, MD5 <code>7719cd98a35ffad2771f26d1ceab7d27<\/code>.<\/li>\n\n\n<li>MU-plugin voor stealth: <code>class-wp-query-9d127ff3.php<\/code> of een vergelijkbare naam volgens <code>class-wp-query-*.php<\/code>, MD5 <code>9aadc3e5c5242b273bd17c5bdc358845<\/code>.<\/li>\n\n\n<li>MU-plugin vermomd als healthcheck: <code>wp-cache-optimizer.php<\/code>, MD5 <code>e450ae5bc4bfc0d960dded06a76bb8e9<\/code>.<\/li>\n\n\n<li>Databaseoptie <code>fz_emer_login_tokens<\/code>, waarin magic-login-tokens staan.<\/li>\n\n\n<li>Databaseoptie <code>fz_emer_done_v1<\/code>, een vlag die een afgeronde compromittering markeert.<\/li>\n\n\n<li>Accounts met een e-mailadres op <code>@wordpress.org<\/code> of <code>@developer.wordpress.org<\/code>.<\/li>\n\n\n<li>Gebruikersnamen die passen bij <code>bd_<\/code> gevolgd door zes alfanumerieke tekens.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tijdlijn van de aanval<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>1 maart 2026:<\/strong> Prime Slider 4.1.9 krijgt Biggopti-API-JavaScript via SVN <code>r3471891<\/code>. <code>display_id<\/code> komt zonder escaping in een <code>id<\/code>-attribuut terecht; het endpoint is <code>api-data-records<\/code>.<\/li>\n\n\n<li><strong>10 mei 2026:<\/strong> Het endpoint verandert naar <code>api-data-all-records<\/code>. De content krijgt een DOMParser-sanitizer, maar het <code>id<\/code>-attribuut blijft onveilig.<\/li>\n\n\n<li><strong>23 juni 2026:<\/strong> De <code>start_date<\/code> in de vergiftigde API-campagne voor de zomeraanbieding markeert de vroegst mogelijke datum waarop de XSS actief was.<\/li>\n\n\n<li><strong>6 augustus 2026, 22:40 UTC:<\/strong> De laatste wijzigingsdatum van het vergiftigde <code>api-data-records<\/code>-antwoord.<\/li>\n\n\n<li><strong>7 augustus 2026, 09:11 UTC:<\/strong> De laatste wijzigingsdatum van het vergiftigde <code>api-data-all-records<\/code>-antwoord.<\/li>\n\n\n<li><strong>7 augustus 2026:<\/strong> De aanval wordt in het wild waargenomen en gemeld bij het Threat Intelligence Team. De WordPress-pluginteam sluit de plugins dezelfde dag in afwachting van beoordeling.<\/li>\n\n\n<li><strong>7 augustus 2026, 16:56 UTC:<\/strong> Onderzoekers leggen onderzoeksartefacten vast.<\/li>\n\n\n<li><strong>8 augustus 2026:<\/strong> Beide API-endpoints leveren weer schone JSON.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reikwijdte en detectie<\/h2>\n\n\n\n<p>De C2-domeinnaam hangt samen met de aanvallers achter de recente supplychainaanvallen op Advanced Responsive Video Embedder en OptinMonster. Hun doel is grootschalige, stille persistentie als administrator en remote code execution in WordPress-omgevingen.<\/p>\n\n\n\n<p>Deze aanval onderscheidt zich van een klassieke supplychainaanval omdat geen enkel sourcebestand in de offici\u00eble WordPress.org-repository hoefde te veranderen. Een vertrouwde externe promotiefeed was genoeg om de kwetsbare weergavecode aan te vallen. Dat kwaadaardige JSON-records en <code>x.js<\/code> in de eigen bucket van BdThemes terechtkwamen, wijst op een ernstige compromittering van cloudopslagreferenties of interne infrastructuur.<\/p>\n\n\n\n<p>Wordfence Premium, Care en Response, plus betalende gebruikers van Wordfence CLI, kregen op 7 augustus 2026 malwaresignaturen en WAF-regels voor deze aanval. Gratis gebruikers van Wordfence en Wordfence CLI krijgen dezelfde detectieregels na de gebruikelijke vertraging van 30 dagen.<\/p>\n\n\n\n<p>Wordfence Care en Response bieden beveiligingsmonitoring en malwareverwijdering. Bij een incident onderzoekt het responsteam de oorzaak, verwijdert het malware en helpt het met gevolgen van de infectie. De Threat Intelligence-database bevat meer dan 4,4 miljoen unieke kwaadaardige samples; met de premiumsignatures detecteren de Wordfence-plugin en Wordfence CLI meer dan 99% van die samples en compromitteringsindicatoren. Wordfence CLI scant ook wanneer WordPress niet meer functioneert en vormt daarmee een extra serverlaag volgens het principe defense in depth.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wat je nu moet doen<\/h2>\n\n\n\n<p>Inventariseer eerst alle sites waarop een van de zeven getroffen BdThemes-plugins staat. Controleer daarna de gebruikersdatabase, de pluginmappen en vooral de Must-Use-pluginmap op alle genoemde indicatoren. Zoek ook expliciet naar de twee databaseopties en naar uitgaande verzoeken naar de vermelde domeinen.<\/p>\n\n\n\n<p>Behandel elke gevonden indicator als een volledige compromittering: verwijder niet alleen het verdachte account of bestand, maar onderzoek alle persistentiemechanismen en herstel vanuit een betrouwbare back-up waar nodig. Roteer beheerderswachtwoorden, API-sleutels en andere geheimen nadat je de omgeving hebt opgeschoond, want een webshell of magic-loginbackdoor geeft aanvallers opnieuw toegang.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Referenties \/ Bronnen<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/www.wordfence.com\/blog\/2026\/08\/psa-supply-chain-compromise-in-bdthemes-ecosystem-via-poisoned-api-response\/\" target=\"_blank\" rel=\"noopener noreferrer\">PSA: Supply Chain Compromise in BdThemes Ecosystem via Poisoned API Response<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Een vergiftigde BdThemes-API gaf aanvallers toegang tot WordPress-beheerderssessies, zonder gewijzigde pluginbestanden. Dit zijn de getroffen plugins, aanvalsketen en concrete compromitteringsindicatoren.<\/p>\n","protected":false},"author":23,"featured_media":265,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[65,52,134,10,126],"class_list":["post-266","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-beveiliging","tag-beveiliging","tag-malware","tag-supplychainaanval","tag-wordpress","tag-xss"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/posts\/266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/comments?post=266"}],"version-history":[{"count":0,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/posts\/266\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/media\/265"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/media?parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/categories?post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/nl\/wp-json\/wp\/v2\/tags?post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}