先週、Cloudflareは、当社(および当社のお客様)がSalesloft Driftの情報漏洩の影響を受けているという通知を受けました。この情報漏えいにより、Cloudflare外部の第三者が当社のSalesforceインスタンス、顧客サポートおよび社内顧客ケース管理に使用しているインスタンス、そこで管理しているデータの一部にアクセスできる状態が発生しました。この情報の大部分はお客様の連絡先情報や基本的なサポートケースデータですが、一部カスタマーサポートとのやりとりにはお客様の設定に関する情報が推測できる内容や、アクセストークンなどの機密情報が含まれている可能性があります。Salesforceのサポート案件(ケース)データにCloudflareのサポートチケットの内容が含まれることを考慮すると、お客様がCloudflareのサポートシステム内で共有した情報(ログ、トークン、パスワードなど)はすべて侵害されたとみなすことが妥当であるため、お客様においてはこれらのチャネルを通じて共有した資格情報を更新(ローテーション)することを強くお勧めします。
今回のインシデントへの対応の一環として、漏えいしたデータの中にトークンやパスワードの存在がないか調査したところ、104件のCloudflare APIトークンが確認されました。これらのトークンに関連する不審な活動は確認されていませんが、念のため、当方ですべてのトークンのローテーションを実施しました。また、この情報漏洩によって影響を受けたすべてのお客様に対しては、Cloudflareから直接お知らせしております。
この侵害の結果として、Cloudflareサービスやインフラストラクチャに対する侵害はありませんでした。
私たちは、自社事業を支えるために使用するツールの選定に責任を負います。今回の情報漏えいにより、お客様にご迷惑をお掛けしたことを心よりお詫び申し上げます。このブログの残りの部分では、今回の事象に関する詳細な調査方法を時系列で説明しています。
先週、Cloudflareは自社のSalesforceテナント内で不審な活動を確認しました。その後、当社を含む数百の他の企業のSalesforceインスタンスが標的にされたこと、当社のSalesforceインスタンスからサポート案件(ケース)のテキストフィールドを不正に持ち出されたことを知りました。当社のセキュリティチームは直ちに調査を開始し、脅威アクターのアクセスを遮断するとともに、当社の環境を保護するために、以下に詳述する多くの措置を講じました。私たちはこのブログを通じて、お客様やその他の方に対し、発生した事象およびその対応内容に関する詳細、および皆様がこのインシデントから身を守る方法についてお伝えします。
Cloudflareでは、Salesforceをお客様情報の管理(お客様が誰であるか、当社サービスの利用状況の追跡)、およびお客様との対話のサポートツールとして活用しています。今回のインシデントで理解しておくべき重要なポイントは、脅威アクターがアクセスしたのはSalesforceの「ケース」データのみであることです。ケースは、お客様をサポートする目的でCloudflareのセールスチームとサポートチームのメンバーがコメントする場合、およびお客様がCloudflareのサポートと対話される際に作成されます。SalesforceはSalesloft Driftチャットボットと連携しており、Cloudflare はこれを利用して、当社のWebサイトからどなたでも当社に問い合わせできるようにしていました。
Salesloftが発表したように、脅威アクターがシステムに侵入すると言う事案が発生しました。侵害の一環として、脅威アクターはSalesloft DriftチャットエージェントのSalesforce連携に関連するOAuth資格情報を取得し、Salesloftの顧客のSalesforceインスタンスからデータを不正に持ち出すことができました。当社の調査により、これはB2B向けのサードパーティ連携を標的とした高度なサプライチェーン攻撃の一部であり、Salesloftの顧客である世界中の数百の組織に影響を与えていることが明らかになりました。Cloudforce One(Cloudflareの脅威インテリジェンスおよび研究チーム)は、この高度な脅威アクターをGRUB1に分類しています。Googleの脅威インテリジェンスグループが行った追加の情報開示も、当社環境で観測された活動と一致しています。
当社の調査により、脅威アクターは初期偵察活動を2025年8月9日に行い、その後2025年8月12~17日の間に当社のSalesforceテナントのデータを不正に取得、持ち出していたことが分かりました。詳細な分析により、露出はSalesforceケースオブジェクトに限定されていることが確認されました。ケースオブジェクトには主にSalesforceテナント内のお客様のサポートチケットとその関連データが含まれており、サポートケースに対応するお客様の連絡先情報、ケース件名、底で行われた対話内容が含まれますが、ケースの添付ファイルは含まれません。Cloudflareは、サポートケースの対応にあたり、お客様に秘密情報、認証情報、またはAPIキーの共有を要求することはありません。しかし、トラブルシューティングの状況によっては、お客様がケーステキストフィールドにキー、ログ、またはその他の機密情報を貼り付けることがあります。このチャネルを通じて共有された情報はすべて、漏洩したものと見なすべきです。
今回のインシデントは単発の出来事ではなく、攻撃者は将来の攻撃に備えて認証情報や顧客情報を収集することを目的としていたと考えられます。このDriftの侵害により数百の組織が影響を受けたことを考慮すると、脅威アクターはこの情報を利用して、影響を受けた組織の顧客に対して標的型攻撃を仕掛ける可能性があると考えられます。
この投稿では、攻撃の時系列、当社の対応の詳細、および他の組織が同様の脅威を軽減するためのセキュリティ推奨事項について解説します。
このブログ記事のすべての日付および時刻はUTCで表記しています。
2025年8月23日、SalesforceとSalesloftから、Cloudflareを含む複数の組織でDrift連携が不正に利用されたとの通知を受けました。これを受けて、当社は直ちに全社的なセキュリティインシデント対応を開始しました。セキュリティ、IT、製品、法務、広報、そして経営陣の専門家を集め、1つの統一されたインシデント指揮体制のもとで、部門横断的なチームを立ち上げました。
お客様とCloudflareを保護するため、4つの明確な優先対応事項を設定しました:
脅威の即時封じ込め:侵害されたDriftとの連携機能を無効にしてすべての脅威アクターのアクセスを遮断、侵害範囲を把握するためのフォレンジック分析の実施し、当社環境からアクティブな脅威を排除。
サードパーティエコシステムの保護:Salesforceからすべてのサードパーティ連携を直ちに停止。すべてのサービスに新しいシークレットを発行し、毎週それらをローテーションする新たな運用を規定。
より広範なシステムの完全性の保護:攻撃者が不正に持ち出したデータを使用して他のCloudflareシステムにアクセスすることを防ぐため、認証情報のローテーションの範囲をサードパーティのすべてのインターネットサービスとアカウントに拡大。
お客様に対する影響の分析:Salesforceのケースオブジェクトデータを分析してお客様が侵害された可能性を特定。対象となるお客様へ潜在的な暴露についてタイムリーかつ正確な通知を提供。
当社のフォレンジック調査により、脅威アクターが2025年8月9日~8月17日の間にCloudflareに行った活動を再現することができました。以下に、初期の偵察活動(最初の侵害に至る前の行動)を含む、攻撃者の行動を時系列でまとめます。
11:51、攻撃グループGRUB1が、Cloudflareが発行した顧客用APIトークンを使用してSalesforce APIに検証を試行。アクターは、User-AgentにTrubblehog(一般的なオープンソースの秘密情報スキャナー)を使用してclient/v4/user/tokens/verify
に検証リクエストを送信するが、このリクエストは404 Not Found
で失敗し、トークンが無効であることを確認。このAPIトークンの出所は不明であり、Cloudflareの前にGRUB1が侵害した可能性のある他のDriftの顧客を含む、さまざまな出所から取得された可能性があります。
2025年8月12日:Cloudflareに対する初期の侵害
22:14、GRUB1が不正に持ち出したSalesloft連携で使用する認証情報を使用して、IPアドレス 44[.]215[.]108[.]109
からCloudflareのSalesforceテナントにログインし、APIエンドポイント/services/data/v58.0/sobjects/
にGETリクエスト送信。このアクションにより、Salesforce環境内のすべてのオブジェクトが列挙され、保存されているデータの概要が脅威アクターの手に渡りました。
最初の侵害から1日後、脅威アクターGRUB1は再び同じIPアドレス44[.]215[.]108[.]109
から攻撃を再開。19:33に始まったこの攻撃で、脅威アクターはSalesforceケースオブジェクトから顧客データを不正に持ち出しました。まず、オブジェクトの列挙を再実行してデータ構造を確認し、その後すぐにエンドポイント/sobjects/Case/descript/
を使用してケースオブジェクトのスキーマを取得。さらに、Salesforceのクエリを実行して、ケースオブジェクト内の各フィールドを広範囲に列挙しました。
2025年8月14日:当社のSalesforce環境の把握
脅威アクターGRUB1による、IPアドレス44[.]215[.]108[.]109
からのCloudflareのSalesforceテナントに対する当社環境の把握を目的とした数時間にわたる偵察活動が実施される。その間、以下のような標的型クエリが実行された:
00:17 - アカウント、連絡先、ユーザー数をカウントしてテナントの規模を測定
04:34 - CaseTeamMemberHistoryをクエリして、ケースの作業フローを分析
11:09 - Organizationオブジェクトのフィンガープリンティングを使用して、本番環境であることを特定
さらに脅威アクターは追加のクエリを発行し、顧客サポートシステムの仕組み(チームメンバーによる各種ケースの処理方法、ケースの割り当てやエスカレーション方法、サポートプロセス全体の流れ)を把握した後、/limits/エンドポイントに対してクエリを実行してAPIの運用上のしきい値を取得し、偵察を完了しました。これにより、自分たちのアクセス権限の範囲、ケースオブジェクトの規模、Salesforce環境内で検出を回避するために守るべき正確なAPI制限などの情報を取得しました。
2025年8月14日の偵察から48時間までの間、脅威アクターGRUB1からのトラフィックやログイン成功は観測されませんでした。
2025年8月16日、脅威アクターが再び姿を現しました。19:26、GRUB1がIPアドレス44[.]215[.]108[.]109
からCloudflareのSalesforceテナントに再度ログインし、19:28に最後のクエリSELECT COUNT() FROM Case
を実行。この行動は、盗み出そうとしているデータセットの正確なサイズを確認するための最終的な「リハーサル」であり、これを以て偵察段階は完全に終了し、主な攻撃の準備が整えられました。
2025年8月17日:最終段階「データの持ち出しと隠蔽工作」
11:11:23、GRUB1がインフラ環境をIPアドレス208[.]68[.]36[.]90
に切り替えてログインしてデータの不正持ち出しフェースを開始。ケースオブジェクトの規模の最終確認を終えた後の11:11:56、Salesforce Bulk API 2.0ジョブを開始し、わずか3分強で、Salesforceのインスタンスから、サポートケースのテキストを含むデータセット(添付ファイルなどのファイル類を除く)の不正持ち出しに成功。11:15:42、GRUB1がAPIジョブを削除して痕跡の隠蔽を試みる。これにより主要な証拠は隠蔽されたものの、当社チームは残存ログから攻撃の経緯を再現することができました。
2025年8月17日以降、この脅威アクターの活動は観測されませんでした。
Salesloftは顧客全体に対してDriftからSalesforceへの接続を解除し、自社ウェブサイトにこの内容の通知を掲載しました。その時点で、Cloudflareにはまだ通知が届いておらず、このベンダーの対応が当社の環境に関連する可能性があるという認識はありませんでした。
2025年8月23日:SalesforceとSalesloftからCloudflareに通知が届く
当社のこのインシデントへの対応は、SalesforceとSalesloftからDriftに関連する異常な活動の通知を受けたことから始まりました。 私たちは直ぐにベンダーが推奨する封じ込め手順を実施し、ベンダーと協力して情報を収集しました。
2025年8月25日:Cloudflareが対応活動を開始
8月25日までに、当社はインシデントに関する追加情報を受け取り、ベンダーが推奨する初期の封じ込め手順を上回る強力な対応を実施するとともに、当社独自の包括的な調査と修復の取り組みを開始しました。
私たちの最優先事項は、GRUB1のアクセスを根本から遮断することでした。具体的には、Driftユーザーアカウントを無効化し、そのクライアントIDとシークレットを失効させ、すべてのSalesloftソフトウェアとブラウザ拡張機能をCloudflareシステムから完全に削除しました。この徹底的な脅威の可能性の除去作業により、脅威アクターが既に侵害されたトークンを再利用されたり、古いセッションを介して再度アクセスしたり、ソフトウェア拡張機能を活用するなど攻撃の持続性を維持するリスクを軽減しました。
さらに当社のセキュリティレビューをSalesforce環境に接続されているすべてのサードパーティサービスを含めるように拡大し、脅威アクターによるラテラルムーブメントを防ぐための予防策として資格情報のローテーションを実施しました。
当社にとってSalesforceはカスタマーサポートデータの管理の主要ツールであるため、お客様がカスタマーサービスを利用した際、このツールをとおして秘密情報、パスワード、その他の機密データを送信してしまっているリスクがありました。そのため、私たちは、攻撃者が現在どのような機密情報を入手したかを理解する必要がありました。
私たちは、これらのデータが、お客様のアカウント、システム、インフラストラクチャを侵害するために使用された可能性があるかどうかに即座に注目しました。サポートチームに送信できる自由形式のテキストフィールドを通してお客様がCloudflare APIトークン、キー、またはログを送信している可能性があるため、脅威アクターが取得したデータに何らなの資格情報が含まれているかどうかを確認しました。当社のチームは、正規表現、エントロピー、パターンマッチング技術を用いて、Cloudflareのシークレットを大規模に検出するためのカスタムスキャンツールを開発しました。
調査の結果、被害はSalesforceケースオブジェクト内の自由形式のテキストに限定されており、添付ファイルなどのファイル類には及んでいないことが確認されました。ケースは、セールスチームやサポートチームがカスタマーサポートに寄せられた問題についての社内連絡や、お客様と直接やり取りしたりするために使用されるため、これらのケースオブジェクトに存在データ(テキストのみ)には以下のものがありました:
この結論は、連携機能、認証アクティビティ、エンドポイントテレメトリ、ネットワークログの詳細なレビューを通じて検証されました。
2025年8月26日~29日:対応の規模拡大と事前対策
SalesforceとSalesloftの主要な認証情報のローテーションは既に完了していたことで、次のステップとして、サードパーティ連携を停止し、安全に再設定する作業を行いました。停止したサービスを順番に再オンボーディングし、すべて新しいシークレットで設定し、より厳格なセキュリティ管理を適用しました。
同時に、チームは外部に不正に持ち出された可能性のあるデータの分析を続けました。分析結果に基づき、「漏洩の可能性のあるデータはすべて調査する」という方針の下、潜在的な流出の選別と検証を行いました。これにより、Cloudflareプラットフォーム発行のトークンを見つけ次第即座に対応し、合計104個のAPIトークンのローテーションを実施しました。これらのトークンに関連した不審な活動は確認されていません。
Cloudflareの詳細な分析結果を基に、影響を受けたすべてのお客様に対し、メールおよびダッシュボードのバナー通知にてインシデント発生の旨と推奨される手順を記載した情報を正式に通知しました。
今回のインシデントは、SaaSアプリケーションやサードパーティ連携のセキュリティ強化がいかに重要かを示しています。この攻撃で標的となった数百の企業から漏洩したデータは、さらなる攻撃を仕掛けるために使用される可能性があります。これを防ぐため、すべての組織に、以下のセキュリティ対策を採用することを強く推奨します。
Salesloftと関連アプリケーションの切断:Salesforce環境からのすべてのSalesloft接続をただちに切断するとともに、関連するソフトウェアやブラウザ拡張機能をすべてアンインストールします。
認証情報のローテーション:Salesforceインスタンスに接続されているすべてのサードパーティアプリケーションと連携の認証情報をリセットします。過去にCloudflareへのサポートケースで共有した可能性のある認証情報のローテーションを実施してください。この攻撃の範囲と意図を踏まえ、お客様の環境内のすべてのサードパーティの認証情報に加え、他のベンダーとのサポートケースで共有した可能性のある認証情報をすべてローテーションすることをお勧めします。
定期的な認証情報のローテーション:連携で使用されるすべてのAPIキーやその他のシークレットの定期的なローテーションスケジュールを決め、露出のリスクを減らします。
サポートケースデータの確認:サードパーティ製品提供者とカスタマーサポートのケースデータを確認し、お客様が共有し、漏洩した可能性のある機密情報(認証情報、APIキー、設定情報、その他の機密データなど)を特定します。Cloudflareをご利用のお客様は、Cloudflareダッシュボードの「Support > Technical Support > My Activities」からサポートケース履歴を確認し、フィルターや「Download Cases」機能を使用して包括的に見直すことができます。
フォレンジックの実施: すべてのサードパーティ連携のアクセスログと権限を確認し、Driftインシデントに関連する公開資料を参照し、必要に応じて環境のセキュリティレビューを実施します。
最小権限の徹底:すべてのサードパーティアプリが必要最小限の権限で動作していることを確認し、ベンダーに管理者アカウントを使わせないようにしてください。さらに、すべてのサードパーティおよびビジネスツービジネス(B2B)接続に対して、IPアドレス制限やセッションバインディングなどの厳格な制御を適用してください。
監視と制御の強化:大量のデータをエクスポートする行為や未知の場所からのログインなどの異常を検知できるよう、監視体制を強化してください。サードパーティ間のログ取得は難しい場合がありますが、必ずセキュリティ運用に取り入れることが重要です。
以下は、GRUB1から確認された侵害の兆候(IOC)です。他の組織、特にSalesloftの侵害で影響を受けた可能性のある組織が、自社のログを確認し、同じ攻撃者が自分たちのシステムやサードパーティに侵入していないことを確認できるように、このログを公開します。
インジケーター | 種類 | 説明 |
---|
208[.]68[.]36[.]90 | IPV4 | DigitalOceanベースのインフラストラクチャ |
44[.]215[.]108[.]109 | IPV4 | AWSベースのインフラストラクチャ |
TruffleHog | ユーザーエージェント | オープンソースのシークレットスキャンツール |
Salesforce-Multi-Org-Fetcher/1.0 | ユーザーエージェント | 悪意のあるツールに関連するUser-Agentの文字列 |
Salesforce-CLI/1.0 | ユーザーエージェント | Salesforceのコマンドラインインターフェース(CLI) |
python-requests/2.32.4 | ユーザーエージェント | カスタムスクリプトの可能性を示すUser-Agent |
Python/3.11aiohttp/3.12.15 | ユーザーエージェント | 多数のAPI呼び出しを並行して行う可能性があるUser-Agent |
私たちは、自分たちが選定したツールに責任を負います。そして、そのツールが高度な脅威アクターに侵害された場合、その結果も引き受けなければなりません。今回、通知を受けて当社のチームが調査を行った結果、影響はSalesforceのケースオブジェクト内のデータに限定されており、Cloudflareの他のシステムやインフラストラクチャには一切影響がなかったことを確認しました。
とはいえ、いかなるデータの漏洩も許容されるものではないと考えています。お客様はCloudflareを信頼し、データやインフラ、セキュリティを預けてくださっています。その一方で、私たちはサードパーティのツールを利用することがあり、そのアクセス範囲を厳密に制御し監視する必要があります。今回、それが十分ではありませんでした。私たちはお客様を失望させてしまいました。このことについて、心よりお詫び申し上げます。
業界全体でサードパーティツールが企業内部のデータと連携することが増えているため、新しいツールを導入する際は慎重に精査する必要があります。今回のインシデントは、ひとつの連携ポイントから数百社に影響が及んだものであり、現代のテクノロジー環境におけるリスクのつながりを浮き彫りにしました。当社では、今後、当社や当社のお客様がこのような攻撃から防御できるように、新機能の開発に取り組んでいきます。詳細は今月後半のCloudflareのバースデーウィーク中に発表する予定ですので、ご期待ください。
さらに、脅威インテリジェンスや調査結果を広範なセキュリティコミュニティと共有することにも取り組んでいます。今後数週間のうちに、Cloudforce OneチームがGRUB1の手口を詳しく分析したブログを公開し、同様の攻撃に備えるための支援を行います。
次の表に、インシデント中のGRUB1の具体的な行動を詳細かつ時系列順で示します。
日付/時刻(UTC) | 発生事象の詳細 |
---|
2025年8月9日 11時51分13秒 | GRUB1がTrufflehogを利用してCloudflareのお客様のテナントclient/v4/user/tokens/verify に対してトークンを検証しようとしたが、44[.]215[.]108[.]109 から404エラーが返される。 |
2025年8月12日 22時14分08秒 | GRUB1が44[.]215[.]108[.]109 からCloudflareのSalesforceテナントにログイン |
2025年8月12日 22時14分09秒 | GRUB1が/services/data/v58.0/sobjects/ にGET リクエストを送信し、CloudflareのSalesforceテナントのオブジェクト一覧を取得 |
2025年08月13日 19時33分02秒 | GRUB1が44[.]215[.]108[.]109 からCloudflareのSalesforceテナントにログイン |
2025年08月13日 19時33分03秒 | GRUB1が/services/data/v58.0/sobjects/ にGET リクエストを送信し、CloudflareのSalesforceテナントのオブジェクト一覧を取得 |
2025年8月13日 19:33:07、19:33:09 | GRUB1が/services/data/v58.0/sobjects/Case/describe/ にGET リクエストを送信し、CloudflareのSalesforceテナントにあるケースのメタデータ情報を取得 |
2025年8月13日 19時33分11秒 | GRUB1が44[.]215[.]108[.]109 からケースオブジェクトに対して広範なSalesforceクエリを実行。これは、初期段階の大規模なデータ応答のひとつであり、大量レコード取得による偵察活動の特徴と一致します。 |
2025年8月14日 0時17分40秒 | GRUB1が利用可能なオブジェクトを一覧表示し、「アカウント」 、「連絡先」 、「ユーザー」 オブジェクトの件数を取得。 |
2025年8月14日 00時17分47秒 | GRUB1がCloudflareのSalesforceテナントのAccountテーブルに対して「SELECT COUNT() FROM Account」 クエリを実行して件数を取得 |
2025年8月14日 00時17分51秒 | GRUB1がCloudflareのSalesforceテナントのContactテーブルに対して「SELECT COUNT() FROM Contact」 クエリを実行して件数を取得 |
2025年8月14日 00:18:00 | GRUB1がCloudflareのSalesforceテナントのUserテーブルに対して「SELECT COUNT() FROM User」 クエリを実行して件数を取得 |
2025年8月14日 04時34分39秒 | GRUB1がCloudflareのSalesforceテナントの「CaseTeamMemberHistory」に対して「SELECT Id, IsDeleted, Name, CreatedDate, CreatedById, LastModifiedDate, LastModifiedById, SystemModstamp, LastViewedDate, LastReferencedDate, Case__c FROM CaseTeamMemberHistory__c LIMIT 5000」 クエリを実行 |
2025年8月14日 11時09分14秒 | GRUB1がCloudflareのSalesforceテナントのOrganizationテーブルに対して「SELECT Id, Name, OrganizationType, InstanceName, IsSandbox FROM Organization LIMIT 1」 クエリを実行 |
2025年8月14日 11時09分21秒 | GRUB1がCloudflareのSalesforceテナントのUserテーブルに対して「SELECT Id, Username, Email, FirstName, LastName, Name, Title, CompanyName, Department, Division, Phone, MobilePhone, IsActive, LastLoginDate, CreatedDate, LastModifiedDate, TimeZoneSidKey, LocaleSidKey, LanguageLocaleKey, EmailEncodingKey FROM User WHERE IsActive = :x ORDER BY LastLoginDate DESC NULLS LAST LIMIT 20」 クエリを実行 |
2025年8月14日 11時09分22秒 | GRUB1がCloudflareのSalesforceテナント/services/data/v58.0/limits/ のLimitSnapshotにGET リクエストを送信 |
2025年8月16日 19時26分37秒 | GRUB1が44[.]215[.]108[.]109 からCloudflareのSalesforceテナントにログイン |
2025年8月16日 19時28分08秒 | GRUB1がCloudflareのSalesforceテナントのCasesテーブルに対して「SELECT COUNT() FROM Case」 クエリを実行 |
2025年08月17日 11時11分23秒 | GRUB1が208[.]68[.]36[.]90 からCloudflareのSalesforceテナントにログイン |
2025年8月17日 11時11分55秒 | GRUB1がCloudflareのSalesforceテナントのCasesテーブルに対して「SELECT COUNT() FROM Case」 クエリを実行 |
2025年8月17日 11時11分56秒~11時15分18秒 | GRUB1が208[.]68[.]36[.]90 からSalesforce BulkAPI 2.0を利用して、Casesオブジェクトを流出させるジョブを実行 |
2025年8月17日 11時15分42秒 | GRUB1が208[.]68[.]36[.]90 からSalesforce BulkAPI 2.0を利用して、Casesオブジェクトの流出に使用した直近のジョブを削除 |