顧客エンゲージメントプラットフォーム「Brevo」は2026年9月17日、同社のCloudflareアカウントが不正アクセスされ、9月14日にBrevoのWebページや顧客サイトへ埋め込まれるJavaScriptへ悪性コードが挿入されたインシデントの事後報告を公表しました。
Brevoによると、攻撃者はアプリケーションのソースコード内に保存されていた、長期間有効かつアカウント全体の権限を持つCloudflare APIキーを取得しました。このキーを使ってCloudflare Workerやルート、DNSレコードを作成し、CDNエッジでWebレスポンスを書き換えて悪性スクリプトを挿入しました。
悪性コードは、一部の訪問者に偽の「Cloudflare Verify you are human」画面を表示し、利用者自身にコマンドを実行させる「ClickFix」を展開しました。WordPressサイトでは、Brevoのウィジェットを読み込んだ時点で管理者としてログインしている場合、不正なプラグインのアップロードと有効化を試みる処理も確認されています。
Brevoが公表した影響時間は9月14日の約5時間29分です。セキュリティ企業Sansecは、影響を受けたBrevoの共通JavaScriptを利用するWebサイトが10万超に上ると推定しています。ただし、10万超はBrevoが確認した感染サイト数ではなく、影響を受けた共通コンポーネントを利用していたサイトの推定規模です。
Brevoサプライチェーン攻撃のサマリー
確認できている内容:
- Brevoは2026年9月17日、9月14日に発生したClickFix配信インシデントの事後報告を公表しました。
- 攻撃者は、Brevoが利用していた長期間有効なCloudflare APIキーを悪用しました。
- Brevoによると、このAPIキーはアプリケーションのソースコード内に保存され、Cloudflareアカウント全体に及ぶ権限を持っていました。
- 攻撃者はCloudflare Worker、ルート、DNSレコードを作成し、CDNエッジでWebレスポンスを書き換えました。
- BrevoのWebページに加え、顧客サイトへ埋め込まれるBrevo Forms、Brevo Conversations、SDK LoaderなどのJavaScriptが影響を受けました。
- 一部の訪問者には偽のCloudflare認証画面を使うClickFixが表示されました。
- WordPressでは、ログイン中の管理者が影響サイトを閲覧した場合、不正プラグインのアップロードと有効化を試みる処理が確認されています。
- Brevoの公式タイムラインでは、9月14日15:01~20:30 UTCが影響時間です。
- Brevoは20:30 UTCまでに悪性Workerとルートを削除し、侵害されたAPIキーを失効させました。
- Brevoは、app.brevo.com、Brevo API、メール送信基盤、Brevoに保存された顧客アカウントデータは今回の9月14日のインシデントでは影響を受けていないとしています。
- Sansecは、影響を受けたBrevoのコンポーネントが10万超のWebサイトで利用されていたと推定しています。
- 10万超は「感染サイト数」や「マルウェア実行件数」ではありません。
- 9月10日にはBrevoでSAML SSOの別の不正アクセス事案も発生しましたが、Brevoは2件の関連性を公表していません。
| 項目 | 内容 |
|---|---|
| 発生日 | 2026年9月14日 |
| Brevo事後報告 | 2026年9月17日 |
| インシデント | Cloudflare Workerを悪用したWebレスポンスへの悪性JavaScript挿入 |
| 原因 | 長期間有効で広い権限を持つCloudflare APIキーの侵害 |
| APIキーの管理 | Brevoによるとアプリケーションのソースコード内に保存 |
| 影響時間 | 15:01~20:30 UTC(Brevo公表、5時間29分) |
| 主な影響 | ClickFixの表示、WordPressへの不正プラグイン設置試行 |
| 影響したBrevo資産 | brevo.com等のWebページ、sibforms.com、顧客埋め込み用JavaScript |
| 推定影響サイト | 10万超(Sansec推定) |
| 確定感染サイト数 | 公表されていません |
| app.brevo.com | Brevoによると影響なし |
| Brevo API | Brevoによると影響なし |
| メール送信基盤 | Brevoによると影響なし |
| Brevo保管の顧客アカウントデータ | 今回の9月14日インシデントでは影響なし |
| 攻撃者 | 公表されていません |
長期間有効なCloudflare APIキーがソースコード内に保存
Brevoの事後報告では、攻撃者がCloudflareのAPIキーを取得したことが今回の直接的な原因として説明されています。
このキーは長期間有効で、Cloudflareアカウント全体に及ぶ権限を持ち、アプリケーションのソースコード内に保存されていました。
攻撃者はこの権限を利用し、BrevoのCloudflareアカウント内でWorker、ルート、DNSレコードを作成しました。
Cloudflare WorkerはCDNエッジで処理を実行できます。今回の攻撃では、Brevoのオリジンサーバー上のファイルそのものを書き換えるのではなく、利用者へ返されるWebレスポンスをCloudflare側で変更していました。
そのため、オリジンサーバー上のファイルだけを対象にした整合性監視では、変更を検知できない構造でした。
Brevoの調査では、侵害されたキーは2026年8月下旬から悪用されていた可能性があります。ただし、顧客向けページへの悪性コンテンツ挿入については、9月14日以前には確認されていないとしています。
Brevoの共通JavaScriptを通じて顧客サイトへ攻撃が拡大
攻撃者がCloudflare Workerを使って変更した対象には、Brevo自身のWebページだけでなく、顧客が外部サイトへ埋め込んで利用するJavaScriptも含まれていました。
Brevoが影響対象として挙げているのは、主に次のコンポーネントです。
- Brevo Forms関連スクリプト
- Brevo Conversationsウィジェット
- Brevo SDK Loader
- sibforms.com上のページ
- brevo.com、sendinblue.comなどのBrevo管理ページ
顧客サイト側では、BrevoのJavaScriptを通常どおり読み込んでいても、Cloudflareエッジで変更されたレスポンスを受信する状態になっていました。
セキュリティ企業Sansecは、BrevoのSDK LoaderやConversationsウィジェットなどの利用状況から、10万超のWebサイトが影響対象になった可能性があると推定しています。
ただし、これは「10万サイトが侵害された」という意味ではありません。
実際に悪性コードを読み込むには、影響時間中に対象スクリプトへアクセスする必要があります。また、ClickFixは利用者による追加操作が必要で、WordPressの不正プラグイン設置もログイン中の管理者が対象サイトを閲覧するなどの条件があります。
偽Cloudflare認証を使うClickFixを表示
挿入された悪性JavaScriptは、訪問者の一部にCloudflareを装った偽の「Verify you are human」画面を表示しました。
画面では、利用者自身にWindows上でコマンドを実行するよう誘導していました。
この攻撃手法はClickFixと呼ばれます。ブラウザやOSの脆弱性を直接悪用するのではなく、正規の認証やエラー対応に見せかけて利用者自身に操作させ、マルウェアを実行させるソーシャルエンジニアリングです。
Brevoの攻撃では配信対象が選別されており、すべての訪問者に同じ画面が表示されたわけではありません。
ClickFixの手口については、以下の記事で詳しく整理しています。
関連:ClickFix(クリックフィックス)とは?対策や実態を株式会社ラックへ聞く
WordPress管理者のセッションを利用して不正プラグインの設置を試行
Sansecの解析では、WordPressサイトでBrevoの影響を受けたJavaScriptを読み込んだ際、閲覧者がWordPress管理者としてログインしているかを確認する処理も含まれていました。
管理者としてログインしていた場合、不正なWordPressプラグインをアップロードし、有効化しようとする処理が実行されていました。
Sansecは公開時点では当該プラグイン本体を回収できておらず、バックドアの可能性があると分析しています。そのため、本記事ではSansecの一次調査に基づき「不正プラグインの設置試行」までを確認済み事実として扱います。
この経路では、WordPress管理者がClickFixの指示に従う必要はありません。管理者としてログインした状態で影響サイトを閲覧すること自体が、プラグイン設置試行の条件になります。
Brevo公表では約5時間半、Sansecの観測では約4時間
Brevoの事後報告とSansecの観測では、確認した時間範囲が異なります。
Brevoは、9月14日15:01 UTCにCloudflare Workerがbrevo.com全体へ適用され、20:30 UTCにWorkerとルートを削除して影響を停止したとしています。全体の影響時間は5時間29分です。
一方、Sansecが悪性JavaScriptを実際に観測した時間は16:05:18~20:12:53 UTCです。
| 時刻(UTC) | 内容 |
|---|---|
| 8月下旬 | Brevoの調査でAPIキーの最初の悪用を確認 |
| 9月14日 15:01 | Brevoによる影響開始 |
| 16:05頃 | Sansecが最初の悪性JavaScriptを観測 |
| 16:07 | Brevoの顧客埋め込み用JavaScriptへのコード追加が開始 |
| 19:33 | Brevoがセキュリティインシデント対応を開始 |
| 20:30 | Workerとルートを削除し、侵害されたキーを失効 |
| 9月15日 | Sansecによると悪性ホストが名前解決しない状態へ |
| 9月16日 | Sansecが調査結果を公開 |
| 9月17日 | Brevoが事後報告を公開 |
両者の時間差は、BrevoがCloudflare Worker全体の稼働時間を示しているのに対し、Sansecは外部から実際に観測できた悪性JavaScriptの時間を示しているためです。
9月10日のSAML SSO不正アクセスとは別の事案
Brevoでは今回の4日前、2026年9月10日にも別のセキュリティインシデントが発生しています。
この事案では、SAML SSOのアクセス境界に不備があり、攻撃者が138件のBrevoアカウントへアクセスしました。
Brevoによると、
- 6アカウントからフィッシングメールが送信
- 43アカウントで連絡先データがエクスポート
- 93アカウントでは意味のある操作を確認せず
という影響が確認されています。
Brevoは9月10日8:30 UTCまでに侵入口を閉鎖し、すべての有効なセッションをリセットしました。
9月14日のCloudflare APIキー侵害は、技術的にはこのSAML SSO問題とは異なります。現時点でBrevoは、2件が同一攻撃者によるものか、相互に関連しているかを公表していません。
したがって、「9月10日に侵入した攻撃者がそのままCloudflareを侵害した」と断定することはできません。
BrevoはAPIキーを失効、Cloudflare側の監視と資格情報管理を変更
Brevoは9月14日20:30 UTCまでに、悪性Cloudflare Workerとルートを削除し、侵害されたAPIキーと攻撃者が作成した資格情報を失効させました。
また、事後報告では、ソースコードに保存されていた資格情報を削除し、権限を限定した短期間有効なトークンへ移行するなど、Cloudflare資格情報の管理を変更したと説明しています。
Cloudflare自身も、APIキーよりAPIトークンの利用を推奨しています。
Cloudflareの公式ドキュメントでは、Global API KeyはユーザーがアクセスできるすべてのCloudflareリソースと同じ権限を持つ旧方式であり、可能な限り、対象リソースと権限を限定できるAPI Tokenを使用するよう案内しています。
今回のBrevo事案で使われた資格情報がCloudflareの「Global API Key」と同一形式だったかは公表情報だけでは確認できません。ただし、長期間有効で広範な権限を持つ資格情報をソースコード内へ保存したことが、被害範囲を広げた要因として確認されています。
10万超は「感染サイト数」ではない
SecurityWeekなどでは「100,000 websites」と報じられていますが、この数字の出所はSansecの調査です。
Sansecは、影響したBrevoコンポーネントの利用状況から、10万超のWebサイトが該当スクリプトを組み込んでいたとしています。
現時点で公表されていないのは次の件数です。
- 実際に悪性JavaScriptを訪問者へ配信したWebサイト数
- ClickFix画面を表示された利用者数
- ClickFixの指示を実行した利用者数
- マルウェア感染が成立した端末数
- WordPressへ不正プラグインが実際に設置されたサイト数
そのため、「10万サイトがマルウェア感染」「10万サイトがバックドア化」とする表現は確認済み事実を超えます。
情報システム部門・Webサイト管理者が確認したいポイント
Brevoのフォーム、チャット、SDKなどをWebサイトへ埋め込んでいる企業では、9月14日の影響時間に限定してログや管理操作を確認します。
- Brevo Forms、Brevo Conversations、SDK Loaderを自社サイトで利用しているか
- 2026年9月14日15:01~20:30 UTCに対象サイトへのアクセスがあったか
- WordPressでは同時間帯に管理者がログインした状態でサイトを閲覧していないか
- 9月14日に追加・有効化された見覚えのないWordPressプラグインがないか
- WordPressの管理ログやWebアクセスログで、プラグインのアップロード・有効化操作を確認できるか
- 利用者や従業員から「Cloudflareの人間確認画面でWindows操作を求められた」との申告がないか
- 同画面の指示を実行した端末がある場合、EDR・アンチウイルス・端末ログで追加調査できるか
- 外部JavaScriptやSaaSウィジェットを一覧化し、サービス提供元の侵害時に利用サイトを特定できるか
- CDN、DNS、クラウドAPIの資格情報をソースコードへ直接保存していないか
- APIトークンの権限、対象リソース、有効期間を業務上必要な範囲に限定しているか
- Cloudflare Worker、DNS、ルートなどの変更を監査ログから検知できるか
今回の事案では、Webサーバー本体を直接侵害せず、CDNエッジと正規の外部JavaScriptを通じて顧客サイトへ悪性コードが配信されました。SaaSや外部ウィジェットを利用する企業では、自社のコードだけでなく、ブラウザ上で実行される第三者スクリプトもサプライチェーン管理の対象になります。
関連:悪性npmパッケージ24件、unpkgなどのミラーをClickFixへの誘導基盤に悪用
出典
- Post-mortem: malicious “ClickFix” script served via Brevo’s Cloudflare account – Brevo
- Security Incident – ClickFix – Brevo Status
- Attacker gained access to client accounts – Brevo
- Brevo supply chain attack hits 100k+ sites with WordPress backdoors and Clickfix malware – Sansec
- Get started – Cloudflare API documentation
- Get Global API key (legacy) – Cloudflare API documentation








