Brevo supply-chainaanval kon WordPress-sites voorzien van verborgen backdoor
Brevo supply-chainaanval: een beveiligingsincident bij marketing- en communicatieplatform Brevo heeft op 14 september 2026 kwaadaardige JavaScript verspreid via Brevo-scripts die door externe websites worden ingeladen.
Brevo bevestigt inmiddels dat een aanvaller een gecompromitteerde Cloudflare API-key gebruikte om een kwaadaardige Cloudflare Worker binnen de Brevo-infrastructuur te plaatsen. Daarmee kon verkeer aan de CDN-rand worden aangepast zonder de oorspronkelijke bestanden op de Brevo-servers zelf te wijzigen.
De aanval is bijzonder relevant voor WordPress-beheerders. Wanneer een bezoeker tijdens het incident als Administrator was ingelogd op een WordPress-site die een getroffen Brevo-script gebruikte, probeerde de kwaadaardige code stilletjes een WordPress-plugin te installeren en activeren.
Daarnaast kregen geselecteerde gewone bezoekers een vals Cloudflare-verificatiescherm te zien waarmee zij via de zogenaamde ClickFix-techniek werden aangezet een kwaadaardige Windows-opdracht uit te voeren.
Sansec schat dat de getroffen Brevo-componenten op meer dan 100.000 websites werden gebruikt.
Feiten over de Brevo supply-chainaanval
- Getroffen dienst: Brevo embedded JavaScript, Conversations-widget, SDK-loader en Brevo-formulieren
- Platformimpact: externe websites waaronder WordPress-sites
- Type: supply-chainaanval via gecompromitteerde Cloudflare-infrastructuur
- CVE: niet van toepassing; dit betreft een infrastructuurcompromis en geen reguliere softwarekwetsbaarheid met toegewezen CVE
- CVSS: niet van toepassing
- Datum aanval: 14 september 2026
- Brevo impactvenster: 15:01 tot 20:30 UTC; de embedded scripts werden volgens Brevo vanaf 16:07 UTC getroffen
- Geschatte omvang: getroffen Brevo-componenten werden volgens Sansec door meer dan 100.000 websites gebruikt
- WordPress-impact: poging tot installatie en activatie van een kwaadaardige plugin wanneer een Administrator ingelogd was
- Bezoekersimpact: ClickFix-pagina kon Windows-gebruikers aansporen een kwaadaardige opdracht uit te voeren
- Actieve aanval: beëindigd; Brevo verwijderde de kwaadaardige Worker en trok de gecompromitteerde credentials in
- Huidige status: Brevo meldt dat de getroffen scripts weer veilig zijn
- Vereiste actie: controleer WordPress-sites waarop Brevo-scripts actief waren en waarop op 14 september een Administrator ingelogd is geweest
Wat is er bij Brevo gebeurd?
De aanval vond niet plaats door een kwetsbaarheid in WordPress zelf.
Een aanvaller had toegang verkregen tot een langlevende Cloudflare API-key van Brevo met uitgebreide accountrechten.
Volgens het officiële post-mortem van Brevo stond deze credential in applicatiebroncode opgeslagen.
Met de buitgemaakte sleutel kon de aanvaller onder andere Cloudflare Workers, routes en DNS-records binnen de Brevo-zones aanmaken.
De aanvaller plaatste vervolgens een Cloudflare Worker die webverkeer aan de CDN-rand manipuleerde.
Oorspronkelijke Brevo-bestanden bleven ongewijzigd
Een belangrijk technisch detail is dat de oorspronkelijke JavaScript-bestanden bij Brevo niet hoefden te worden aangepast.
De kwaadaardige Worker wijzigde HTTP-responses terwijl deze via Cloudflare naar bezoekers werden gestuurd.
Daardoor konden normale integriteitscontroles van bestanden aan de bron geen wijziging constateren.
Brevo meldt bovendien dat de Worker beveiligingsheaders zoals Content-Security-Policy uit responses kon verwijderen.
Dit illustreert een belangrijk risico van supply-chainaanvallen: een website kan zelf volledig ongewijzigd zijn en toch via een vertrouwde externe JavaScript-bron kwaadaardige code aan bezoekers leveren.
Welke Brevo-componenten waren getroffen?
Volgens Brevo kon de kwaadaardige code onder andere worden toegevoegd aan:
- Brevo Forms;
- de Brevo Conversations-widget;
- de Brevo SDK-loader;
- pagina’s op brevo.com en sendinblue.com;
- pagina’s op sibforms.com.
Websites die dergelijke scripts rechtstreeks vanuit de Brevo-infrastructuur inladen, konden daardoor tijdens het incident de geïnjecteerde JavaScript-code aan hun eigen bezoekers doorgeven.
WordPress Administrators waren specifiek doelwit
De malware controleerde op WordPress-websites of de bezoeker als WordPress-gebruiker was ingelogd.
Wanneer de bezoeker Administrator-rechten had, probeerde de kwaadaardige JavaScript-code een plugin naar de betreffende WordPress-installatie te uploaden en te activeren.
Brevo bevestigt dit gedrag inmiddels ook expliciet in het eigen incidentrapport.
Daarmee kon een tijdelijke aanval op een externe JavaScript-provider veranderen in persistente compromittering van de WordPress-website zelf.
Kwaadaardige plugin kon verborgen blijven
Onderzoek door Sansec en BleepingComputer laat zien dat tijdens de aanval een kwaadaardige plugin werd aangeboden.
BleepingComputer identificeerde deze als:
Web Media Optimizer
De plugin functioneert niet als legitieme optimalisatieplugin, maar als backdoor en JavaScript-loader.
Na installatie probeert de malware zichzelf bovendien uit de normale WordPress-pluginlijst te verbergen en een kopie in:
wp-content/mu-plugins/
te plaatsen.
Daarom is uitsluitend kijken naar de pluginlijst in wp-admin niet voldoende om een mogelijke infectie uit te sluiten.
Wanneer moet een WordPress-site worden gecontroleerd?
Brevo adviseert specifiek onderzoek wanneer aan de volgende voorwaarden is voldaan:
- de WordPress-site gebruikte een Brevo-script, formulier, SDK of Conversations-widget;
- een WordPress Administrator bezocht de website op 14 september 2026 terwijl deze was ingelogd.
In die situatie moet worden gecontroleerd of op die datum onverwachte plugins zijn geïnstalleerd of geactiveerd.
Controleer pluginbestanden op de server
Controleer niet uitsluitend vanuit wp-admin, omdat malware zichzelf uit de zichtbare pluginlijst kan verwijderen.
Bekijk op de server de daadwerkelijke plugin-directories:
find wp-content/plugins -maxdepth 2 -type f -ls
Controleer daarnaast de must-use plugins:
find wp-content/mu-plugins -type f -ls 2>/dev/null
Let specifiek op onbekende plugins en bestanden die rond 14 september 2026 zijn aangemaakt of gewijzigd.
Controleer wijzigingen van 14 september
Een eerste inventarisatie van gewijzigde PHP-bestanden kan bijvoorbeeld worden uitgevoerd met:
find wp-content -type f -name '*.php' -newermt '2026-09-14 00:00:00' ! -newermt '2026-09-15 00:00:00' -ls
Een bestand dat op die datum is gewijzigd is niet automatisch kwaadaardig. Normale plugin- en theme-updates kunnen dezelfde timestamps opleveren.
Vergelijk onbekende wijzigingen daarom met bekende updates, deployments en betrouwbare back-ups.
Controleer WordPress accesslogs
Sansec adviseert beheerders specifiek te zoeken naar een plugin-upload op 14 september:
POST /wp-admin/update.php?action=upload-plugin
en naar een daaropvolgende pluginactivatie:
GET /wp-admin/plugins.php?action=activate
Wanneer deze requests voorkomen terwijl een Administrator de website bezocht, moeten het tijdstip, bron-IP, gebruikerssessie en de rond dat moment aangemaakte bestanden nader worden onderzocht.
Controleer Administrator-accounts
Omdat de kwaadaardige plugin persistente toegang tot WordPress kan verschaffen, is het verstandig ook alle Administrator-accounts te controleren:
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Onderzoek:
- onbekende Administrator-accounts;
- recent aangemaakte beheerders;
- onbekende e-mailadressen;
- onverwachte wijzigingen aan bestaande accounts.
Bekende kwaadaardige Brevo-subdomeinen
Sansec publiceerde meerdere hostnamen die tijdens de aanval werden gebruikt om de kwaadaardige loader te verspreiden:
cdn.sendibt1.com
cdn2.sendibt1.com
cdn3.sendibt1.com
cdn4.sendibt1.com
cdn9.sendibt1.com
cdn10.sendibt1.com
cdn11.sendibt1.com
Deze kwaadaardige subdomeinen zijn volgens Sansec sinds 15 september niet meer actief.
Blokkeer niet het hoofddomein sendibt1.com. Sansec benadrukt dat het hoofddomein legitieme Brevo-functionaliteit voor e-mailtracking verzorgt. Een blokkade van het volledige domein kan daarom reguliere Brevo-functionaliteit verstoren.
Bekende hashes van geïnjecteerde JavaScript-bestanden
Sansec publiceerde onder andere de volgende SHA-256-hashes van tijdens het incident geïnjecteerde Brevo-assets:
58a5c601c9df7ca2120435588fc39f97712d9b878795f6ee500590099a432308
f67d572d2d30407b3f470904326411450763108980cdad89550fbb221fb06782
9b62c12bc5c7feb9802f58e6cf75a368690df3c754e37cc64483a92acacf87a5
Deze hashes zijn vooral bruikbaar voor onderzoek naar gelogde, gecachte of gearchiveerde versies van de getroffen externe scripts.
ClickFix richtte zich op computers van bezoekers
Wanneer de malware geen WordPress Administrator als doelwit selecteerde, kon een bezoeker een nagemaakte Cloudflare-verificatiepagina te zien krijgen.
Daarop werd gevraagd:
- Windows-toets + R in te drukken;
- een opdracht vanaf het klembord te plakken;
- de opdracht uit te voeren.
Dit is de aanvalstechniek die bekendstaat als ClickFix.
De opdracht installeerde malware op de Windows-computer van het slachtoffer.
Een echte Cloudflare- of andere browserverificatie vraagt een bezoeker niet om via Windows Run een opdracht vanaf het klembord uit te voeren.
Heeft iemand de ClickFix-opdracht uitgevoerd?
Brevo adviseert een computer waarop de opdracht daadwerkelijk is uitgevoerd als gecompromitteerd te behandelen.
De betreffende computer moet van het netwerk worden losgekoppeld en volledig op malware worden onderzocht.
Wachtwoorden die vanaf die computer zijn gebruikt moeten vervolgens worden gewijzigd, waarbij Brevo specifiek adviseert te beginnen met het Brevo-wachtwoord.
Voor beheerderssystemen moet daarnaast rekening worden gehouden met andere credentials die vanaf dezelfde computer toegankelijk waren, waaronder WordPress-, hosting-, SSH-, SFTP- en andere beheeraccounts.
Brevo-scripts zijn inmiddels weer schoon
De aanval is niet meer actief via de oorspronkelijke Brevo-infrastructuur.
Brevo verwijderde op 14 september om 20:30 UTC de kwaadaardige Worker en de bijbehorende routes en trok de gecompromitteerde API-key en door de aanvaller aangemaakte credentials in.
Kort daarna werd onafhankelijk gecontroleerd dat de getroffen pagina’s en scripts weer schoon waren.
Brevo heeft daarnaast caches geleegd, door de aanvaller aangemaakte hostnamen verwijderd en de betreffende Cloudflare-credentials opnieuw ingericht.
De Brevo Conversations-widget, SDK en Forms kunnen volgens Brevo inmiddels weer veilig worden gebruikt.
Het huidige risico is persistence
Dat de externe Brevo-scripts nu schoon zijn betekent niet automatisch dat iedere WordPress-site die tijdens het incident werd bezocht eveneens schoon is.
Wanneer de kwaadaardige plugin tijdens het aanvalvenster succesvol is geïnstalleerd, blijft die lokale compromittering bestaan nadat de Brevo-infrastructuur is hersteld.
Daarom is controle van eerder blootgestelde WordPress-sites noodzakelijk.
Bij gevonden malware: behandel WordPress als gecompromitteerd
Wanneer de kwaadaardige plugin, een onbekende MU-plugin of andere concrete aanwijzingen voor compromittering worden aangetroffen, moet niet worden volstaan met het verwijderen van één bestand.
Een aanvaller met persistente WordPress-toegang kan inmiddels aanvullende wijzigingen hebben uitgevoerd.
Controleer dan onder andere:
- alle WordPress-gebruikers;
- plugins en MU-plugins;
- themes;
- recent gewijzigde PHP-bestanden;
- WordPress cron-events;
- de database;
- webserver- en PHP-logs;
- uitgaande verbindingen;
- API-keys en andere secrets.
Vervang relevante Administrator-wachtwoorden en andere credentials wanneer deze tijdens de compromittering toegankelijk kunnen zijn geweest.
Supply-chainrisico bestaat ook bij volledig bijgewerkte WordPress-sites
Deze aanval wijkt af van een normale WordPress-kwetsbaarheid.
Een WordPress-installatie kon volledig bijgewerkt zijn en toch getroffen externe JavaScript-code laden omdat de aanval plaatsvond bij een vertrouwde externe leverancier.
Het incident laat daarmee zien dat WordPress-beveiliging niet uitsluitend bestaat uit het bijwerken van Core, plugins en themes.
Externe scripts, marketingtools, chatwidgets, analyticsdiensten en andere third-party integraties vormen eveneens onderdeel van het aanvalsoppervlak van een website.
Verantwoordelijkheid voor WordPress- en CMS-beveiliging
Klanten zonder Managed WordPress/CMS-onderhoud of een afzonderlijk overeengekomen managed CMS-dienst zijn zelf verantwoordelijk voor het tijdig bijwerken van WordPress, WooCommerce, andere CMS-platformen, plugins, extensies en themes en voor het beheer van externe integraties binnen hun website.
Wanneer misbruik, malware of aantoonbaar achterstallig onderhoud ervoor zorgt dat een website of dienst een risico vormt voor onze infrastructuur, andere klanten of derden, kan Vservs de betreffende website of dienst tijdelijk isoleren of uitschakelen.
Dit gebeurt uitsluitend als veiligheids- en continuïteitsmaatregel om verdere schade, misbruik of verstoring van infrastructuur en dienstverlening te voorkomen.
Herstelwerkzaamheden aan niet-managed omgevingen buiten onze reguliere openingstijden, in weekenden of op feestdagen zijn afhankelijk van de ernst van het incident en de beschikbare capaciteit. Wanneer direct ingrijpen niet noodzakelijk is, kunnen herstelwerkzaamheden vanaf de eerstvolgende werkdag worden opgepakt.
Managed WordPress door Vservs
De Brevo supply-chainaanval laat zien dat beveiligingsincidenten ook kunnen ontstaan buiten WordPress Core en geïnstalleerde plugins. Bij professionele WordPress-omgevingen is daarom naast patchmanagement ook monitoring en onderzoek naar afwijkende bestanden en activiteiten belangrijk.
Met Vservs Managed WordPress verzorgen wij onder andere technisch WordPress-beheer, Core-, plugin- en theme-updates, security hardening, malware- en beveiligingsmonitoring, back-ups en technisch onderzoek bij beveiligingsincidenten binnen de afgesproken dienstverlening.











