NVIDIAの機械学習ライブラリ「Merlin Transformers4Rec」に、攻撃者がルート権限でリモートコード実行(RCE)を可能にする重大な脆弱性が発見されました。
Trend Micro Zero Day Initiative(ZDI)の脅威ハンティングチームによって発見されたこの脆弱性は、モデルのチェックポイント読み込み機能における安全でないデシリアライゼーションに起因します。具体的には、PyTorchの`torch.load()`関数がサンドボックス化やクラス制限なしで使用されており、Pythonのpickleシリアライゼーションが悪用される可能性があります。
**脆弱性の詳細**
* **CVE ID**: CVE-2025-23298
* **影響を受ける製品**: NVIDIA Merlin Transformers4Rec
* **影響**: ルート権限でのリモートコード実行
* **CVSS 3.1スコア**: 9.8
ZDIの研究者たちは、ML/AIフレームワークのサプライチェーンリスクを監査する中で、モデルの永続化と読み込み方法に注目しました。Transformers4Recの`load_model_trainer_states_from_checkpoint`関数内で、`torch.load()`が安全でない方法で使用されていることを確認。悪意のあるチェックポイントファイルを読み込むことで、モデルの状態を復元する際に即座にルートレベルのコマンドが実行されることを実証しました。
攻撃者は、`reduce`メソッドがシステムコマンドを呼び出すように細工された悪意のあるオブジェクトを含むチェックポイントを作成できます。この悪意のあるオブジェクトが`torch.save()`でチェックポイントに書き込まれ、後に`torch.load()`で読み込まれると、モデルの重みが処理される前に攻撃者のペイロードが実行されます。
MLサービスがしばしば高い権限で実行される本番環境では、これによりシステム全体の侵害につながる可能性があります。データ漏洩、バックドアのインストール、ネットワーク内の他のシステムへの侵入などが考えられます。
**NVIDIAによるパッチと推奨事項**
NVIDIAは、Transformers4Recのコミットb7eaea5(PR #802)でこの脆弱性を修正しました。パッチでは、直接的なpickle呼び出しを、承認されたクラスへのデシリアライゼーションを制限するカスタムローダーに置き換えています。新しい実装では、`serialization.py`内の安全な`load()`関数を使用して、復元前にオブジェクトタイプを検証します。
開発者には、同様の問題を防ぐために以下の対策が推奨されています。
* 信頼できないpickleデータを使用しない。
* PyTorchの`weights_only=True`オプションを使用する。
* safetensorsやONNXなどのより安全な形式を採用する。
* モデルの出所チェックを徹底し、チェックポイントに暗号署名を行う。
* モデルの読み込みをサンドボックス化する。
この脆弱性は、ML/AIエコシステムにおける安全なシリアライゼーション標準の緊急の必要性を浮き彫りにし、長年のコミュニティの警告にもかかわらず、pickleベースのワークフローが依然として重大な攻撃ベクトルであることを示しています。
元記事: [NVIDIA Merlin Flaw Enables Remote Code Execution with Root Access](https://gbhackers.com/nvidia-merlin-flaw-enables-remote-code-execution-with-root-access/)