何が起きたか・対象

GPT-SoVITSで、UIなどで選択したモデルのパスがtorch.loadへ渡り、モデルの数値だけでなくオブジェクト復元に伴う処理まで実行できる形式で読まれていました。攻撃者が作ったモデルを配置・選択させられると、利用開始前のロード中にサーバー上でその処理が動く問題です。識別子はCVE-2025-49837〜49841です。

model_chooseは画面などから受けるモデルの選択値です。これを受けたuvrが音声処理用のAudioPreを作る際、モデル名へ.pthを付けたパスを渡し、AudioPreがtorch.loadでファイルを読みます。問題となるpickle形式の復元では、数値だけでなく、オブジェクトを作り直すための関数と引数もファイルから指定できます。復元器がその関数を呼ぶので、モデルの推論を始める前に処理が動きます。

無害な機構の例として、保存したオブジェクトを作り直すために「組込み関数へ数値を渡して結果を使う」という復元指示を考えます。これは数値を読むだけでなく、指定の関数を実際に呼ぶ処理です。呼べる関数を制限しない復元器へ攻撃者の指示を渡せば、サーバーで別の処理を実行させるおそれがあります。具体的な攻撃モデルの内部形式を本記事で再現した例ではありません。

説明用に、その処理がアプリから読める資格情報を外部へ送れれば、攻撃者が値を取得できます。ただしパスを入力できるだけでは足りず、攻撃者の内容のモデルをその場所へ置く・取得させる経路と、実際にロードされることが条件です。 例えば、利用者が未信頼の配布モデルをサーバーへ保存して選択する場面です。配置・取得の入口が実際に使えるかは個々の環境で別途確認し、研究が全ての公開UIから配置まで実証したとは扱いません。実行権限はGPT-SoVITSを動かすOSユーザーに従います。

報告・修正・公開の時系列

2025-03-14に脆弱性の連絡先を問い合わせ、05-06に再連絡、06-16にCVEを依頼し、06-27に研究公開されました。検証対象は20250228v3で、参照資料では正式な修正版を確認できません。

正常ならどう動くはずだったか

モデルの配布元はファイルの内容を決められます。ロードする側は、必要な重みの数値だけを読み取る方式か、任意のオブジェクトや復元時の関数まで扱う方式かを、使用するライブラリ版と設定で確認する必要があります。

完全性の確認では、取得ファイルのハッシュを、信頼する配布元から別経路で得た正しいハッシュと比較する方法があります。攻撃者がファイルと比較値の両方を変えられるなら確認になりません。ロード方式も、必要な数値・型だけを許し、任意の関数呼出しを拒否するものか確認します。パスの存在確認だけでは、ファイルの作成者や復元処理は検証できません。

技術的な原因

model_chooseのモデル名はuvrへ渡り、uvrがモデルのパスを作ってAudioPreなどへ渡します。AudioPreはそのパスをtorch.loadへ渡します。ファイル内容を信頼できるか確かめず、復元用の関数呼び出しも扱える読み込み方式を使うと、ファイルの指定からサーバーでの処理実行へつながります。他のモデル切り替え関数にも同種の経路が報告されています。

攻撃が成立する条件と流れ

攻撃者は、ロードされるモデルの内容と、そのファイルを配置・選択させる経路を制御できる必要があります。選択したパスのファイルが実際にtorch.loadへ届くと、ファイル内の復元データに従う処理が、モデルを使う前のロード中に動きます。パスだけを入力できても、攻撃者のモデルをそこへ配置・取得させられなければ、同じ攻撃が必ず成立するわけではありません。

確認された事実と、想定される影響

研究はサーバーでの遠隔コード実行を可能な影響としています。説明用の例では、ロード中の処理がアプリから読める資格情報を読み、外部へ送信できると、攻撃者がその値を入手するおそれがあります。書き込み権限があるファイルの変更も起こり得ますが、実行ユーザーの権限と隔離範囲に従います。通常のモデルが全て不正な処理を持つという意味ではなく、実悪用の観測も未確認です。

実際の修正・対応方針

開示時系列から正式な修正リリースは確認できません。値だけを表す安全な形式、復元機能を制限する設定、配布元と完全性の確認が一般策ですが、製品の各経路で実施されたと断定はしません。

利用者・運用者が確認すること

未信頼のモデルをロードせず、モデル選択UIへのアクセスとファイル配置を制限します。使用する依存版とロード設定を確認し、修正未確認の構成を未信頼者向けに公開しません。モデル処理の隔離も行います。 依存版はPyTorchなど実際にロードを行うライブラリを含みます。解析専用プロセスやコンテナへ必要なモデルだけを渡し、アプリの秘密や不要なホスト共有を与えないことで、読み込み処理が実行されても触れられる対象を減らします。

開発者への教訓(教材としての考察)

モデルの拡張子や存在だけでは、読み込み時の動作を判断できません。配布ファイルを誰が作り、復元器が何を実行できるかまで確認すると、受け取ったモデルの読み込みがコード実行につながる理由が分かります。

出典・確認範囲

  1. [1] Remote Code Execution in GPT-SoVITSGitHub Security Lab / 確認日 2026-10-29
  2. [2] pickle — Python object serializationPython Software Foundation / 確認日 2026-11-01
未確認事項・限界

正式な修正版・各経路の現行到達性・実悪用は確認できません。