深刻度: 高、CVSS 4.0 8.7、CVSS 3.1 8.8(CNA である VulnCheck により割り当て)
ベクター (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
ベクター (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
影響を受けるバージョン: SpeechBrain < 1.1.1
修正バージョン: 1.1.1 / コミット 22a6166
CWE: CWE-502(信頼できないデータのデシリアライゼーション)
報告者: Sai Teja Erukude
CNA: VulnCheck
公開日: 2026年8月27日
SpeechBrain の 1.1.1 より前のバージョンでは、チェックポイント復元時に CKPT.yaml
チェックポイントメタデータを解析する際に PyYAML の安全でないローダーを使用しています。
攻撃者が SpeechBrain のチェックポイントディレクトリを提供または変更できる場合、CKPT*
チェックポイントディレクトリ内に悪意のある CKPT.yaml ファイルを配置できます。被害者が
Checkpointer.recover_if_possible() を呼び出すと、SpeechBrain はチェックポイント候補を列挙し、
すべての候補メタデータファイルを次のコードで解析します:
yaml.load(fi, Loader=yaml.Loader)
yaml.Loader は !!python/object/apply などの Python オブジェクト構築タグをサポートしているため、
攻撃者が制御するチェックポイントメタデータは、チェックポイント検出中に Python コードを実行できます。
悪意のあるチェックポイントが選択または復元される必要はありません。コード実行は SpeechBrain がチェックポイント候補を列挙している間に発生します。
攻撃者は、SpeechBrain を実行している Python プロセスのコンテキストで任意の Python コードを実行できます。
これは、ユーザーが信頼できないチェックポイントディレクトリ、モデルアーティファクト、または アーカイブからトレーニング/推論をダウンロード、解凍、再開、または実行するワークフローに影響を与える可能性があります。
ホスティングプロセスによっては、以下が可能になる場合があります:
影響を受けるコンポーネントは、SpeechBrain のチェックポイント復元/一覧表示フローです:
Checkpointer.recover_if_possible()
-> list_checkpoints()
-> _construct_checkpoint_objects()
チェックポイントの一覧表示中に、SpeechBrain は CKPT.yaml を含む CKPT* という名前の
子ディレクトリをスキャンします。各候補メタデータファイルは、最終的なチェックポイント選択の前に解析されます。
安全でない解析は speechbrain.utils.checkpoints.checkpoints.py で発生します:
meta = yaml.load(fi, Loader=yaml.Loader)
PoC は 2 つのチェックポイントを作成します:
CKPT+poisoned-metadata: CKPT.yaml に PyYAML のオブジェクト適用ペイロードを含む、古い悪意のあるチェックポイント。CKPT+benign-newer: 新しさによって選択されるべき、新しい良性のチェックポイント。良性のチェックポイントが選択されますが、悪意のあるチェックポイントのメタデータは 候補の一覧表示中に依然として実行されます。これは、チェックポイントの復元とは無関係に、 メタデータ解析時にコード実行が発生することを示しています。
package_builder.py は、攻撃者が制御するチェックポイントレイアウトを作成します。
run_poc.py は検証を実行し、Checkpointer.recover_if_possible() を呼び出し、
実行の証拠を出力します。
ローカルのテスト環境でのみ実行してください:
python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python -B run_poc.py
脆弱なバージョンでの期待される証拠:
speechbrain_version: 1.1.0
installed_package: True
recovery_error: None
benign_checkpoint_selected: True
marker_before_recovery: False
marker_after_recovery: True
marker_contents:
speechbrain_checkpoint_yaml_loader_rce_triggered
success: True
重要な証拠は、benign_checkpoint_selected: True と
marker_after_recovery: True が同時に現れることです。これは、悪意のある古いチェックポイントが
復元用に選択されなかったものの、SpeechBrain がチェックポイント候補を列挙している間に
そのメタデータが依然として解析され実行されたことを示しています。
ペイロードは意図的に無害です。ローカルのマーカー文字列のみを書き込みます:
speechbrain_checkpoint_yaml_loader_rce_triggered
シェルを起動したり、ネットワークサービスに接続したり、シークレットを読み取ったり、 データを削除したり、PoC ディレクトリ外のファイルを変更したりすることはありません。
SpeechBrain 1.1.1 以降にアップグレードしてください。
永続的なコード修正は、チェックポイントメタデータに PyYAML の安全なローダーを使用することです:
yaml.safe_load(fi)
または:
yaml.load(fi, Loader=yaml.SafeLoader)
チェックポイントメタデータには unixtime や end-of-epoch などのスカラー値のみが必要なため、
この解析パスでは Python オブジェクト構築を有効にすべきではありません。
即時のパッチまたはアップグレードが利用できない場合:
CKPT.yaml 内の予期しないタグやフィールドを検証または拒否してください。Sai Teja Erukude によって発見および報告され、VulnCheck を通じて調整されました。
exploit_walkthrough.md