LiteLLM がバックドア化されました: 今週、AI ツールチェーンを監査してください
TeamPCP は、LiteLLM リリース内に認証情報を盗むマルウェアを同梱し、開発マシンから AWS、GCP、SSH キーを流出させました。 次回の pip インストール前に実行する 5 つのチェック。
2026 年 3 月、TeamPCP と名乗る脅威アクターが、改ざんされた次のリリースを公開しました。
litellm、単一の背後で 100 以上の LLM プロバイダーをラップする Python ライブラリ
OpenAI互換インターフェース。 このリリースには、インストール後のパスに組み込まれたインフォスティーラーが同梱されていました。
走った人は誰でも pip install litellm SSH秘密鍵の引き渡し期間中に、
AWS 認証情報、Azure トークン、GCP サービス アカウント JSON、Docker config.json
ファイルを攻撃者が制御するエンドポイントに送信します。 The Hacker News、Ardan Labs、および Security Boulevard
それぞれが帰属と流出したアーティファクトのリストを確認した。
LiteLLM は曖昧ではありません。 エージェント フレームワーク内、eval をルーティングする CI パイプライン内に配置されます。 データ サイエンティストのラップトップ上の Jupyter ノートブック内のプロバイダー間のトラフィックも保持 有効期間の長いクラウド認証情報。 単一の侵害されたリリースにより、攻撃者にプロバイダーのウォレットが与えられました キー、一連のクラウド ロール、およびこれらのキーをすべてのリポジトリに横方向に移動するための SSH マテリアル 到達できた。
メンテナの PyPI トークンが盗まれるのを防ぐことはできません。 爆発範囲を縮小できる 次の AI ライブラリがヒットしたときのために。 そしてそうなります。 1 台のラップトップでは クロスクラウド事件。 AI 全体にわたって今週実行する価値のある 5 つのチェックを次に示します。 ツールチェーン: LiteLLM、LangChain、LlamaIndex、Ollama ラッパー、Claude SDK、MCP クライアント、およびすべて 運用環境にあるエージェント フレームワーク。
TeamPCPが実際に取ったこと
ペイロードが内部を走行しました setup.py そしてポストインストールフック。 インポートまたはインストール時
開発者のホーム ディレクトリと CI ランナー ファイルシステムから以下を読み取ります。
~/.ssh/id_rsa、id_ed25519、 そしてknown_hosts~/.aws/credentialsそして~/.aws/configプロフィール~/.azure/トークンと認証情報の更新- GCP
application_default_credentials.jsonおよびサービスアカウントのJSONファイル ~/.docker/config.jsonレジストリ認証トークンを含む- で始まる環境変数
AWS_、GCP_、OPENAI_、ANTHROPIC_、GITHUB_
exfil チャネルは、毎週ローテーションされる攻撃者のドメインへのプレーンな HTTPS POST でした。 テイクダウン 数日以内に起こりましたが、その時間枠で十分でした。 漏洩した認証情報を漏洩させることはできません。 チェックに移ります。
チェック 1: 範囲ではなく正確なバージョンをピン留めする
の ^1.14.0 そして ~=1.48 のパターン requirements.txt、
pyproject.toml、 そして package.json 新しいマイナーまたはパッチのリリースを許可する
一晩かけて清潔な環境に戻します。 こうして、3 時間の悪意のあるウィンドウが、
1ヶ月間の暴露。 ロックファイルは再生成されませんでしたが、CI キャッシュは不良ファイルを取り出しました
次のコールド ビルドのバージョン。
正確なバージョンを固定します。 エコシステムがサポートしている場合はハッシュで固定します。
と --require-hashes、pip は SHA-256 が一致しないもののインストールを拒否します。
ロック時に生成したもの。 同じバージョン文字列を持つ侵害されたリリースですが、
tarball ハッシュが異なるとインストールに失敗します。 ペア pip-compile --generate-hashes と
明示的な依存関係の更新時にのみハッシュ ファイルを再生成し、プレーンな更新では決してハッシュ ファイルを再生成しない CI ジョブ
インストールします。
詩のユーザーは、ロックファイルを通じて同じセーフティ ネットを利用できます。 問題は、次のキャレット構文です。
pyproject.toml; 正確なピンに置き換えます。
poetry install --sync ロックファイルにないパッケージを削除し、停止します。
デプロイ間で隠蔽される迷走依存関係。 npm 側の AI ツールの場合は、次を使用します。
npm ci (ない npm install) CI の実行とコミットごとに
package-lock.json。
チェック 2: 認証情報を開発シェルから分離する
開発シェルには、 ~/.aws/credentials 有効期間の長いアクセス キーはロードされています
銃はクラウドの請求書と顧客データに向けられました。 LiteLLM ではこれらの認証情報は必要ありませんでした
その仕事をする。 開発者が一度実行したため、それらはディスク上に保存されていました。 aws configure そして
決して掃除したことがない。
資格情報をディスクから移動します。 それらをオンデマンドでロードし、スコープを短くし、永続的なものを取り消します。 レイヤー:
-
AWS:
aws sso loginセッション時間の上限は 8 ~ 12 です 何時間も。 消去~/.aws/credentials。 すべてが通過するはずです~/.aws/sso自動的に期限切れになるキャッシュ。 -
GCP:
gcloud auth application-default loginと--lifetime=43200。 ラップトップ上に存在する長期間有効なサービス アカウント JSON を取り消します。 CI から Workload Identity フェデレーションを使用します。 -
アズール:
az loginMFA を強制する条件付きアクセス。 殺す 12 時間より古い更新トークンが保存されています。 -
API キー: 1Password、Vault、または Doppler に保管してください。 プロセス開始時に注入
経由
op runまたはvault read。 決してエクスポートしないでください~/.zshrc。
TeamPCP が期限切れの STS セッション トークンのみを検出した場合、爆発範囲は数時間で停止します。 アクセスの。 このインシデントは、有効期間の長い鍵がディスク上に平文で保存され、いつでも利用できる状態になっていたために発生しました。 読んでください。
チェック 3: サンドボックスを使用してすべてのインストールをスキャンする
新しい AI ライブラリまたは既存の AI ライブラリへのアップグレードを信頼する前に、それを適切な場所にインストールしてください。 資格情報に到達できません。 機能が削除された使い捨ての Docker コンテナ ネットワーク分離により、インストール時のコードが何か不審な動作をしているかどうかがわかります。
2 段階のパターンが重要です。 ステップ 1 では、PyPI にアクセスするためにネットワーク アクセスが必要なので、インストール後の
スクリプトは依然として漏洩する可能性があります。 シークレットと DNS エグレス ルールを持たないクリーンな VM でステップ 1 を実行します。
すべての送信ホスト名をログに記録します。 ステップ 2 は次のように実行されます --network=none; もしあなたの
ライブラリはインポート時に自宅に電話しようとしますが、インポートは失敗します。
より良い方法: Firecracker や orb macOSでも同じ
Docker の共有カーネルを使用しない形状。 JavaScript の場合、Deno の権限モデルにより、
コンテナなしでも同じ分離: deno run --allow-net=api.openai.com,api.anthropic.com
agent.ts。
チェック 4: ローテーションする前にブレークエクスポージャを確認する
キーのリリースが間違っているマシン上にキーが置かれている場合は、キーを回転させてください。 議論はありません。 しかしまた これらのキーに関連付けられた ID が既知のダンプにすでに表示されているかどうかを確認します。 ラップトップ 先月侵害された LiteLLM リリースを実行したのは、所有者がパスワードを再利用したラップトップである可能性があります 2019 Collection1 ダンプより。 どちらの問題も修正する必要があり、チェック 4 でどのアカウントがわかるかがわかります。 最も緊急の対応が必要です。
ボトイさん /v1/breach/check エンドポイントは、ほとんどのエンタープライズ IAM と同じデータ ソースをラップします
ツールはシートごとに料金が発生し、無料枠では費用はかかりません。
すべてのサービスアカウントの電子メール、すべてのマシンユーザーの電子メール、およびラップトップを所有するすべての人間の開発者を追跡します。
窓に触れた。 あらゆるメール password_exposed: true 回転と
次に進む前に MFA を強制的にリセットしてください。 出力をインシデント対応ランブックにパイプします。 1つ
アイデンティティごとのカール、50 人のエンジニアリング組織の場合は 10 分。
チェック 5: アウトバウンド下りに注意する
インストール後のマルウェアは、何らかの方法で電話をかけなければなりません。 ほとんどの開発者は最後にいつだったか思い出せない 彼らはラップトップが実際に何を話しているのかを調べました。 それがTeamPCPが期待したギャップです。
疑わしいマシン上では、単一のコマンドですべての Python および Node プロセスが何であるかを知ることができます。 に接続されています:
フリート レベルで、すべての開発者のラップトップと CI ランナーをゼロトラスト下り経由にプッシュします。 許可リスト。 Cloudflare WARP、Tailscale ACL、Little Snitch はすべて同じ形状を提供します。 実際に必要なホスト名をリストし、残りをブロックし、ブロックについては警告します。
これほど厳しい許可リストは、最初の 1 週間は厳しいと感じます。 2 週目までに表示されるアラートは次のとおりです。 real: 目的地に到達しようとしている図書館。 まさにそれが、 TeamPCP のインフォスティーラーがインストール時にトリップした可能性があることを示します。
5つのチェックの概要
| チェック | 努力 | 爆発半径の減少 |
|---|---|---|
| ハッシュを使用して正確なバージョンを固定する | 1 つのリポジトリには 1 時間。 モノリポジトリに 1 日 | 侵害されたリリースのサイレントロールアウトを停止します |
| 資格情報を有効期間の短いセッションに移動する | 開発者あたり 1 回につき 2 ~ 4 時間 | アクセスの上限を数か月ではなく 8 ~ 12 時間に制限 |
| インストールごとにサンドボックス化 | 新しいライブラリの評価ごとに 15 分 | インストール時のコードは実際のシークレットや本番ネットワークを参照できません |
| 公開されたキーに関連付けられた侵害チェック ID | 50 人の組織の場合は 10 分 | 既知の暴露によるローテーションと MFA リセットを優先します。 |
| 開発およびCIに下り許可リストを強制する | 設定に 1 日、継続的なメンテナンス | 盗まれたデータを流出させるテレフォンホームチャネルをブロックします |
重要なポイント
- 範囲ではなく、正確なバージョンをピン留めします。 ロックファイル内のキャレットまたはチルダは約束です 明日のリリースは安全だということ。 TeamPCP はその約束を破りました。
- クラウド認証情報は開発シェルには属しません。 有効期間が短い SSO セッションが原因で 侵害ではなく、ローテーション イベントに認証情報が盗まれました。
-
サンドボックスは信頼する前にインストールされます。 キャップがドロップされた Docker と
--network=none15 分のコストでインストール時のマルウェアを捕捉するには十分です。 -
回転と違反チェック。 マシンが間違ったリリースに触れた場合は、次の間隔でローテーションします。
識別情報を確認し、各メールを実行する
/v1/breach/checkそれらのものを見つけるために 緊急の MFA リセットが必要です。 - 出力許可リストはテレフォンホームをキャッチします。 ラップトップと CI のゼロトラスト ルールは、 騒々しい、ログに記録されたブロック可能なイベントへのサイレント侵入。
Botoi は、侵害チェック、ハッシュ検証、SSL 検査、HTTP 用の HTTP エンドポイントを提供します。 ヘッダー監査と npm メタデータ検索。 サプライチェーンを監査するために必要な基本要素 さらに別のライブラリをインストールせずにインシデントが発生しました。 API キー 1 つ、無料枠では 5 リクエスト/分、なし フックを取り付けます。 閲覧する インタラクティブドキュメント または配線します MCPサーバー に クロード コードまたはカーソルを使用して、作業中にエディターから同じエンドポイントを呼び出します。 チェックリスト。
FAQ
- どの LiteLLM バージョンが影響を受けましたか? クリーンであることを確認するにはどうすればよいですか?
- 悪意のあるリリースは 2026 年 3 月に表面化し、世界中の CI キャッシュや開発者のラップトップに到達するのに十分な期間 PyPI 上に留まりました。 pip show litellm を実行してインストールされているバージョンを出力し、そのバージョンを相互参照して、LiteLLM セキュリティ アドバイザリおよび PyPI リリース履歴に対してタイムスタンプをアップロードします。 ウィンドウ中にマシンが pip install litellm を実行した場合は、そのマシンを侵害されたものとして扱います。そのシェル内にあるすべてのクラウド キーをローテーションし、クリーンなイメージから再デプロイし、ローテーションより前の日付の ~/.aws、~/.config/gcloud、および ~/.ssh トークンを消去します。
- これは PyPI の障害ですか、それとも LiteLLM の障害ですか?
- 両方です、そしてそれが教訓です。 LiteLLM は、実際のメンテナがいる正規のライブラリです。 攻撃者はタイポスクワットではなく、侵害されたリリース チャネルを利用しました。 PyPI は依然として、すべてのプロジェクトのトークンに署名付きリリースや必須の 2FA を要求していないため、盗まれたアップロード資格情報は数分で出荷されたマルウェアに変わります。 Sigstore およびメンテナー スコープのトークンを介したパッケージ署名により、アップロード時に攻撃が遮断されます。
- すべての AWS キーをローテーションする必要がありますか、それとも影響を受けるマシンにタッチされたキーのみをローテーションする必要がありますか?
- 全部回転させます。 攻撃者は、有効期間の長いキーを 1 つ入手した瞬間に、STS、役割の引き受けチェーン、およびクロスアカウントの信頼ポリシーを経由してピボットします。 不正なリリースを検出したラップトップまたは CI ランナーのメモリまたはディスク上に IAM 認証情報があった場合は、その ID から到達可能なプリンシパル グラフ全体をホットとして扱います。 GCP サービス アカウントと Azure サービス プリンシパルについても同じロジックです。
- Bun または Deno は JavaScript AI ツールに関してこれを変更しますか?
- あまり多くはありませんが、少しです。 Deno は明示的なアクセス許可 (--allow-net、--allow-env) を使用してコードを実行するため、ファイルシステムへのアクセスを許可しない限り、突然 ~/.aws/credentials を読み取ろうとするライブラリは拒否されます。 Bun には --frozen-lockfile フラグがあり、最近のリリースではデフォルトでインストール スクリプトを実行しません。 どちらも npm のデフォルトよりも改善されていますが、どちらも、アプリケーション コードが実行時に資格情報を渡したらライブラリによるデータの漏洩を阻止するものではありません。
- AI ツールチェーンのサプライ チェーンのリスクは、通常の npm や PyPI のリスクと何が違うのでしょうか?
- AI ライブラリは異常に秘密に近いものです。 LiteLLM のような LLM ラッパーには、1 つの env ファイルに 10 個以上のプロバイダーの API キーが必要です。 LangChain エージェントは AWS 認証情報を読み取るため、S3 をツールとして呼び出すことができます。 PR を開くように要求したため、Claude SDK は GITHUB_TOKEN にタッチします。 インストールごとの爆発半径は、一般的なユーティリティ ライブラリよりも大きくなります。 侵害された 1 つのリリースにより、プロバイダー キーのウォレット、クラウド認証情報、およびソース コード アクセスが 1 回で取得されます。
botoiで開発を始めよう
150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。