Under drygt fyra timmar den 14 september skrev angripare om Brevos JavaScript i samma ögonblick som koden lämnade Cloudflares edge. Ingen fil på Brevos egna servrar användes. Den franska marknadsföringsplattformen, tidigare Sendinblue, bekräftade i en post-mortem den 17 september att en angripare stulit en Cloudflare API-nyckel och använt den för att lägga ut en skadlig Cloudflare Worker över Brevos zoner. Workern skrev om svaren för brevo.com, sendinblue.com och sibforms.com, samt för de formulärskript, chattwidgetar och SDK-laddare som Brevos kunder bäddar in på sina egna webbplatser.
Det nederländska säkerhetsföretaget Sansec, som först rapporterade den verkliga omfattningen, observerade den skadliga aktiviteten mellan 16.05 och 20.13 UTC och uppskattar att fler än 100 000 kundwebbplatser laddade ner den modifierade koden. Siffran kommer från ett företag som säljer en malware-skanner, och Brevo har inte bekräftat den. Betrakta den därför som en övre gräns tills någon oberoende part har räknar.
En API-nyckel med fullständiga rättigheter, hårdkodad i källkoden
Brevos egen beskrivning av grundorsaken är den del som betyder mest. Den stulna inloggningsuppgiften var en långlivad Cloudflare API-nyckel med fullständiga rättigheter, hårdkodad i applikationens källkod. Den hade tillräckliga behörigheter att skapa Cloudflare Workers, routes och DNS-poster i samtliga Brevos zoner.
Att redigera innehållet vid edge-nivån var sannolikt det som gjorde angreppet svårt att upptäcka. Filerna på Brevos origin-servrar förblev oförändrade. En granskning av filhashar, ändringsdatum eller innehållet på origin-servrarna hade inte visat på någo, eftersom ingenting var fel där. Omskrivningen skedde under transporten. Brevo bekräftar också att Workern kunde ta bort säkerhetsheaders, däribland Content-Security-Policy, vilket slog ut den enda skyddsmekanism i webbläsaren som hade kunnat stoppa det injicerade skriptet.
Två payloads, beroende på vem som tittade
Sansecs analys visar att den injicerade koden förgrenade sig beroende på besökaren. En inloggad WordPress-administratör som öppnade sin egen webbplats fick en skadlig plugin uppladdad, utformad för att skapa persistens och med möjlighet att ladda ytterligare JavaScript. Alla andra fick en helskärmsöverlagring som imiterade en verifieringssida från Cloudflare, följd av ClickFix-instruktioner om att klistra in ett kommando i Windows och köra det.
Överlagringen nådde även den som klickade på en avregistreringslänk i ett kampanjutskick via Brevo. Koden aktiverades inte för crawlers, utvecklarverktyg eller automatierade skannrar.
Den andra incidenten hos Brevo på fem dagar
Det här var inte Brevos första problem den veckan. Den 10 september uppgav företaget att en angripare hade utnyttjat felaktigt avgränsad SAML SSO-åtkomst för att nå 138 kundkonton, exportera kontakter från 43 av dem och skicka phishing meddelanden från sex. Brevo säger att åtkomstvägen stängdes klockan 08.30 UTC och att aktiva sessioner nollställdes.
Trezor, den tjeckiska tillverkaren av hårdvaruplånböcker, publicerade sin egen redogörelse samma dag och angav 120 Brevo-konton. De två siffrorna går inte ihop, och ingen av parterna har förklarat skillnaden. Trezors nyhetsbrevsregister med omkring 347 000 adresser, användes för att skicka ett phishing-mejl med ämnesraden ”Critical Security Alert: STM32 Entropy Vulnerability”, med en länk till en applikation som bad mottagaren om sin wallet backup. Trezor blockerade domänen på DNS-nivå inom 20 minuter och uppger att 2 500 personer redan hade klickat.
Brevo är rent. Din webbplats är kanske inte det
Brevo återkallade nyckeln och alla inloggningsuppgifter som skapats med den, tog bort den hårdkodade hemligheten ur källkoden, raderade angriparens värdnamn och rensade sina edge-cachar. Sansec bekräftade den 15 september att de skadliga subdomänerna hade slutat svara och att Brevos filer levererades rena.
Det stänger Brevos del av saken. Det stänger inte din. Om en WordPress-administratör hos er öppnade webbplatsen mellan klockan 16 och 21 UTC den 14 september kan en plugin ha installerats, och en återkallad nyckel hos Brevo gör ingenting åt en plugin som ligger i er egen wp-content-katalog.
Gå igenom de installerade WordPress-pluginsen och leta efter allt som tillkommit den 14 september eller senare. Ta reda på om någon arbetsstation körde ett inklistrat PowerShell-kommando den eftermiddagen, eftersom en ClickFix-infektion ofta slutar med en infostealer och stulna inloggningsuppgifter från webbläsaren. Inventera sedan varje tredjepartsskript som webbplatsen laddar och avgör vilka som fortfarande behövs.
Brevo uppger att app.brevo.com, API:et, e-postinfrastrukturen och kunddata inte berördes. Påståendet är korrekt och samtidigt irrelevant. Angreppet kördes på kundernas webbplatser, i kundernas besökares webbläsare, under Brevos domännamn.
Referenser
- Brevo Supply-Chain Attack Injected ClickFix Scripts on Customer Sites
- Brevo Supply Chain Attack Hits 100k+ Sites with WordPress Backdoors and Clickfix Malware
- Security Incident at Brevo, Our Third-Party Email Provider
- 100,000+ WordPress Sites Infected Via Brevo Supply Chain Attack
This post is also available in:


