NVIDIA Merlinの脆弱性により、ルート権限でのリモートコード実行が可能に

NVIDIAのMerlin Transformers4Recライブラリに重大な脆弱性が発見され、攻撃者がルート権限でリモートコード実行を達成できることが明らかになりました。この脆弱性は、Trend Micro Zero Day Initiative (ZDI) の脅威ハンティングチームによって発見され、モデルのチェックポイント読み込み機能における安全でないデシリアライゼーションに起因します。

CVE-2025-23298として追跡されているこの脆弱性は、Pythonのpickleシリアライゼーションに依存する機械学習フレームワークにおけるセキュリティ上の課題が依然として存在することを浮き彫りにしています。

### 危険なデシリアライゼーションの発見

ZDIの研究者は、サプライチェーンリスクのためにML/AIフレームワークを監査する中で、モデルがどのように永続化され、読み込まれるかに注目しました。Transformers4Recの`load_model_trainer_states_from_checkpoint`関数では、PyTorchの`torch.load()`がサンドボックス化やクラス制限なしで使用されていることが判明しました。

この脆弱性の詳細を以下に示します。

* **CVE:** CVE-2025-23298
* **影響を受ける製品:** NVIDIA Merlin Transformers4Rec
* **影響:** ルート権限でのリモートコード実行
* **CVSS 3.1スコア:** 9.8

`torch.load()`はPythonのpickleプロトコルを使用しているため、デシリアライゼーション中に任意のコードを実行する可能性があります。ZDIは、細工されたチェックポイントファイルを読み込むことで、モデルの状態を復元する際にルートレベルのコマンドが即座にトリガーされることを確認しました。

このリスクを実証するために、研究チームは、`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ベースのワークフローが依然として重要な攻撃ベクトルであることを示しています。

元記事へのリンク: [https://gbhackers.com/nvidia-merlin-flaw-enables-remote-code-execution-with-root-access/](https://gbhackers.com/nvidia-merlin-flaw-enables-remote-code-execution-with-root-access/)