BREVO – Des programmes malveillants affichés aux visiteurs des sites intégrant les scripts ou plugins de la société
La société française Brevo (ex-Sendinblue), spécialisée dans l’envoi d’emails marketing et transactionnels pour le compte de clients, a indiqué qu’une personne non autorisée avait discrètement modifié les scripts qui étaient injectés dans les sites de ses clients.
Lors de la visite des sites clients concernés, les visiteurs ont ainsi pu voir, au cours de la journée du 14 septembre 2026, des instructions leur demandant de réaliser une série de commandes sur leur machine. Ces commandes avaient pour conséquence d’installer un malware, ou un plugin douteux lorsque le site concerné fonctionnait sous WordPress.
Techniquement, l’altération des scripts a été réalisée par l’attaquant suite à la compromission d’une clé API Cloudflare de la société Brevo ayant une durée de validité permanente et des droits d’accès complets à la gestion de l’infrastructure de la société.
Les sites concernés sont ceux ayant intégré les sites de la société via les deux domaines suivants, « brevo.com », « sendinblue.com » et « sibforms.com », ou ceux ayant installé le plugin Brevo.
Les explications complètes de la société :
« Rapport d’incident : script malveillant « ClickFix » diffusé via le compte Cloudflare de Brevo
Date : 14 septembre 2026 | Période d’impact : 15 h 01 à 20 h 30 UTC (5 h 29) | Statut : Résolu. Renforcement de la sécurité en cours.
Résumé
Le 14 septembre 2026, un attaquant a utilisé une clé API Cloudflare de Brevo compromise pour déployer un « Cloudflare Worker » sur notre compte. Pendant environ cinq heures et demie, ce Worker a injecté un script malveillant dans des pages de brevo.com et sibforms.com, ainsi que dans trois fichiers JavaScript que les clients intègrent à leurs propres sites web. Le script affichait à certains visiteurs une fausse page Cloudflare (« Vérifiez que vous êtes humain ») les invitant à copier-coller et exécuter une commande sur leur ordinateur ; il s’agit d’une technique d’ingénierie sociale connue sous le nom de « ClickFix ». L’application Brevo (app.brevo.com) n’a pas été affectée. Aucun système Brevo n’a été modifié à la source ; le contenu a été altéré en transit au niveau de la périphérie (edge) de notre CDN.
Ce que les clients et les visiteurs ont pu voir
Une page plein écran aux couleurs de Cloudflare — apparaissant parfois juste après une véritable case à cocher Cloudflare — demandait au visiteur d’appuyer sur les touches Win+R, puis Ctrl+V, puis Entrée. L’exécution de ces étapes lançait une commande placée dans le presse-papiers par le script, téléchargeant ainsi un logiciel malveillant sur l’ordinateur Windows du visiteur. La page étant affichée de manière sélective, la plupart des visiteurs (et les visites ultérieures) n’ont rien vu.
Sur les sites WordPress intégrant un widget Brevo, si un visiteur était connecté en tant qu’administrateur WordPress, le script tentait également d’installer et d’activer silencieusement une extension (plugin) sur ce site.
Surfaces et période affectées (UTC, 14 septembre)
L’attaque ClickFix a été active sur les URL suivantes de 16 h 07 à 20 h 30 UTC :
- brevo.com, sendinblue.com, login/account/my/onboarding.brevo.com
- sibforms.com et le script des formulaires Brevo
- Widget Brevo Conversations, chargeur du SDK BrevoNon affectés : app.brevo.com, l’API Brevo, l’envoi d’e-mails et les données des comptes clients hébergées par Brevo.
Chronologie (UTC, 14 septembre)
14:23 L’attaquant crée le premier nom d’hôte utilisé pour servir le script, sur un domaine appartenant à Brevo.
14:28 L’attaquant déploie le Worker et le teste sur des domaines Brevo à faible trafic.
14:42 Le Worker est routé vers brevo.com.
15:01 Le Worker est routé vers l’ensemble du domaine brevo.com. L’impact commence.
16:07 Le Worker est mis à jour pour ajouter également un chargeur aux trois fichiers JavaScript intégrés, et est routé vers sibforms.com.
19:33 Ouverture de l’incident de sécurité ; début de l’enquête.
20:30 Suppression du Worker malveillant et de ses routes. Révocation de la clé API compromise et des identifiants créés avec celle-ci. L’injection cesse. Fin de l’impact.
20:42 Une vérification indépendante confirme que toutes les pages et tous les scripts affectés sont sains.
Heures suivantes : suppression des noms d’hôtes de l’attaquant et purge des caches en périphérie (edge caches).
15 septembre : début de la notification aux clients.
Notre enquête indique que la clé a été utilisée de manière abusive pour la première fois fin août 2026. Nous n’avons détecté aucune injection de contenu malveillant dans les pages destinées aux clients avant le 14 septembre.
Cause première
Une clé API Cloudflare à longue durée de vie, disposant de droits d’accès complets au compte, était stockée dans le code source de l’application et a été récupérée par l’attaquant. Grâce à elle, ce dernier pouvait créer des Workers, des routes et des enregistrements DNS sur les zones de Brevo sans déclencher d’alerte. Comme le Worker réécrivait les réponses en périphérie (au niveau du réseau de diffusion) et supprimait les en-têtes de sécurité tels que Content-Security-Policy, nos serveurs d’origine et nos fichiers sont restés inchangés, et les contrôles d’intégrité standard n’ont pas détecté la modification.
Mesures prises
- Suppression du Worker malveillant, de ses routes et de tous les noms d’hôtes créés par l’attaquant.
- Révocation de la clé compromise et de tous les identifiants créés avec celle-ci ; examen de tous les identifiants et membres du compte Cloudflare.
- Purge des caches en périphérie et vérification que toutes les pages et tous les scripts affectés diffusent un contenu sain.
- Suppression de l’identifiant codé en dur dans le code source et remplacement par des jetons à durée de vie courte et aux droits restreints.Changements à venir
- Adoption de HashiCorp Vault comme référentiel unique pour toutes les clés et tous les jetons Cloudflare, avec rotation automatique et absence d’identifiants dans le code source ou les fichiers de configuration. Mise en place d’alertes pour chaque événement d’audit Cloudflare impliquant une modification des Workers, des routes, du DNS ou des accès au compte, avec examen par l’équipe de sécurité.
- Flux de journaux Cloudflare transmis à notre plateforme de surveillance de la sécurité.
- Protection de l’intégrité des ressources intégrées versionnées (lorsque cela est techniquement possible) et analyses externes régulières de nos pages publiques et de nos scripts pour détecter tout contenu injecté.
- Examen de toutes les configurations « edge » tierces sur les domaines Brevo.Ce que nous vous demandons de faire
- Si vous ou un visiteur avez exécuté la commande indiquée, considérez cet ordinateur comme compromis : déconnectez-le, effectuez une analyse antivirus complète et modifiez les mots de passe utilisés dessus, en commençant par votre mot de passe Brevo.
- Si votre site WordPress charge des scripts Brevo et qu’un administrateur l’a consulté le 14 septembre alors qu’il était connecté, vérifiez si une extension a été installée ou activée ce jour-là, supprimez-la et modifiez les mots de passe des administrateurs.
- Si vous vous êtes connecté à Brevo via brevo.com le 14 septembre, modifiez votre mot de passe et vérifiez vos clés API par mesure de précaution.
- Le widget, le SDK et les formulaires Conversations peuvent être utilisés en toute sécurité. Ils n’ont jamais été modifiés à la source.Nous sommes désolés pour l’inquiétude et les perturbations que cela a causées. »