累計22億回以上インストールされているこのPythonパッケージは、攻撃者にとって広大な攻撃対象領域を提供します。GPUアクセラレーション推論を実行する価値の高いエンタープライズユーザーへの無音アクセスも、その射程に含まれています。
Hugging Face Transformersに深刻な脆弱性が発見されました。この人気のPythonライブラリを使ってAIモデルをテスト・実行しているシステムが、攻撃者に侵害される可能性があります。本脆弱性は、現在も活発にダウンロードされているライブラリバージョンに影響を与えており、攻撃者がHugging Faceプラットフォームに悪意あるモデルを公開するなど、AIサプライチェーンを標的とした攻撃が増加している状況下での発覚となりました。
この脆弱性の悪用には、Hugging Face上のリモートモデル設定ファイルに_attn_implementation_internalという一見無害なパラメータを追加する手法が用いられます。通常、リモートコードの自動実行を防ぐtrust_remote_code=falseフラグも、この攻撃手法によって回避されてしまいます。
「悪意あるフィールドは、アンダースコアを先頭に持つ名前を使用しており、設定ファイルに溢れている内部実装の詳細のように見えます」と、本脆弱性を発見したPluto Securityの研究者はレポートの中で述べています。「実行時の警告も、確認プロンプトも、不審なログエントリも、一切残りません。」
Hugging Face Transformersライブラリは、Hugging Faceでホストされている100万以上の機械学習モデルのバリアントを、ローカルハードウェアやクラウドインスタンス上に展開するためのPython用ツールです。さまざまなタスク向けに事前学習されたモデルのテストや、独自データによるファインチューニングを目的として、多くのエンタープライズ環境やCI/CDパイプラインで活用されています。
Hugging Face TransformersのPyPIパッケージは月間1億4600万回以上ダウンロードされており、累計インストール数は22億回を超えています。また、本プロジェクトはGitHub上でも16万1000以上のスターを獲得しているトップクラスのリポジトリであり、リモートコード実行(RCE)脆弱性がもたらす被害規模は計り知れません。
今回明らかになった未公開の脆弱性はCVE-2026-4372として追跡されており、3月3日にリリースされたTransformers 5.3.0で修正済みです。ただし、8月以降にリリースされた4.56.0以降のすべてのバージョンが影響を受けており、脆弱なバージョンは依然として週700〜800万回ダウンロードされ、週間インストール数の約4分の1を占めています。
カスタム「アテンション」カーネルによるRCE防御の回避
Hugging FaceでホストされているAIモデルにはカスタムPythonコードが含まれる場合があり、モデルと一緒に自動的にダウンロード・実行されると深刻なセキュリティリスクとなります。過去にこの機能が攻撃者に悪用されたことがあり、その対策としてtrust_remote_code:パラメータが設定に追加されました。このパラメータをfalseに設定すると、追加コードが自動実行されないことを開発者に保証する仕組みです。
しかし昨年3月、Hugging Faceはカスタムコンパイル済みアテンションカーネルのホスティングを可能にする「Hub Kernels」という機能を追加しました。これらのカーネルはGPU上でモデルを読み込む際のパフォーマンスを向上させるもので、kernelsという追加パッケージが必要です。
この脆弱性を悪用するには対象マシンにkernelsパッケージがインストールされている必要があり、一見すると制約のように思えるかもしれません。しかし、オプションの依存関係ではあるものの、kernelsパッケージがインストールされているケースは珍しくありません。ローカルでAIモデルを実行するユーザーの多くはGPUアクセラレーションのメリットを享受したいと考え、Transformersを全「extras」パッケージ付きでインストールするためです。
「GPUアクセラレーション推論を扱うユーザー——おそらく最も価値の高い攻撃対象——が、最もインストールしている可能性が高いです」と研究者は述べています。「エンタープライズMLプラットフォームやGPUクラスターは、ハードウェアの活用を最大化するため、すべてのオプション依存関係を一般的にインストールします。」
この脆弱性は、コード内で独立して行われた3つの設計上の決定が組み合わさることで、サイレントRCEリスクを生み出しています。まず、AutoModelForCausalLM.from_pretrained("model-name")でモデル読み込みが呼び出されると、ライブラリはHubからモデルの設定、重み、トークナイザーをダウンロードし、正しいアーキテクチャを組み立て、使用可能なモデルをアプリケーションに返します。
モデルのconfig.jsonファイルを解析するコードはsetattrという関数を使用しており、ファイル内のすべてのキーと値のペアを解析してconfigオブジェクトに読み込みます。しかしこの関数は、ユーザーが設定可能なパラメータと、_文字で始まる内部パラメータを区別しません。内部パラメータはそもそも開発者が操作することを意図されていないため、ユーザーが提供する設定ファイルに含まれるべきではありません。
そのような内部パラメータの一つが_attn_implementation_internalです。これはモデルが使用するアテンション機構の実装——Flash Attention、SDPA、またはデフォルトのeager実装——を制御するために使われます。
さらに、hub_kernels.pyコンポーネントはこのパラメータの値を確認し、/で区切られた2つの文字列というパターンに一致する場合、それをKernels Hubのオーナー/リポジトリ定義と見なします。そのままコードは指定されたリポジトリからカーネルをダウンロードして実行します。
「サンドボックスなし。コード署名なし。整合性検証なし。ユーザーへの確認プロンプトもなし。」と研究者は指摘します。「攻撃者のリポジトリに存在するPythonコードをそのままインポートするだけです。インポート時に自動実行される__init__.pyの内容も含めて。」
フィルタリングされていないsetattr、保護されていない内部属性、サンドボックス化されていないカーネルローダーという3つの独立した問題が組み合わさることで、攻撃の実行は極めて容易になります。具体的には、_attn_implementation_internalをattacker-repo/malicious-kernelに設定した設定ファイルを含む、魅力的なモデルを公開するだけです。
悪意あるAIモデルを介したサプライチェーン攻撃の増加
このような攻撃は珍しいものではありません。悪意あるモデルはHugging Faceに常時アップロードされており、ユーザーを巧みに騙すことがあります。先月は、OpenAIのPrivacy FilterモデルNewリリースに見せかけた悪意あるHugging Faceリポジトリが18時間以内にプラットフォームのトレンド1位に達し、24万4000回ダウンロードされました。そのモデルのコードにはWindows向けのインフォスティーラーマルウェアが含まれていました。
昨年には、研究者がAIモデルの配布に広く使われるフォーマットであるPython Pickleファイルに悪意あるコードを隠す手法を実証しました。
悪意を持って作成されたAIモデルを通じたリモートコード実行を可能にする脆弱性は、今回のTransformersが初めてではありません。先月、セキュリティ企業HiddenLayerの研究者がChromaDBのRCE脆弱性を公表しました。この脆弱性により、認証なしのリモート攻撃者がHugging Faceでホストされたモデル設定から悪意あるコードを実行するようChromaサーバーを誘導できることが明らかになっています。
CiscoのAI研究チームは最近、Model Provenance Kitというオープンソースツールを公開しました。このツールはモデルの重み、トークナイザー、アーキテクチャメタデータのフィンガープリントを使用し、機械学習モデルが主要AIラボを含む20以上の信頼できる提供元の45以上の既知ベースモデルファミリーのいずれかから派生しているかどうかを判定します。
その上でPluto Securityの研究者は、MLフレームワークやライブラリにおけるAIモデルの読み込みおよびconfig逆シリアル化APIを、提供されているセーフフラグに関わらずコード実行の攻撃面として扱うよう組織に警告しています。
具体的には、モデルの読み込みをサンドボックス化し、ホストの認証情報、アウトバウンドネットワークアクセス、広範なファイルシステム権限を持たない監視対象コンテナ内で隔離することが求められます。また、設定ファイルは読み込む前にスキャンし、アンダースコアで始まるフィールドを含む予期しないフィールドが存在しないかを確認するべきです。
Transformersのユーザーは直ちにバージョン5.3.0へアップグレードし、キャッシュ済みまたはダウンロード済みのconfig.jsonファイル内に_attn_implementation_internalが含まれていないかを検索して、標的にされていないかどうかを確認することをお勧めします。