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

SOCFortress CoPilotに認証回避の脆弱性、修正版あり

SOCFortress CoPilotに、初期値のままのシークレットでログインなしにWazuhへ命令を送れ、偽アラートも登録できる脆弱性が見つかりました。修正版へ更新し、シークレットを固有の値に変えたうえで、不審な呼び出しがないか確認してください。

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

急ぎ度: 至急

CVSS v3は9.4で、認証なしにネットワーク越しで悪用でき、修正版も公開済みのため、該当する環境は今日のうちに更新とシークレット変更を済ませたい状況です。

関係があるか

SOCFortress CoPilotをSOC運用の画面として使い、Wazuh・Graylog・Velociraptorなどと連携させている組織が対象です。webhook用のシークレットを初期値のまま運用している環境は、とくに優先して見直してください。

製品影響を受ける版修正版
SOCFortress CoPilot 0.1.76より前のすべての版 0.1.76

確かめ方

  1. 1CoPilotの版を確認し、0.1.76より前なら対象です。Gitで取得している場合は、リポジトリのディレクトリで git describe --tags を実行すると版が分かります。
  2. 2環境変数ファイル(.env)で GRAYLOG_API_HEADER_VALUE と VELOCIRAPTOR_API_HEADER_VALUE が設定されているかを見ます。未設定、または .env.example と同じ値のままなら、初期値で動いています。値そのものをチャットやチケットに貼らないでください。
  3. 3CoPilotのAPIに、どのネットワークから到達できるかを確認します。リバースプロキシやファイアウォールの設定を見て、Graylogなどの送信元以外から届く状態になっていないかを調べてください。
  4. 4CoPilotにWazuh managerが設定されているかも確認します。設定されていれば、命令が実際に端末へ届く環境です。

何が起きたか

CoPilotのwebhook受信口が、ログインなしで通ってしまう状態でした。攻撃者は、Wazuhに任意の命令を送ったり、偽のアラートを登録したりできます。

CoPilotのAPIは通常、JWTによるログインを求めます。ところがGraylogとVelociraptorからのwebhookだけは、共有のヘッダー値で認証する作りでした。この値の初期値がソースコードに書かれていて、.env.example にも同じ値が入っています。設定を変えずに運用すると、公開されている値が合言葉の役目を果たしてしまいます。

Graylog用の呼び出し口では、COMMAND、ACTION、VALUE、AGENT_ID がそのままWazuh managerに転送されます。ログイン済みの利用者向けの経路にある、コマンドの種類を絞る検証も通りません。Velociraptor側のアラート作成口は、任意の顧客コード向けの偽アラートを受け付け、攻撃者が指定したOpenSearchへの検索まで動かします。

0.1.76で修正されています。

攻撃の流れ

  1. 1

    既定値の入手

    ソースコードと設定例に載っている共有ヘッダー値を、攻撃者が入手します。

  2. 2

    認証なしで送信

    JWTを持たないまま、webhook用のAPIへリクエストを送ります。

  3. 3

    Wazuhへ転送

    指定した命令がWazuh managerに渡り、端末側のスクリプトが動きます。

  4. 4

    偽アラート登録

    任意の顧客コードの偽アラートが作られ、OpenSearchへの検索も走ります。

  5. 5

    被害の発生

    端末の停止や防御設定の改変、検知結果の混乱が起こります。

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

どう悪用されるか

認証は要りません。CoPilotのAPIにネットワーク経由で到達でき、初期値のヘッダー値が使われたままなら、利用者の操作がなくても成立します。ヘッダー値を各自で変更している環境は、この回避の対象外です。Wazuhへの命令が実際に届くのは、到達可能なWazuh managerがCoPilotに設定されている場合に限ります。

被害は、CVSSのベクターが示すとおり、機密性への影響は低く、完全性と可用性への影響が高いと評価されています。Wazuhのアクティブレスポンスが悪用されると、端末の業務を止められたり、防御用の設定や仕組みを無効にされたりするおそれがあります。偽アラートは、複数の顧客を扱うSOCでほかの顧客コードの画面に混ざり、調査の手を止めたり、本物の兆候を埋もれさせたりします。

今すぐやること

  1. 1

    修正版に更新する

    CoPilotを修正版に更新します。更新したあとも、版が上がったことを画面かコマンドで確認してください。

    git describe --tags
  2. 2

    シークレットを固有の値に変える

    GRAYLOG_API_HEADER_VALUE と VELOCIRAPTOR_API_HEADER_VALUE を、推測されにくい長いランダム値に変更します。CoPilotを再起動し、GraylogとVelociraptorのwebhook設定側も同じ値に合わせてください。

  3. 3

    到達できるネットワークを絞る

    webhook用のAPIは、Graylog・Velociraptorなど送信元の機器からだけ届くように、リバースプロキシやファイアウォールで制限します。CoPilot自体をインターネットに直接公開していないかも見直してください。

  4. 4

    不審な呼び出しの跡を調べる

    公表の前から初期値で動いていた環境では、すでに使われた可能性も考えます。リバースプロキシやアプリケーションのアクセスログで、/api/graylog/invoke、/api/incidents/alerts/create/threshold、/api/incidents/alerts/create/velo-sigma への、見覚えのない送信元からのPOSTを探します。あわせてWazuh側で意図しないアクティブレスポンスが実行されていないか、見覚えのない顧客コードのアラートが作られていないかも確認してください。

  5. 5

    ベンダーの告知を確認する

    GitHubのセキュリティアドバイザリで、影響する版と更新手順に変更や追記がないかを見ておきます。

すぐ更新できないとき

すぐに更新できないときは、先にヘッダー値だけでも固有の値に変更し、webhook用APIへの到達を送信元の機器だけに絞ってください。これで、公開されている初期値による認証回避は成立しなくなります。ただし恒久策ではないため、更新の予定は早めに決めてください。

背景

CoPilotは、SOC運用に必要な画面を一つにまとめるツールです。WazuhやGraylog、Velociraptor、OpenSearchといった監視・調査の部品をつなぎ、アラートの集約や対応の指示を引き受けます。Wazuhのアクティブレスポンスは、検知をきっかけに端末側でスクリプトを走らせる機能で、通信の遮断などに使われます。この脆弱性は、その指示の通り道に認証の穴があったという点で、守りのための仕組みが逆に使われやすい性質を持っています。

原因は、外部サービスからのwebhookを共有の固定値で認証し、その初期値をコードと設定例に書いていたことです。設定例をコピーして使い始める運用では、値を変え忘れても動いてしまうため、気づかないまま公開状態になりやすい作りでした。

よくある質問

Q.更新後にヘッダー値を変えると、連携が止まりませんか。
A.CoPilot側だけ値を変えると、GraylogやVelociraptorからの正規のwebhookも認証に失敗して止まります。送信側の設定も同じ値に更新し、テスト送信で届くことを確認してから切り替えてください。
Q.Wazuhで実際に何が実行されたかは、どこで見ればよいですか。
A.Wazuh managerの /var/ossec/logs/ossec.log と、対象の端末側にある /var/ossec/logs/active-responses.log が手がかりになります。CoPilotのアクセスログで見つかった時刻と照らし合わせてください。

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

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

SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. Prior to 0.1.76, verify_graylog_header in backend/app/active_response/routes/graylog.py and verify_velociraptor_header in backend/app/incidents/routes/incident_alert.py authenticate webhooks against GRAYLOG_API_HEADER_VALUE and VELOCIRAPTOR_API_HEADER_VALUE with the same publicly hardcoded fallback. The same default is shipped in .env.example. Deployments that leave either setting unset or unchanged permit an anonymous caller with the known header value to bypass the JWT authentication required by normal APIs. POST /api/graylog/invoke forwards attacker-selected COMMAND, ACTION, VALUE and AGENT_ID to the configured Wazuh manager without the command-enum validation of the authenticated invocation route, allowing active-response scripts to disrupt endpoints and manipulate defensive controls. POST /api/incidents/alerts/create/threshold and POST /api/incidents/alerts/create/velo-sigma accept forged alerts for arbitrary customer_code values and drive attacker-controlled OpenSearch queries. Active-response delivery requires a configured reachable Wazuh manager. Deployments with independently changed header secrets are not subject to this default-secret bypass. This issue is fixed in version 0.1.76.

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

参照URL

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