ルーチンの依存関係インストールが、AIエコシステムにおける最も深刻なサプライチェーン事故の一つを引き起こしました。月間ダウンロードがおよそ9,700万件にのぼるAIゲートウェイであるLiteLLMの改ざんされたリリースにより、開発者のシステムから機密クレデンシャルを静かに抜き取る悪意あるコードが混入しました。この攻撃は明示的な操作を必要としませんでした。問題のあるパッケージをインストールするだけで、データの持ち出しが始まってしまったのです。
この件が重要なのは、「どのように起きたのか」「何が露呈したのか」です。侵害はソフトウェアのサプライチェーン上流から始まり、CI/CDパイプラインや依存関係システムに対する信頼を悪用しました。攻撃者は利用者を直接狙ったわけではありません。たとえ適切にセキュリティ対策された環境であっても、通常の開発手順の中で影響を受けました。
懸念の規模は、Andrej Karpathyさん(Tesla AIの元ディレクター、OpenAIの元研究科学者)が、サプライチェーン攻撃がどれほど危険になっているかを指摘し、Elon Muskも慎重さの必要性を強調する発言をしたことで、より明確になりました。

source: https://x.com/karpathy/status/2036487306585268612?s=20
これは、現代のAIインフラがどのように構築され、どこで信頼されているかに関する、より深い問題を示しています。本記事では、何が起きたのか、攻撃がどのように展開したのか、そして今後より安全なAIシステムを構築するうえでそれが何を意味するのかを見ていきます。
インシデント概要:範囲、タイムライン、侵入口
問題は一般公開の数日前に始まりました。3月19日、攻撃者グループTeamPCPが、TrivyのGitHub ActionでGitタグを変更し、認証情報の収集(クレデンシャルハーベスタ)を持つ悪意あるビルドを指すようにしました。
Trivyは、LiteLLMを含む多くのCI/CDパイプラインの奥深くで動いています。それは静かですが効果的な侵入口となりました。3月23日には、Checkmarx KICSとドメインmodels.litellm.cloudでも同様のパターンが見られ、本番の出来事の直前に登録が行われました。
3月24日10:39(UTC)に、LiteLLMのCI/CDパイプラインはバージョン固定(ピン留め)を行わず、侵害されたTrivyスキャナを実行しました。この欠落により、GitHub Actionsの環境にあるPyPI公開トークンが露出しました。数時間のうちに、2つの悪意あるバージョンがリリースされ、約16:00(UTC)まで利用可能な状態のままでした。
-
バージョン 1.82.7:悪意あるコードが
proxy_server.pyに配置され、インポート時に発火 - バージョン 1.82.8:すべてのPython起動時に実行される.pthファイル。インポートは不要
pip install litellm
このような単純なインストールでは、SSHキー、クラウドのクレデンシャル、APIキーなどの機密データを取り込む可能性があります。データは暗号化され、静かに送信されました。侵害が明るみに出たのは、攻撃者のコードのバグによってシステムがクラッシュし、推移的な依存関係を通じて隠れたままだったはずの活動が露出した後のことでした。
攻撃が信頼されたシステムを通じて移動した方法
攻撃はLiteLLMの外側で始まり、信頼されたシステムを経由して開発者に到達しました。
- 攻撃者がTrivyのGitHub Actionを変更し、悪意あるバージョンを指すようにした
- LiteLLMのCI CDパイプラインが、特定のバージョンを固定せずにそれを使用した
- スキャナがパイプラインからPyPI公開トークンを取得した
- 攻撃者がこのアクセスを使って、悪意あるLiteLLMのバージョンをリリースした
- 開発者がパッケージをインストールまたは更新し、侵害されたコードを受け取った
各ステップは信頼に依存していました。パイプラインはスキャナに依存し、開発者はパッケージの提供元に依存していました。各ステップの時点では、何も不自然なことは見えませんでした。
攻撃は、依存関係を介した間接的なインストールを含む、日常的なワークフローを通じて広がりました。多くのシステムがさらされ、開発者は気づかないままでした。これは明確な課題を示しています。リスクはアプリケーションコードを超えており、それを支えるツールやシステムにも及びます。
侵害の本当の影響を理解する
この攻撃の影響は深刻でした。単なるインストールによって、開発者の各システム全体にわたる機密データへのアクセスが可能になったのです。
攻撃者は、SSHキー、クラウドのクレデンシャル、Kubernetesのシークレット、APIキー、CI CDトークン、データベースのパスワードにアクセスできました。シェルの履歴、gitのクレデンシャル、クリプトウォレットも露出しました。
そのデータは、その後暗号化されて外部ドメインへ送信されました。処理はバックグラウンドで静かに実行され、ユーザーに明確なシグナルはありませんでした。Kubernetesへのアクセスが存在していれば、攻撃はさらに広がります。クラスタのシークレットを読み取り、システム内でアクセスを維持するための特権付きワークロードを作成できてしまったのです。
このレベルのアクセスは、単一のアプリケーションにとどまりません。環境をまたいだインフラの完全な制御への扉を開きます。AIシステムは、このリスクをさらに増幅します。LiteLLMのようなツールは、複数のプロバイダーのキーとリクエストを集約し、単一のレイヤーへルーティングします。このレイヤーが露出すると、接続されたサービス全体に影響が波及します。
これが現代のAIシステムについて明らかにすること
この出来事は、現代のAIシステムがどのように構築され、リスクがどこに入り込むのかについて、重要なパターンを浮き彫りにしています。
- 深い依存関係の連鎖:現代のAIスタックは、複数の外部パッケージを、互いの上に積み重ねることで構成されています。依存関係の多くは間接的であるため追跡しにくくなります。ひとつの弱いリンクが、システム全体に影響し得ます。
- レイヤーをまたいだ信頼:CI CDパイプラインは外部ツールを信頼します。ビルドシステムの依存関係も信頼します。開発者はパッケージのレジストリを信頼します。それぞれのレイヤーは次のレイヤーに依存しており、攻撃者がステップごとにその連鎖へ入り込む余地を作ってしまいます。
- 中央集権型ゲートウェイ設計:LiteLLMのようなAIゲートウェイは、複数のプロバイダーからキーを収集し、すべてのリクエストを単一のレイヤーに通します。利便性は向上しますが、リスクも増えます。このレイヤーでの露出は、接続されたすべてのサービスに影響します。
- 可視性の限定:チームは、パイプライン内で何が実行されているのか、どの依存関係が間接的に取り込まれているのかについて、明確な見通しを欠いていることがよくあります。これにより早期検知が難しくなり、対応が遅れます。
- セキュリティ範囲のギャップ:セキュリティ対策はしばしばアプリケーションコードに集中します。パイプライン、ツール、依存関係といった支えるシステムは、同等のリスクを抱えているにもかかわらず、あまり注目されません。
現代のAIアーキテクチャに組み込まれたリスク
これまでのポイントは、ギャップを示しています。深い依存関係の連鎖、システムをまたいだ層の厚い信頼、集中的なゲートウェイ、そして限られた可視性は、AIインフラ全体におけるリスクを高めます。
APIルーティングやキー処理のような中核機能は、多くの場合、大規模な依存関係の連鎖に依存しています。これらの層が増えるほど、露出(攻撃面へのさらされ方)が高まります。速度を支えるのと同じ構造が、同時に侵害のための侵入口も生み出します。これに対処するには、依存への露出を減らすこと、重要コンポーネントを分離すること、そして実行環境に対するより厳密な統制を維持することを含む、アーキテクチャ上の変更が必要です。
AIゲートウェイは重要な層に位置し、トラフィックの処理、キーの管理、プロバイダへの接続を行います。そのため、その設計はシステムのリスクと直接結びつきます。
Bifrostで低露出のAIインフラを構築する
現時点で選択肢を検討しているチームにとっての焦点は、「ゲートウェイが、侵害された依存関係がもたらす影響をどの程度抑えられるか」です。これは、システムがどのように設計され、そこからどこで統制が維持されているかに依存します。
Bifrost は、単一のインターフェースで20以上のモデルプロバイダにまたがってリクエストをルーティングし管理するオープンソースのAIゲートウェイです。キー、トラフィック、アクセスはあなたの管理下に留まります。
その設計は、アーキテクチャの層において別の道をたどります。PyPIの攻撃対象領域は完全に排除されています。Goで組み込まれており、Bifrostは単一のバイナリまたはコンテナとして動作します。これによりpipのインストールが不要になり、ゲートウェイ内部にPythonランタイムが入ることを回避でき、さらに、インストール中に改変され得る依存関係の連鎖を排除します。
鍵の管理は、HashiCorp Vault、AWS Secrets Manager、GCP、Azureのようなシステムとの直接連携によって処理されるため、統制はユーザーの環境の中に維持されます。そこではシークレットが管理ストレージに保管され、アクセスは制御され、監査の可視性も明確です。
比較概要:LiteLLM vs. Bifrost
リスク、統制、デプロイの主要な領域にわたって、両者のアプローチを並べて見ると、その違いはより明確になります。
| カテゴリ | LiteLLM | Bifrost |
|---|---|---|
| 言語 | Python(PyPI) | Go(バイナリ/Docker) |
| サプライチェーンへの露出 | 高い | 排除(pipの依存なし) |
| 資格情報の保管 | 環境/configベース | Vault連携 |
| デプロイモデル | アプリケーション層 | VPC内で分離 |
| 監査機能 | 限定的 | 不変(immutable)、SIEM対応 |
| 移行の手間 | — | 1行の設定変更 |
| パフォーマンス | — | スケール時のオーバーヘッドは約11µs |
| 互換性 | ネイティブ | LiteLLMと完全互換 |
最後に
LiteLLMのインシデントが残す学びは重要です。信頼、依存関係、ソフトウェアのサプライチェーンといった「層」に基づいて構築されたシステムは、想定以上の速さでリスクが拡散していきます。AIゲートウェイはこのセットアップの中心にあり、その設計上の選択が全体のセキュリティにとって極めて重要になります。
これは、これらのシステムがどのように構造化されているかを見直すタイミングです。依存への露出を減らし、重要コンポーネントを分離し、そして自分たちの環境の中で統制を維持することで、問題がサプライチェーン全体にどこまで広がり得るかを制限できます。
Bifrost はこの方向性に沿っています。設計によって依存への露出を減らし、資格情報は管理されたシステム内に保持し、管理された環境で動作させることで、同様の攻撃の拡散を抑えるのに役立ちます。このアプローチがどのように適用できるかを確認するには、Bifrostのドキュメントをご覧ください。
あなたのAIスタックにある各依存関係が、何にアクセスできるのかを把握できていないのであれば、まず最初にそれを修正すべきです。




![[Boost]](/_next/image?url=https%3A%2F%2Fmedia2.dev.to%2Fdynamic%2Fimage%2Fwidth%3D800%252Cheight%3D%252Cfit%3Dscale-down%252Cgravity%3Dauto%252Cformat%3Dauto%2Fhttps%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Fuser%252Fprofile_image%252F3618325%252F470cf6d0-e54c-4ddf-8d83-e3db9f829f2b.jpg&w=3840&q=75)
