本文へ移動
English version →
重大 9.3 急ぎ度: 至急

CoPilotのGCP鍵が認証なしで漏れる、一部修正版あり

SOCFortress CoPilotを運用する組織では、認証なしでクラウド監査レポートやGCPのサービスアカウント鍵を読まれるおそれがあります。0.1.77へ更新し、外部から届かないよう経路を絞って、使った鍵を入れ替えてください。

CVE-2026-61730 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆
画像は生成 AI で作成したイメージです

急ぎ度: 至急

CVSS v3が9.3で、認証なしにネットワーク越しで読み取れるうえ、レポート公開の部分を完全に直す版がまだ確立されていないためです。

関係があるか

CoPilotのScoutSuite連携でAWS・Azure・GCPの監査レポートを作っている組織が対象です。管理画面がインターネットや広い社内ネットワークから届く環境ほど、読まれる可能性が高くなります。

製品影響を受ける版修正版
SOCFortress CoPilot(ScoutSuite連携) GCPスキャン時の鍵の保存は0.1.77より前の版が対象です。レポートの公開は0.1.77でも完全には解消されていません。 0.1.77(鍵を公開ディレクトリに置かない対応のみ。レポート公開を完全に直した版はまだ確立されていません)

確かめ方

  1. 1稼働中のCoPilotの版を確認し、0.1.77より前でないかを見ます。
  2. 2ScoutSuite連携を使っているかを確認します。使っていなければ、レポートも鍵も作られていません。
  3. 3CoPilotが動くホストに、外部やほかのネットワークから届くかを、ファイアウォールとリバースプロキシの設定で確認します。
  4. 4ウェブサーバーやプロキシのアクセスログで、/scoutsuite-report への見覚えのない送信元からの要求がないかを調べます。

何が起きたか

CoPilotの管理画面に、ログインしていない人でもクラウド監査のレポートを読める穴があります。GCPのスキャン中には、スキャンに使うサービスアカウントの秘密鍵も同じ経路から取得できてしまいます。10月30日に公表されました。

ふだんの /api 配下の操作にはJWT認証が必要です。ところが backend/copilot.py にある /scoutsuite-report の静的ファイル配信には認証がかかっておらず、scoutsuite-report ディレクトリの中身がそのまま公開されます。ここに置かれるHTMLレポートや scoutsuite_results_.js には、AWS・Azure・GCPのIAMの主体、リソース一覧、設定の不備、検出結果が含まれます。レポート名は利用者が付ける名前から決まり、既定の名前には推測しやすい規則があります。

GCPの鍵はさらに厄介です。管理者やアナリストがGCPスキャンを始めると、アップロードされたJSON鍵が同じ公開ディレクトリに保存されます。削除されるのはスキャンが終わってからで、それまでのあいだは誰でも取得できる状態です。

0.1.77では、鍵をこのディレクトリに置かない対応が入りました。一方で、レポートが読めてしまう点を完全に直した版は、まだ確立されていません。

攻撃の流れ

  1. 1

    到達できる

    ログインしていない第三者が、CoPilotのホストにネットワークから届く位置にいます。

  2. 2

    公開パスを要求

    認証のかからない `/scoutsuite-report` 配下のファイルを直接要求します。

  3. 3

    レポートを入手

    IAMの主体、リソース一覧、設定の不備といった監査結果が読み取られます。

  4. 4

    スキャン中は鍵も

    GCPスキャンの最中なら、保存されたサービスアカウントの秘密鍵も取得されます。

  5. 5

    クラウドへ波及

    入手した鍵で、そのサービスアカウントに許された操作をクラウド側で実行されるおそれがあります。

公開されている情報をもとにした流れの例です。

どう悪用されるか

悪用にログインは要りません。CoPilotのホストにネットワークから届き、公開されているファイルのパスを要求できれば足ります。利用者に何かを操作させる必要もありません。

鍵が取られる時間帯は、管理者かアナリストがGCPスキャンを実行している最中に限られます。ただしレポートは削除されるまで残るため、読み取られる状態は続きます。

被害は二つに分かれます。鍵が取られると、そのサービスアカウントに付いている権限の範囲で、GCP上の情報の閲覧などをされます。レポートが読まれると、組織のクラウドにどんなアカウントや資源があり、どこに設定の不備があるかが一覧で知られます。CVSSのベクターでは影響範囲がCoPilot自身を超えて変わる(S:C)とされ、機密性への影響は高、完全性への影響は低と評価されています。

今すぐやること

  1. 1

    CoPilotへの到達範囲をすぐ絞る

    修正版を待たず、CoPilotのホストをVPNや管理用セグメントなど限られた送信元からだけ届くようにします。インターネットに直接出している場合は、最優先で閉じてください。

  2. 2

    0.1.77以降へ更新する

    GCPスキャンの鍵が公開ディレクトリに置かれる問題は、0.1.77で対応されています。更新後も、レポートの公開が完全には直っていない可能性があるため、前の手順の制限は外さないでください。

  3. 3

    GCPのサービスアカウント鍵を入れ替える

    CoPilotにアップロードしたことのある鍵は、漏れた前提で失効させて作り直します。GCP側の監査ログで、その鍵による身に覚えのない操作がないかも調べます。

  4. 4

    アクセスログと残存ファイルを調べる

    /scoutsuite-report への外部からの要求がないか、公開ディレクトリに鍵やレポートが残っていないかを確認します。不要なレポートは削除するか、認証のある場所へ移します。

  5. 5

    レポートの内容を機密として見直す

    過去のレポートが読まれた可能性がある場合は、記載されたIAMの設定不備を優先して直します。レポートに載った設定不備は、攻撃者に先に知られた前提で扱うのが安全です。

  6. 6

    ベンダーの告知を定期的に確認する

    レポート公開の部分を直す版が出るかどうかは、SOCFortressのGitHub上のセキュリティ告知で確認します。

すぐ更新できないとき

リバースプロキシやファイアウォールで /scoutsuite-report へのアクセスを拒否するか、信頼できる送信元だけに限ります。レポートは認証付きの別の手段で共有するほうが安全です。更新までのあいだは、GCPスキャンを実行せず、ディレクトリに残った鍵とレポートを削除しておくことも有効です。

背景

CoPilotはSOCFortressが公開しているオープンソースのツールで、セキュリティ運用に必要な画面を一つにまとめる役割を持ちます。ScoutSuiteは、AWS・Azure・GCPの設定を調べて危険な箇所を報告するクラウド監査ツールです。つまり、組織のクラウドの弱いところをまとめた資料と、それを調べるための認証情報の両方が、CoPilotのサーバーに集まります。

今回の脆弱性が重いのは、その集まった情報の置き場所に認証がかかっていなかったためです。APIにはJWT認証があっても、静的ファイルの配信は別の仕組みで動くため、認証の外に出てしまいました。クラウドの鍵を扱う運用ツールが、その鍵を公開ディレクトリに一時保存していたことが、被害を鍵そのものの漏えいにまで広げています。

よくある質問

Q.GCPスキャンをしていなければ、影響はありませんか。
A.鍵の取得はGCPスキャン中に限られますが、レポートは別です。AWS・Azure・GCPのどのレポートも、作成後に残っていれば認証なしで読める状態でした。ScoutSuite連携を一度でも使っていれば、対象として扱ってください。
Q.0.1.77に更新すれば、もう安全ですか。
A.鍵の保存先の問題は解消されますが、レポートが認証なしで読める点は、完全に直った版が確認されていません。到達範囲の制限とレポートの整理は、更新後も続けてください。

まだ分かっていないこと

  • レポートの公開を完全に解消する版は、まだ確立されていません。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. In affected deployments, the unauthenticated /scoutsuite-report StaticFiles mount in backend/copilot.py exposes the scoutsuite-report directory even though normal /api routes require JWT authentication. Generated HTML reports and scoutsuite-results/scoutsuite_results_.js files disclose AWS, Azure and GCP IAM principals, resource inventories, misconfigurations and findings. Report names derive from caller-selected names with predictable defaults. During an admin- or analyst-initiated GCP scan, backend/app/integrations/scoutsuite/routes/scoutsuite.py saves the uploaded Google service-account JSON key into that same web-served directory. In backend/app/integrations/scoutsuite/services/scoutsuite.py, generate_gcp_report_background removes the key only after the scan finishes. Any anonymous client that can reach the host and request the file path can therefore retrieve the private key during the scan and use the service account's cloud permissions, as well as read retained cloud-security reports. Credential isolation is released in version 0.1.77; a release fully remediating the report-disclosure component has not been established.

出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく