Brevo bevestigt dat aanvallers via een gestolen Cloudflare-API-sleutel een Worker gebruikten om ClickFix-code naar eigen en klantensites te sturen tijdens een aanval op 14 september. De kwaadaardige code bleef ongeveer vijfeneenhalf uur actief.
Voor bedrijven die Brevo-tracking, chat of formulieren in hun site laden, zit de inzet in de distributieroute: hun eigen broncode kan ongewijzigd blijven terwijl bezoekers via een vertrouwde leverancier toch malware zien. De leverancier wordt zo onderdeel van de aanvalsvector van elke klant die zijn script laadt.
Het incident
Brevo zegt dat een langlevende Cloudflare-API-sleutel met volledige accountrechten in applicatiebroncode stond. Met die sleutel konden aanvallers Workers, routes en DNS-records maken zonder alarm. De Worker herschreef antwoorden aan de CDN-rand en verwijderde onder meer beveiligingsheaders zoals Content-Security-Policy. De bronservers en bestanden bleven daardoor ongewijzigd en standaardcontroles op bestandsintegriteit zagen niets.
De officiële impactperiode liep van 16:07 tot 20:30 UTC. Getroffen waren pagina's op brevo.com, sendinblue.com, de login-, account-, my- en onboarding-subdomeinen, sibforms.com en drie ingebedde JavaScript-bestanden: het Brevo Forms-script, de Conversations-widget en de SDK-loader. Brevo meldt dat app.brevo.com, de API, e-mailverzending en klantaccountdata niet zijn geraakt.
Via ingebouwde scripts naar klantensites
Die drie bestanden draaien juist op websites van klanten. Sansec zag geïnjecteerde versies van de SDK-loader en Conversations-widget op klantensites die een extra script vanaf sendibt1.com laadden. De onderzoekers telden 2.549 Content-Security-Policy-meldingen op twaalf gemonitorde sites tijdens en na het aanvalvenster. De bestanden op de oorsprong zijn inmiddels schoon en de kwaadaardige subdomeinen stopten op 15 september met antwoorden.
De payload deed twee dingen. Bezoekers kregen selectief een scherm in de stijl van Cloudflare met de instructie om Win+R, Ctrl+V en Enter te gebruiken. Daarmee voerden zij een commando uit waarmee malware naar een Windows-computer werd gedownload. Op een WordPress-site controleerde het script ook of de bezoeker als beheerder was ingelogd. BleepingComputer vond een plugin die zich voordeed als Web Media Optimizer maar als blijvende backdoor en JavaScript-loader werkte.
Herstel stopt niet bij het verwijderen van de Worker
Brevo verwijderde de Worker en zijn routes, trok de gestolen sleutel en alle ermee aangemaakte inloggegevens in, verwijderde aanvallers-hostnames en leegde de edge-caches. Ook haalde het bedrijf de sleutel uit de broncode en verving die door kortlevende tokens met beperkte rechten. Als structurele maatregel noemt Brevo HashiCorp Vault voor sleutelbeheer, meldingen bij wijzigingen aan Workers, routes, DNS en accounttoegang, het doorsturen van Cloudflare-logs naar de beveiligingsbewaking en externe controles op publieke scripts.
Cybernews beschrijft dezelfde ClickFix-pagina en de herstelactie voor bezoekers en WordPress-beheerders: wie het geplakte commando uitvoerde, moet de computer als besmet behandelen, de verbinding verbreken, een volledige virusscan draaien en gebruikte wachtwoorden wijzigen. Beheerders van WordPress-sites die op 14 september ingelogd waren, moeten geïnstalleerde of geactiveerde plugins van die dag controleren en hun beheerderswachtwoorden vervangen.
De kern van deze aanval zit in meer dan een verloren sleutel. Een ingebed script werd een distributiekanaal met toegang tot het verkeer van klanten, terwijl de origin en de eigen bestanden schoon leken. Voor organisaties verschuift de controlelaag daardoor van alleen de eigen deploy naar elke externe scriptleverancier die bezoekers namens hen bedient.
Veelgestelde vragen
Maak je leveranciersketen weerbaar
Ik denk mee over hoe scripts, koppelingen en cloudtoegang in jouw organisatie samenhangen, ontwerp de juiste controles en realiseer ze end-to-end. Waar het kan bouw ik self-hosted, met automatisering en monitoring die ook na livegang blijft werken.
Dit artikel is geproduceerd samen met het Agent Team. Meer over de redactie.
