Threat Overview
Brevo confirmed that attackers obtained a long-lived Cloudflare API key with full account permissions and used it to deploy a malicious Cloudflare Worker. On September 14, the Worker modified Brevo content at the CDN edge and injected malicious JavaScript into Brevo pages and customer-embedded components. Visitors could receive a fake Cloudflare verification page using ClickFix instructions, while logged-in WordPress administrators were targeted with an attempted malicious plugin installation. Because the Worker altered responses at the edge, Brevo origin files remained unchanged.
References
- SecurityWeek, September 18, 2026: https://www.securityweek.com/brevo-supply-chain-attack-injects-malware-into-100000-websites/
- BleepingComputer, September 17, 2026: https://www.bleepingcomputer.com/news/security/brevo-supply-chain-attack-injected-clickfix-scripts-on-customer-sites/
- Sansec, September 16, 2026: https://sansec.io/research/brevo-supply-chain-attack
- ADAMnetworks, September 16, 2026: https://adamnet.works/blog/brevo-delivers-kongtuke-clickfix-to-customer-sites/
Impacted Systems
Brevo customer websites embedding the Brevo forms script, Conversations widget, SDK loader, or affected hosted forms/pages during September 14, 2026. Confirmed customer-facing exposure was approximately 16:07-20:30 UTC according to Brevo. Windows visitors who followed ClickFix instructions are at risk. WordPress administrators logged into sites embedding affected content were targeted with plugin installation. Brevo states app.brevo.com, its API, email delivery infrastructure, and customer account data were not affected by this edge-injection incident.
Why this matters
This is a verified third-party JavaScript supply-chain compromise with broad downstream reach. It combines trusted CDN delivery, ClickFix endpoint execution, and a WordPress administrator pivot.
Exploitation Status
Confirmed malicious delivery on September 14. Brevo removed the Worker and revoked the compromised key. Exposure does not establish successful infection for every site or visitor.
What this hunt looks for
The hunt focuses on published loader infrastructure, ClickFix-style command execution, WordPress plugin upload and activation during the exposure window, malicious plugin artifacts, and post-execution network activity.
Required logs
Defender XDR DeviceNetworkEvents, DeviceProcessEvents and DeviceFileEvents, plus web, WAF, proxy, or WordPress access telemetry ingested into Microsoft Sentinel.
First Pass – Brevo Malicious Loader Domains
let Domains=dynamic(["cdn.sendibt1.com","cdn2.sendibt1.com","cdn3.sendibt1.com","cdn4.sendibt1.com","cdn9.sendibt1.com","cdn10.sendibt1.com","cdn11.sendibt1.com","yelahaye.surf","boiseno.club"]);
DeviceNetworkEvents
| where Timestamp between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T00:00:00Z))
| where RemoteUrl has_any (Domains)
| project Timestamp,DeviceName,InitiatingProcessAccountName,InitiatingProcessFileName,InitiatingProcessCommandLine,RemoteUrl,RemoteIP,RemotePort
| order by Timestamp desc
ClickFix Run Dialog Command Execution
DeviceProcessEvents
| where Timestamp between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T06:00:00Z))
| where FileName in~ ("powershell.exe","pwsh.exe","cmd.exe","mshta.exe","wscript.exe","cscript.exe","rundll32.exe")
| where InitiatingProcessFileName in~ ("explorer.exe","chrome.exe","msedge.exe","firefox.exe","brave.exe")
| project Timestamp,DeviceName,AccountName,FileName,ProcessCommandLine,InitiatingProcessFileName,InitiatingProcessCommandLine,SHA256
| order by Timestamp desc
WordPress Plugin Upload During Exposure Window
CommonSecurityLog
| where TimeGenerated between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T00:00:00Z))
| where RequestURL has "/wp-admin/update.php"
| where RequestURL has "action=upload-plugin"
| project TimeGenerated,SourceIP,DestinationIP,RequestMethod,RequestURL,DeviceAction,Message
| order by TimeGenerated desc
WordPress Plugin Activation During Exposure Window
CommonSecurityLog
| where TimeGenerated between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T00:00:00Z))
| where RequestURL has "/wp-admin/plugins.php"
| where RequestURL has "action=activate"
| project TimeGenerated,SourceIP,DestinationIP,RequestMethod,RequestURL,DeviceAction,Message
| order by TimeGenerated desc
Web Media Optimizer or wm.zip Artifacts
DeviceFileEvents
| where Timestamp >= datetime(2026-09-14T15:00:00Z)
| where FileName =~ "wm.zip" or FolderPath has "Web Media Optimizer" or FileName has "web-media-optimizer"
| project Timestamp,DeviceName,FileName,FolderPath,SHA256,InitiatingProcessFileName,InitiatingProcessCommandLine
| order by Timestamp desc
Injected Brevo JavaScript Hashes
let Hashes=dynamic(["58a5c601c9df7ca2120435588fc39f97712d9b878795f6ee500590099a432308","f67d572d2d30407b3f470904326411450763108980cdad89550fbb221fb06782","9b62c12bc5c7feb9802f58e6cf75a368690df3c754e37cc64483a92acacf87a5"]);
DeviceFileEvents
| where Timestamp >= datetime(2026-09-14T15:00:00Z)
| where SHA256 in~ (Hashes)
| project Timestamp,DeviceName,FileName,FolderPath,SHA256,InitiatingProcessFileName,InitiatingProcessCommandLine
| order by Timestamp desc
Network Security Fallback for Loader Domains
CommonSecurityLog
| where TimeGenerated between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T00:00:00Z))
| where DestinationHostName has_any ("sendibt1.com","yelahaye.surf","boiseno.club") or RequestURL has_any ("sendibt1.com","yelahaye.surf","boiseno.club")
| project TimeGenerated,SourceIP,DestinationIP,DestinationHostName,DestinationPort,RequestMethod,RequestURL,DeviceAction,Message
| order by TimeGenerated desc
Post-ClickFix PowerShell Network Activity
DeviceNetworkEvents
| where Timestamp between (datetime(2026-09-14T15:00:00Z)..datetime(2026-09-15T06:00:00Z))
| where InitiatingProcessFileName in~ ("powershell.exe","pwsh.exe","cmd.exe","mshta.exe","wscript.exe","cscript.exe")
| project Timestamp,DeviceName,InitiatingProcessAccountName,InitiatingProcessFileName,InitiatingProcessCommandLine,RemoteUrl,RemoteIP,RemotePort
| order by Timestamp desc
Detection Notes
The exposure window is time-bounded, so the queries focus on September 14. The strongest signals are published loader domains and hashes, plugin upload or activation during the window, and shell execution immediately after browser activity. Loading a Brevo component indicates potential exposure, not necessarily infection. Origin file-integrity monitoring alone could miss the edge rewrite.