セキュリティとプライバシー · Clash 技術ブログ

Clash Party内蔵Sub-Storeのリスクにはどう対処する?

Clash Partyの内蔵Sub-Storeを使っている場合は、バックエンドのバージョンを確認してください。公開報告の対象は2.11.4–2.37.1です。この記事では、無効化、2.38.0以降への更新、ローカルアクセスへの制限、証拠保全、安全な切り戻し手順を説明します。

  • Clash Party
  • Sub-Store
  • セキュリティ更新
  • ローカルAPI
  • CORS
目次

公開報告の対象範囲を先に確認する

Sub-Store issue #634の公開報告では、影響範囲をNodeバックエンドの2.11.4~2.37.1とし、広すぎるクロスオリジンアクセスとスクリプト処理機能が組み合わさるリスクを説明しています。その後、上流はcommit 038745fでデフォルトのCORSを絞り込み、一部のNodeスクリプト操作を制限して拒否テストを追加しました。2.38.0のリリースノートでは、このissueを閉じたことが明記されています。

2026年9月12日時点で、Sub-Storeの現行安定版は2.39.6です。この記事では、上流が#634を明示的に閉じた最低ラインを2.38.0とし、現行安定版への更新を勧めます。ただし、2.38.0があらゆるネットワーク公開経路に認証を追加したという意味ではなく、バージョン番号だけで端末がすでに影響を受けたかどうかも判断できません。

Clash Party issue #2134はv2.0.2環境についてのユーザー報告です。その後、プロジェクトのセキュリティ報告手順に沿ってbotにより閉じられ、コントリビューターはSub-Storeの更新を勧めています。Clash Partyでは内蔵バックエンドを個別に更新できるため、クライアントのバージョンだけでは稼働中のSub-Storeバージョンを特定できません。

v2.0.2のソースでは内蔵Sub-Storeがデフォルトで有効ですが、実際の状態はローカル設定と待受結果で確認する必要があります。ページを開いたことがない、入口が見えない、サブスクリプションを1件削除した、といった事実だけではバックエンドが停止しているとはいえません。

まず事実を切り分ける

確認できた情報そこから判断できることそれだけでは断定できないこと
Sub-Storeのバージョンが2.11.4~2.37.1公開報告の範囲内であり、公開を止めて更新する必要がある端末がすでに悪用または感染されている
Clash Partyにv2.0.2と表示される内蔵バックエンドを引き続き確認する必要があるすべてのv2.0.2環境が同じバックエンド版を使用している
Sub-Storeが2.38.0以降になっている上流が#634を閉じた緩和策が含まれるあらゆるネットワーク経路が認証で保護されている
不審なプロセスやポップアップがない現時点で明確な兆候は見つかっていない古いバックエンドを動かし続けても安全である
公開報告で説明されているローカルSub-Storeへのリクエスト経路
  1. 信頼できないWebページブラウザで開いた外部ページがクロスオリジンリクエストを送る
  2. ブラウザのオリジン確認旧版Nodeバックエンドはデフォルトで広すぎるオリジンを許可
  3. ローカルのSub-Store APIClash Partyが起動する独立したフロントエンド/バックエンドサービス
  4. スクリプト処理機能サブスクリプション処理のコンテキストでスクリプト操作が実行される可能性

2.38.0ではデフォルトのオリジン範囲が絞られ、一部のスクリプト操作も制限されました。ただしCORSはAPI認証ではありません。LANアクセスも無効にし、バージョンを確認できない場合はSub-Store自体を停止してください。

確認前にまずSub-Storeを無効にする

Clash PartyでSub-Storeが動作していてバックエンド版が分からない場合は、まず信頼できないWebページを閉じ、公開されている悪用コードを探したり実行したりしないでください。Clash Partyの「設定 > Sub-Store」を開いて「Sub-Storeを有効にする」をオフにします。公式ソース上、この操作で内蔵フロントエンドとバックエンドの両サービスが停止します。

同時に「LANからのアクセスを許可」がオフのままであることを確認します。この項目をオンにするとサービスは0.0.0.0にバインドされ、LAN内の端末から直接アクセスできます。オフでは127.0.0.1を使用します。公開報告にはブラウザページからループバックアドレスへ到達する経路も含まれるため、LANアクセスを止めるだけでは更新の代わりになりませんが、ネットワークへの露出拡大は防げます。

Sub-Storeはサブスクリプションの編集・変換・管理ツールであり、Mihomoコアそのものではありません。無効にしても、Clash Partyへ取り込み済みのProfile、ポリシーグループ、システムプロキシ、TUNは通常そのまま利用できます。使えなくなるのは、Sub-Storeページでのサブスクリプション処理です。

まず安全に戻せる状態を作る

  1. 信頼できないWebページを閉じる

    この記事とプロジェクトの公式ページだけを残し、出所不明のリクエストやスクリプト、いわゆる診断サイトは試さないでください。

  2. 有効化スイッチをオフにする

    設定のSub-Store欄で「Sub-Storeを有効にする」をオフにし、フロントエンドとバックエンドが停止するまで待ちます。

  3. LANアクセスを無効にする

    「LANからのアクセスを許可」がオフであることを確認し、後で再び有効にする場合も127.0.0.1だけにバインドします。

  4. 再起動して通常のプロキシを確認する

    Clash Partyを再起動し、既存のProfileで実際のHTTPSリクエストを1回行い、Sub-Storeを無効にしても普段のプロキシ利用に影響がないことを確認します。

実際のバックエンドバージョンと待受アドレスを記録する

更新する前に、「設定 > Sub-Store」で内蔵バックエンドとカスタムバックエンドのどちらを使っているか確認します。内蔵モードではClash Partyがローカルbundleを起動します。カスタムモードでは内蔵バックエンドを停止し、ユーザーが入力したURLへ接続します。アプリ内更新は、外部デプロイ側で行う更新、待受制限、認証の代わりにはなりません。

内蔵バックエンドを使う場合は、信頼できないWebページを閉じたことを確認してからSub-Storeを一時的に有効にし、設定欄の「LANからのアクセスを許可」はオフのままにします。Sub-Storeページの「ブラウザで開く」を使い、画面に表示された実際のアドレスを確認してください。どの端末でも同じポートが固定で使われるとは限りません。

Clash Party v2.0.2のソースでは、バックエンドはデフォルトで127.0.0.1:38324から空きポートを探し、使用中なら番号を順に増やします。バックエンドのルートアドレスを開くと、Sub-Storeの応答にあるdata.versionで実際のバージョンを確認できます。記録するのはバージョンとアドレスだけにし、スクリプト引数の送信や悪用テストは行わないでください。

バージョンが2.11.4~2.37.1なら直ちに更新します。2.11.4未満はこの報告の範囲外でも大幅に古いため、現行安定版へ更新してください。ページを開けない、またはバージョンを確認できない場合は無効の状態へ戻し、「不明」を「安全」とみなさないでください。

まずバックエンドモードを区別する

現在のモード稼働を管理する場所適切な対処
内蔵バックエンドClash Partyのローカルサービスアプリ内で更新し、Sub-StoreのAllow LANを無効にしてローカル版を確認
カスタムバックエンドユーザーが指定した外部デプロイデプロイ側で個別に更新し、待受を制限して認証を設定
Sub-Storeを使用しないフロントエンド/バックエンドサービスは動作しない有効化スイッチをオフにし、再起動後に停止を確認

バックエンドに2.11.4~2.37.1と表示される

公開報告の範囲内です。ローカル限定を維持し、直ちに上流版へ更新します。

バックエンドに2.38.0以降と表示される

#634が公式に閉じられた最低ラインを超えています。現行安定版と待受範囲も確認します。

Clash Party v2.0.2としか分からない

情報が足りません。同じクライアント版でも異なるSub-Storeバックエンドが動作している可能性があります。

ブラウザのアドレスが127.0.0.1ではない

まずサービスを停止し、Allow LANを無効にしてから、設定または別の待受プロセスを調べます。

ページまたはバージョン応答を開けない

サービスを繰り返し公開せず、無効のまま公式の更新経路から再試行してください。

Clash PartyからSub-Storeを更新する

以下の手順はClash Partyの内蔵バックエンドだけが対象です。Sub-Storeページ右上には雲形の「更新を確認」ボタンがあります。v2.0.2のソースによると、この入口はsub-store-org/Sub-Storeの公式Releaseにあるlatestからバックエンドとフロントエンドのファイルをダウンロードし、完了後に両サービスを再起動します。

更新をクリックしたら完了表示を待ち、途中でクライアントを終了しないでください。同時にアプリディレクトリのbundleを手作業で上書きすることも避けます。最低目標は2.38.0、現在の目標は2026年9月11日公開の2.39.6です。今後さらに新しい安定版が出た場合は、公式Releasesを基準にしてください。

Mihomoコアの更新、サブスクリプションの再取得、同じClash Partyクライアントの再インストールでは、Sub-Storeバックエンドの確認を代替できません。Sub-Storeは独立してダウンロード・実行されるコンポーネントなので、専用ページで更新し、固有のバージョン番号を読み取る必要があります。

アプリ内の公式更新経路だけを使う

  1. ローカル待受を維持する

    Allow LANがオフであることを確認し、信頼できない他のブラウザページも閉じます。

  2. 「更新を確認」をクリックする

    Sub-Storeページ右上の雲形ボタンをクリックし、ダウンロード、再起動、完了表示を待ちます。

  3. バージョンをもう一度読み取る

    画面に表示された実際のバックエンドアドレスへもう一度アクセスし、data.versionが2.38.0以上であることを確認します。

  4. 更新に失敗したら無効にする

    ダウンロード、再起動、バージョン確認のいずれかに失敗した場合は「Sub-Storeを有効にする」をオフにし、ダウングレードや第三者からのファイルコピーは行わないでください。

更新後にバージョン、待受、無効化スイッチを確認する

更新成功の表示は最初の確認にすぎません。Clash Partyを再起動した後、Sub-Storeページから実際のバックエンドアドレスとdata.versionを再確認し、古い版へ戻っていないことを確かめます。アドレスがLAN内のアドレスや0.0.0.0ではなく、127.0.0.1を使用していることも確認してください。

次に「Sub-Storeを有効にする」をオフにして、フロントエンドとバックエンドのページへアクセスできなくなったことを確認します。その後、既存のProfileで実際のHTTPSリクエストを1回行います。これにより、無効化スイッチが独立サービスを確実に停止することと、通常のプロキシ処理がSub-Storeの常時稼働に依存しないことを同時に確認できます。

セキュリティ確認チェックリスト

  • 実際のSub-Storeバックエンドが2.38.0以上で、現行の公式安定版とも照合済み
  • Clash Partyを再起動しても新しいバージョンが維持される
  • 「LANからのアクセスを許可」がオフで、画面に表示されるバックエンドホストが127.0.0.1
  • 「Sub-Storeを有効にする」をオフにすると、フロントエンドとバックエンドの両サービスへアクセスできなくなる
  • Sub-Storeを無効にしても、既存のProfile、システムプロキシ、またはTUNで実際のリクエストを完了できる
  • カスタムバックエンドを使う場合、外部デプロイ側でバージョン、待受、認証を個別に確認済み
  • PoC、未知のスクリプト、第三者のセキュリティ診断ページを実行していない

影響が疑われる場合は先に証拠を保全する

バージョンが報告範囲内でも、すでに悪用されたことを意味しません。未知のプロセス、不審なネットワーク接続、OSのセキュリティソフトによる警告、設定や認証情報の不審な変更などの証拠がある場合に限り、端末侵害の可能性がある事案として扱います。その段階では、更新で今後の侵入口は塞げても、すでに存在するプログラムを削除したり、漏えいした認証情報を元に戻したりはできません。

まずSub-Storeを無効にして端末をネットワークから切り離し、Clash PartyとSub-Storeのバージョン、待受アドレス、警告が出た時刻、不審な現象を記録します。「クリーンアップ」のためにログ、設定、未知のファイルをすぐ削除しないでください。影響範囲を判断する重要な証拠になる可能性があります。

OS標準または組織が承認したセキュリティツールで完全スキャンを行います。サブスクリプションURL、ノードの認証情報、WebDAV、GitHub Token、その他の鍵をその端末で扱っていた場合は、信頼できる別の端末から古い認証情報を失効させ、再発行してください。ログを共有する前には機密情報を除いたコピーを作成します。完全性を確認できない場合は公式ソースからOSまたはクライアントを再インストールし、安全を確認した設定だけを復元してください。

インシデント対応の最低限の作業

  • Sub-Storeを無効にし、影響が疑われる端末のネットワーク接続を制限した
  • バージョン、待受アドレス、時系列、警告、不審な接続を記録した
  • 元のログと設定を保全し、公開用コピーから機密情報を除いた
  • 信頼できるシステムセキュリティツールでスキャンを完了した
  • 漏えいの可能性があるサブスクリプションTokenとクラウド認証情報を信頼できる端末でローテーションした
  • 完全性を確認できない場合、古いアプリディレクトリを新しい環境へそのままコピーしていない

更新に失敗したら無効化し、古いバックエンドへ戻さない

2.38.0以降で特定のサブスクリプション変換やスクリプトが動かなくなっても、機能を戻すために2.37.1以前へダウングレードしないでください。まずSub-Storeを無効にし、動作確認済みのClash Party Profileを引き続き使用します。サブスクリプションを復元する必要がある場合は、信頼できるサービス事業者から元のリンクを再取得するか、更新前の安全なバックアップを取り込みます。

新しいバージョンで、Allow LANがオフ、待受が127.0.0.1に限定されている場合にだけSub-Storeを再度有効にして確認します。第三者スクリプトが制限された古い挙動に依存し続ける場合は、ローカルAPI全体の制限を緩めるのではなく、そのスクリプトの使用を止めてメンテナーへ更新を依頼してください。

切り戻しは可能でもリスクのある版へは戻さない

  1. 独立サービスを停止する

    Sub-Storeを無効にし、フロントエンドとバックエンドが停止したことを確認します。

  2. 利用可能なProfileを復元する

    アプリ内で引き続き動作する設定を使うか、更新前に保存した安全なコピーを取り込みます。

  3. 普段のプロキシ利用を確認する

    動作確認済みのノードを1つ固定し、システムプロキシまたはTUNで実際のリクエストをそれぞれ確認します。

  4. 互換性修正を待つ

    Sub-Storeと関連スクリプトの公式更新を確認し、2.37.1以前のbundleは復元しません。

今後はクライアント名から推測せず、コンポーネントのバージョンで確認する

今回のリスクの中心はClash Partyが起動するSub-StoreのNodeバックエンドであり、Mihomoコアや、Clashという名前を持つすべてのクライアントではありません。今後の確認では、Clash Partyのバージョン、Sub-Storeのdata.version、Allow LANの状態、実際の待受アドレスをセットで記録してください。

公式の2.38.0リリースで#634は閉じられ、2.39.6が今回の確認時点の現行安定版です。一方、Clash Party #2134は依然としてユーザー報告にとどまります。今後、上流から新しいセキュリティ告知、認証機構、Clash Partyへの統合版が公開された場合は、新しい公式Release、commit、説明に基づいて結論を更新してください。

長期保守の記録

記録項目必要な理由確認するタイミング
Sub-Store data.version独立バックエンドが修正の最低ラインに達しているか判断するためアプリ内更新のたび
Allow LANと待受アドレスAPIがLANへ公開されていないことを確認するためネットワークまたは設定の変更後
Clash Partyのバージョン画面と更新経路を把握するためクライアント更新後
公式Releaseとセキュリティ説明ユーザー報告を公式見解として扱わないため新しいバージョンまたは警告を確認したとき

参考資料