Aller au contenu
SécuritéWP — Accueil
Sécurité WordPress

Cyberattaque chez Brevo : faux CAPTCHA ClickFix et extension malveillante diffusés sur plus de 100 000 sites, que vérifier sur votre WordPress

Publié le · 14 min de lecture· Par

Cyberattaque chez Brevo : faux CAPTCHA ClickFix et extension malveillante diffusés sur plus de 100 000 sites, que vérifier sur votre WordPress
Sommaire
  1. Ce qui s'est passé chez Brevo le 14 septembre 2026
  2. Une clé API Cloudflare codée en dur : la cause racine
  3. Deux charges : un faux CAPTCHA pour les visiteurs, une extension pour les administrateurs WordPress
  4. Plus de 100 000 sites : qui est concerné
  5. Que vérifier sur votre site WordPress, dans l'ordre
  6. Un second incident en quatre jours : la faille SSO du 10 septembre
  7. Ce que cette attaque change pour la sécurité d'un site WordPress
  8. Sources

En bref : le 14 septembre 2026, un attaquant muni d'une clé API Cloudflare volée à Brevo (ex-Sendinblue) a réécrit à la volée les pages de brevo.com et de sibforms.com, ainsi que trois scripts que les clients de Brevo intègrent sur leurs propres sites : le script des formulaires, le widget de chat Conversations et le chargeur du SDK. Pendant cinq heures et demie, les visiteurs pouvaient voir une fausse vérification « Cloudflare » de type ClickFix, et les administrateurs WordPress connectés recevaient en silence une extension porte dérobée nommée « Web Media Optimizer ». Selon Sansec, plus de 100 000 sites chargeaient une ressource concernée. Si votre site utilise un script Brevo, vérifiez les extensions installées ou activées le 14 septembre, le dossier mu-plugins, vos journaux d'accès, puis changez les mots de passe administrateur.

Ce qui s'est passé chez Brevo le 14 septembre 2026

Brevo, entreprise parisienne d'emailing, de marketing et de relation client, fournit des scripts, des formulaires et des widgets que des centaines de milliers d'organisations intègrent directement dans leurs pages. Sansec cite parmi ses clients eBay, Louis Vuitton, Michelin et Amnesty International. Quand une ressource centrale de ce type est modifiée, chaque site qui l'appelle sert le code modifié à ses propres visiteurs, sans avoir été piraté lui-même. C'est exactement ce qui s'est produit.

D'après le post-mortem publié par Brevo, l'attaquant disposait d'une clé API Cloudflare de l'entreprise. Il s'en est servi pour déployer un Cloudflare Worker, un petit programme exécuté sur le réseau de distribution de Cloudflare, qui modifiait les réponses en transit, entre les serveurs de Brevo et le navigateur du visiteur. Les fichiers d'origine n'ont jamais été touchés, ce qui explique que les contrôles d'intégrité internes n'ont rien vu.

Heure (UTC, 14 septembre)Heure de ParisÉvénement, d'après le post-mortem de Brevo
14:2316:23L'attaquant crée le premier nom d'hôte qui servira le script, sur un domaine appartenant à Brevo
14:2816:28Déploiement du Worker, tests sur des domaines Brevo à faible trafic
15:0117:01Worker routé sur tout brevo.com : début de l'impact
16:0718:07Le Worker ajoute un chargeur aux trois fichiers JavaScript intégrés par les clients, et couvre sibforms.com
19:3321:33Ouverture de l'incident de sécurité chez Brevo
20:3022:30Worker et routes supprimés, clé compromise révoquée : fin de l'injection
20:4222:42Vérification indépendante : pages et scripts propres
Heures suivantesSuppression des noms d'hôte créés par l'attaquant, purge des caches en périphérie
15 septembreDébut de la notification des clients

Brevo retient une fenêtre d'impact de 5 h 29, de 15:01 à 20:30 UTC. Pour les scripts intégrés sur les sites clients, ceux qui vous concernent, la fenêtre va de 16:07 à 20:30 UTC selon Brevo ; Sansec, qui a observé l'attaque de l'extérieur, a relevé le premier fichier modifié à 16:05:18 et la dernière activité malveillante à 20:12:53 UTC. L'incident est marqué comme résolu, le durcissement de l'infrastructure se poursuit.

Une clé API Cloudflare codée en dur : la cause racine

Brevo est précis sur l'origine du problème : une clé API Cloudflare de longue durée, avec des permissions complètes sur le compte, était stockée dans le code source d'une application. L'attaquant l'a obtenue et a pu créer des Workers, des routes et des enregistrements DNS sur les zones de Brevo sans déclencher la moindre alerte. Comme le Worker réécrivait les réponses en périphérie du réseau et retirait au passage les en-têtes de sécurité, dont la Content-Security-Policy, les serveurs d'origine restaient intacts et rien ne ressortait des contrôles habituels.

Cloudflare Worker

Code exécuté sur les serveurs de Cloudflare, entre le visiteur et le site d'origine. Un Worker peut réécrire une page ou un fichier avant de le livrer au navigateur. Utilisé légitimement pour la personnalisation ou la performance, il devient, entre de mauvaises mains, un moyen de modifier un site sans en toucher un seul fichier sur le serveur.

L'enquête de Brevo situe la première utilisation frauduleuse de la clé fin août 2026, sans injection de contenu malveillant avant le 14 septembre. Sansec confirme ce point par les journaux de transparence des certificats : un certificat pour cdn.sendibt1.com, sous-domaine d'un domaine légitime de Brevo, a été créé le 25 août à 17:08 UTC. L'attaquant avait donc, trois semaines avant l'attaque, le droit d'écrire dans les DNS de Brevo. Sansec relève aussi que les cinq domaines de l'entreprise (brevo.com, sibforms.com, sibautomation.com, sendinblue.com et sendibt1.com) partagent le même DNS Cloudflare, ce qui laisse penser qu'un seul compte les contrôlait tous.

Deux charges : un faux CAPTCHA pour les visiteurs, une extension pour les administrateurs WordPress

Le Worker ajoutait une ligne à la fin de chaque script concerné. Cette ligne chargeait un fichier f.js depuis un sous-domaine créé par l'attaquant (cdn.sendibt1.com, cdn2, cdn3, cdn4, cdn9, cdn10, cdn11). Sansec, qui a récupéré et désobscurci ce fichier, y a trouvé deux fonctions, choisies selon le visiteur. Le code ne s'activait ni pour les robots d'indexation, ni pour les outils de développement, ni pour les scanners automatiques.

Le faux CAPTCHA ClickFix

Pour un visiteur ordinaire, la page affichait un écran plein aux couleurs de Cloudflare, parfois juste après une vraie case à cocher Cloudflare, demandant d'appuyer sur Win + R, puis Ctrl + V, puis Entrée. Le script avait au préalable placé une commande dans le presse-papiers ; l'exécuter téléchargeait un logiciel malveillant sur l'ordinateur Windows du visiteur. Brevo précise que l'affichage était sélectif : la plupart des visiteurs, et la plupart des visites répétées, n'ont rien vu.

Sansec a confirmé l'injection sur www.brevo.com, sur les pages de réservation meet.brevo.com, sur la page qui porte le widget de chat, et sur les pages sibforms.com qui hébergent les formulaires d'inscription et de désinscription. Ce dernier point élargit la cible bien au-delà des sites web : une personne qui cliquait sur le lien de désinscription d'une campagne envoyée par Brevo pendant la fenêtre d'attaque pouvait tomber sur le faux CAPTCHA. Nous avons décrit en détail le fonctionnement de cette technique et les charges qu'elle installe dans notre article sur les faux CAPTCHA et ClickFix sur WordPress.

L'extension « Web Media Optimizer », installée avec votre propre session

Si le visiteur était connecté à WordPress en tant qu'administrateur, f.js ne montrait rien. Il utilisait la session de l'administrateur pour téléverser et activer, sans aucune interaction, une extension récupérée à l'adresse cdn10.sendibt1.com/p/wm.zip. Sansec n'a pas récupéré l'archive ; BleepingComputer l'a retrouvée sur VirusTotal et l'a analysée. Elle se présente comme une extension nommée « Web Media Optimizer » et se comporte comme une porte dérobée persistante doublée d'un chargeur de JavaScript :

  • elle se masque de la liste des extensions dans wp-admin ;
  • elle se copie dans le dossier mu-plugins, où WordPress charge tout fichier présent sans qu'il puisse être désactivé depuis l'administration (voir notre article sur les portes dérobées dans mu-plugins) ;
  • elle contacte périodiquement un serveur de commande, glegchner[.]com/ads.php, qui lui renvoie en Base64 l'adresse d'un script à injecter dans les pages des visiteurs ; au moment de l'analyse, ce script, hébergé sur corralos[.]beer, servait à afficher le leurre ClickFix ;
  • elle conserve une copie de la dernière adresse valide, pour continuer à fonctionner si le serveur de commande disparaît ;
  • elle contient une clé d'authentification codée en dur qui permet à l'attaquant d'ouvrir une session administrateur valide sans connaître le mot de passe.

BleepingComputer a aussi vu l'extension et les scripts distribués depuis yelahaye[.]surf et boiseno[.]club. Autrement dit, la fermeture de l'incident chez Brevo ne ferme pas la porte dérobée sur les sites où elle a été posée : l'attaquant y conserve un accès administrateur, indépendant de Brevo, tant que l'extension n'est pas retirée.

Ne bloquez pas sendibt1.com en entier

Les sous-domaines cdn*.sendibt1.com étaient contrôlés par l'attaquant et ne répondent plus depuis le 15 septembre. Le domaine racine sendibt1.com, lui, est l'infrastructure légitime de suivi des emails de Brevo. Sansec signale que la liste Maltrail l'avait bloqué le 15 septembre avant de le retirer le lendemain : le bloquer casse les statistiques d'ouverture et de clic de tous les clients Brevo.

Plus de 100 000 sites : qui est concerné

Sansec estime à plus de 100 000 le nombre de sites clients qui chargeaient une ressource modifiée. Son propre moniteur de Content-Security-Policy a enregistré 2 549 rapports de violation sur 12 sites surveillés pendant et après la fenêtre. Comme le note FrenchBreaches, ce chiffre mesure l'ampleur de la diffusion, pas le nombre de sites durablement infectés ni celui des visiteurs qui ont exécuté la commande.

Vous êtes concerné si, entre 16:05 et 20:30 UTC le 14 septembre (18:05 à 22:30 heure de Paris), vos pages chargeaient l'un de ces éléments, que ce soit par un extrait de code copié depuis Brevo ou par une extension qui l'insère pour vous :

  • le chargeur du SDK Brevo (cdn.brevo.com/js/sdk-loader.js), utilisé pour le suivi des visiteurs ;
  • le widget de chat Brevo Conversations (brevo-conversations.js) ;
  • le script des formulaires Brevo, ou un formulaire hébergé sur sibforms.com intégré en iframe.

Sansec a publié les empreintes des fichiers modifiés. Le chargeur du SDK pesait 3 442 octets en version propre ; les versions injectées ne différaient que par une ligne finale, pointant vers cdn2 ou cdn11. Le widget Conversations, 72 816 octets, avait reçu la même ligne vers cdn4.

Ne sont pas concernés, selon Brevo : l'application app.brevo.com, l'API, l'envoi des emails et les données des comptes clients. Les scripts eux-mêmes n'ont jamais été modifiés à la source et sont sûrs à réutiliser depuis le 14 septembre au soir. Le risque qui subsiste n'est donc pas dans le script Brevo, il est dans ce que le script a pu déposer chez vous et chez vos visiteurs pendant la fenêtre.

Que vérifier sur votre site WordPress, dans l'ordre

Même si aucun de vos administrateurs ne pense s'être connecté ce jour-là, faites les vérifications : l'installation était silencieuse, et la fenêtre de 18 h à 22 h 30 correspond à une plage où beaucoup de gérants de sites travaillent.

Confirmer que le site chargeait une ressource Brevo

Cherchez les scripts dans le code du thème, des extensions et de la base de données. Si vous utilisez une extension Brevo, regardez le code source d'une page publique (Ctrl + U) plutôt que les réglages : c'est ce que le navigateur charge réellement qui compte.

grep -rlE "sdk-loader\.js|brevo-conversations\.js|sibforms\.com|cdn\.brevo\.com" wp-content/themes wp-content/plugins wp-content/mu-plugins
wp db query "SELECT option_name FROM wp_options WHERE option_value LIKE '%brevo%' OR option_value LIKE '%sibforms%'"

Chercher l'extension déposée, sur le disque et non dans wp-admin

L'extension se cache de la page Extensions : listez les dossiers directement, puis comparez avec ce que l'administration affiche. Regardez en priorité tout ce qui a été créé ou modifié le 14 septembre, dans plugins comme dans mu-plugins.

ls -la wp-content/plugins/ wp-content/mu-plugins/
find wp-content/plugins wp-content/mu-plugins -newermt "2026-09-14" ! -newermt "2026-09-16"
grep -rlE "glegchner|corralos|sendibt1|yelahaye|boiseno|web-media-optimizer|Web Media Optimizer" wp-content/

Vérifiez également la table des utilisateurs : la clé codée en dur ouvre une session administrateur sans mot de passe, mais rien n'empêche l'attaquant, une fois entré, de se créer un compte de secours. Notre article sur l'administrateur inconnu apparu dans WordPress détaille les requêtes à passer.

Lire les journaux d'accès du 14 septembre

Sansec donne les deux requêtes caractéristiques de l'installation : un POST vers /wp-admin/update.php?action=upload-plugin, suivi peu après d'un GET vers /wp-admin/plugins.php?action=activate. Elles proviennent de l'adresse IP de votre administrateur, puisque c'est son navigateur qui les a envoyées.

grep -E "14/Sep/2026" /var/log/nginx/access.log* | grep -E "update\.php\?action=upload-plugin|plugins\.php\?action=activate"

Si les journaux ne remontent plus jusqu'au 14 septembre, demandez-les à votre hébergeur sans attendre : leur durée de conservation est souvent de quelques jours. La méthode complète est dans notre guide pour analyser les journaux d'un piratage WordPress.

Si l'extension est là : traiter le site comme piraté

  1. Supprimez l'extension dans plugins et sa copie dans mu-plugins, par SFTP ou SSH, pas depuis wp-admin.
  2. Changez tous les mots de passe administrateur et renouvelez les clés de sécurité de wp-config.php pour invalider toutes les sessions ouvertes, y compris celle que la clé codée en dur peut fabriquer.
  3. Révoquez et recréez les clés API stockées sur le site, dont la clé Brevo, et les mots de passe d'application.
  4. Cherchez une seconde porte dérobée : l'extension a pu servir à en poser d'autres. Suivez notre guide complet de nettoyage d'un site WordPress piraté, ou confiez le nettoyage à notre équipe : diagnostic gratuit sous 12 heures, intervention à prix fixe annoncé avant de commencer.
  5. Prévenez vos visiteurs si vos pages ont pu afficher le leurre, et évaluez avec votre DPO l'obligation de notification : voir piratage et notification à la CNIL.

Côté postes de travail et compte Brevo

Toute personne qui a exécuté la commande du faux CAPTCHA doit, selon Brevo, considérer son ordinateur comme compromis : le déconnecter du réseau, lancer une analyse antivirus complète et changer, depuis un autre appareil, les mots de passe utilisés sur cette machine, en commençant par celui de Brevo. Si vous vous êtes connecté à votre compte via brevo.com le 14 septembre, changez le mot de passe et passez en revue vos clés API par précaution.

Un second incident en quatre jours : la faille SSO du 10 septembre

Cette attaque suit de quatre jours un autre incident, distinct d'après les informations publiées. Le 10 septembre à 6:30 UTC, Brevo a identifié une faille dans son implémentation de l'authentification unique SAML. L'attaquant avait créé un compte Brevo, y avait activé le SSO, puis invité des utilisateurs légitimes dans cette configuration. En les authentifiant par son propre fournisseur d'identité, il se connectait à leur place ; et comme la frontière entre organisations n'était pas appliquée, cet accès s'étendait à toutes les organisations que ces utilisateurs pouvaient atteindre.

Bilan communiqué par Brevo : 138 comptes accédés, 6 utilisés pour envoyer des emails de phishing à leurs contacts, 43 dont les contacts ont été exportés, 93 sans activité notable. L'entrée a été fermée à 8:30 UTC, toutes les sessions réinitialisées, et l'entreprise a annoncé une plainte. Les emails de phishing partaient de l'infrastructure légitime de Brevo et passaient donc les contrôles d'authentification habituels. Parmi les victimes citées par BleepingComputer, le fabricant de portefeuilles de cryptomonnaies Trezor a indiqué que la campagne avait atteint 347 000 adresses et compromis au moins 2 500 utilisateurs.

Brevo n'a pas répondu à BleepingComputer sur un éventuel lien entre les deux incidents. La chronologie de Sansec montre en tout cas que le certificat de cdn.sendibt1.com date du 25 août, bien avant la faille SSO : la clé Cloudflare était déjà entre les mains de l'attaquant quand le premier incident a été fermé.

Ce que cette attaque change pour la sécurité d'un site WordPress

Votre site pouvait être parfaitement à jour, avec des mots de passe solides et une double authentification : rien de tout cela ne serait entré en jeu. L'attaque est passée par un fournisseur de confiance, exactement comme les attaques de la chaîne d'approvisionnement que nous décrivions au printemps, ou comme l'affaire polyfill.io, également documentée par Sansec. Quelques mesures réduisent réellement l'exposition à ce type d'incident.

  • Inventoriez les scripts tiers. Chaque script externe chargé sur vos pages peut faire tout ce que votre page fait. Gardez la liste, retirez ceux qui ne servent plus, et chargez les autres sur les seules pages qui en ont besoin, pas sur tout le site.
  • Déployez une Content-Security-Policy avec rapport. Le Worker retirait la CSP des pages de Brevo, mais sur votre site, c'est votre serveur qui l'envoie. Une politique qui n'autorise que cdn.brevo.com aurait refusé le chargement de f.js depuis cdn2.sendibt1.com, et l'aurait signalé : c'est par ce type de rapport que le moniteur de Sansec a repéré l'attaque. Notre guide de la CSP pour WordPress explique la mise en place progressive.
  • Bloquez l'installation d'extensions depuis wp-admin. La constante DISALLOW_FILE_MODS de wp-config.php désactive l'installation et la mise à jour d'extensions et de thèmes depuis l'administration. Avec elle, la requête upload-plugin envoyée par le navigateur de l'administrateur aurait échoué. Elle convient aux sites dont les mises à jour passent par un processus de déploiement ou par un prestataire.
  • Ne naviguez pas sur le site public en tant qu'administrateur. Le script s'est servi d'une session déjà ouverte : la double authentification ne protège pas de cela. Utilisez au quotidien un compte éditeur, et un compte administrateur seulement pour les tâches qui l'exigent.
  • Surveillez les fichiers et gardez vos journaux. Une surveillance d'intégrité des fichiers aurait alerté sur un nouveau dossier dans mu-plugins le soir même. Et sans journaux d'accès conservés au moins un mois, il est impossible de répondre à la question « un administrateur s'est-il connecté ce jour-là ».
  • Aucun secret dans le code. La cause racine chez Brevo est une clé à permissions complètes dans un dépôt de code. Sur un site WordPress, la même erreur s'appelle une clé API dans un thème versionné ou un mot de passe dans un fichier accessible en ligne : les secrets vont dans wp-config.php, hors du dépôt, avec les permissions minimales.

Ce que Brevo dit avoir changé

Suppression de la clé codée en dur, remplacée par des jetons à portée réduite et courte durée de vie ; centralisation des clés Cloudflare dans HashiCorp Vault avec rotation automatique ; alerte sur chaque événement d'audit Cloudflare touchant les Workers, les routes, le DNS ou les accès au compte ; envoi des journaux Cloudflare vers sa plateforme de surveillance ; protection d'intégrité des ressources intégrées versionnées quand c'est possible, et analyse externe régulière de ses pages et scripts publics.

Pour Brevo, l'incident est clos. Pour les sites qui chargeaient ses scripts ce soir-là, il ne l'est qu'après vérification. Si vous avez un doute sur ce que vous trouvez dans plugins, mu-plugins ou vos journaux, envoyez-nous les éléments : notre équipe vous dit sous 12 heures si le site est sain.

Sources

  • Brevo, « Post-mortem: malicious "ClickFix" script served via Brevo's Cloudflare account », page d'état de Brevo, incident du 14 septembre 2026, publié le 17 septembre 2026, status.brevo.com
  • Brevo, « Attacker gained access to client accounts », page d'état de Brevo, 10 septembre 2026, status.brevo.com
  • Sansec Forensics Team, « Brevo supply chain attack hits 100k+ sites with Wordpress backdoors and Clickfix malware », 16 septembre 2026, sansec.io
  • BleepingComputer, Bill Toulas, « Brevo supply-chain attack injected ClickFix scripts on customer sites », 17 septembre 2026, bleepingcomputer.com
  • FrenchBreaches, « Cyberattaque chez Brevo : plus de 100 000 sites exposés après le piratage du géant français », 18 septembre 2026, frenchbreaches.com
  • WordPress Developer Resources, « wp-config.php », section « Disable Plugin and Theme Update and Installation », developer.wordpress.org
  • WordPress Developer Resources, « Must Use Plugins », developer.wordpress.org

Votre site est touché ?

Nous intervenons sur les sites WordPress piratés, nettoyage et sécurisation compris. Décrivez votre situation, nous vous répondons.

À lire aussi