LiteLLM 1.107.0 の侵害:ビルドパイプライン経由で認証情報窃取ツールを注入
PyPI上の悪意あるLiteLLMリリースが、ビルド設定の改変により認証情報窃取ツールとバックドアをインストールし、すべての主要なオペレーティングシステムに影響を与えました。
英語の原文から自動翻訳されました。
2026年10月21日、セキュリティ研究者は、Python Package Index (PyPI) で公開された LiteLLM バージョン 1.107.0 に、認証情報窃取ツールとリモートコード実行バックドアが含まれていることを特定しました。この侵害されたパッケージは、インストール時に Python の site-packages ディレクトリへ悪意のあるファイルを直接注入することで、Linux、macOS、Windows の各環境に影響を与えました。PyPI はその後このリリースを削除しましたが、本件はソフトウェアサプライチェーンの完全性における重大なリスクを浮き彫りにしています。
何が起きたか
この攻撃は、大規模言語モデル(LLM)統合用の人気ライブラリである LiteLLM のビルドプロセスを狙ったものでした。開発者が pip を使用してバージョン 1.107.0 をインストールすると、cook.pth、cook.py、sitecustomize.py という3つの特定のファイルが site-packages フォルダに配置されました。通常のマルウェアが実行のために明示的なインポート文を必要とするのに対し、これらのファイルはホストマシン上で任意の Python プロセスが起動するたびに自動的に実行されました。これは、LiteLLM を直接使用していないアプリケーションであっても、同じ Python 環境を共有していれば、悪意のあるコードがトリガーされる可能性があることを意味します。
GitHub 上のアップストリームソースコードリポジトリには、これらの悪意のあるファイルは含まれていませんでした。フォレンジック分析により、バージョン 1.107.0 のソースディストリビューション(sdist)には、data = "cook" という行が挿入された修正済みの pyproject.toml ファイルが含まれていたことが判明しました。この指示により、ビルドツールである maturin は、隠しフォルダ cook/ を最終的な wheel パッケージにコピーするよう動作しました。sdist 自体には cook/ フォルダが含まれていなかったため、この注入は PyPI 経由で配布されるコンパイル済みバイナリ wheel でのみ確認可能でした。バージョン 1.106.2、1.107.0rc1、1.107.0rc2 および関連パッケージの litellm-proxy-extras と litellm-enterprise は、クリーンであることが確認されています。
仕組み
悪意のあるペイロードは、Python の起動挙動によって引き起こされる2つの主要なメカニズムを通じて動作しました。まず、cook.pth ファイルには import cook というコマンドが含まれていました。Python は起動時、site-packages 内の .pth ファイルに見つかったインポート文を自動的に実行します。これにより、IDE、CI パイプライン、バックグラウンドサービスなど、あらゆる Python プロセスで cook.py が実行されました。このスクリプトは SSH キー、クラウド認証情報、CI/CD シークレット、ブラウザパスワード、LLM プロバイダーのトークンなどの機密データを収集し、これを暗号化して攻撃者が管理するドメイン www.litellm[.]dev へ外部送信しました。
次に、sitecustomize.py ファイルは永続的なバックドアを確立しました。このスクリプトは、毎時間リモートの GitHub ファイルを確認してサーバーアドレスを取得するバックグラウンドデーモンを起動しました。指示を受信すると、デーモンはそのサーバーから追加のコードをダウンロードして実行しました。攻撃者は base64 エンコーディングと zlib 圧縮を用いて cook.py 内のコードを難読化し、約 61 KB の Python コードを単一の実行行にラップすることで、単純な静的解析を回避していました。
フォレンジック証拠は、侵害が公開の GitHub Actions 実行ではなく、メンテナーのプライベートリリースパイプライン内で発生したことを示唆しています。コンパイル済み wheel のタイムスタンプは、macOS、Linux、Windows 向けの個別ネイティブビルドを示しており、ローカルまたはプライベート CI 環境でのビルドと一致します。PyPI 上での来歴証明(provenance attestations)の欠如や、git タグとソースディストリビューション間の不一致もまた、攻撃者がビルドシステムに入る前にソースコードを変更した可能性(おそらく侵害された認証情報やプライベートブランチを使用)を支持しています。
重要な詳細
- 影響を受けるバージョン: PyPI 上の LiteLLM 1.107.0 のみが侵害されました。以前のバージョンおよびリリース候補版は安全です。
- 注入方法: 修正された
pyproject.tomlファイルが、maturin ビルドツールに対して wheel に悪意のあるcook/ディレクトリを含めるよう指示しました。 - 永続性: マルウェアは、任意の Python プロセス起動時に自動実行されるよう
cook.pthとsitecustomize.pyを使用しました。 - データ窃盗: スティーラーは SSH キー、クラウド認証情報、AI トークン、ブラウザパスワードを対象とし、それらを
www.litellm[.]devへ送信しました。 - ソースの不一致: git タグ
v1.107.0はバージョン 1.108.0 のコミットを指していましたが、sdist はバージョンを戻しペイロードを追加するための手動編集が行われた後のコミットと一致していました。 - プラットフォームへの影響: すべての7種類の wheel バリアント(Linux、macOS、Windows)が悪意のあるファイルを含んでおり、クロスプラットフォーム感染を保証していました。
なぜ重要か
本件は、GitHub などの公開リポジトリでソースコードを検証するだけでは、サプライチェーンのセキュリティを確保するには不十分であることを実証しています。攻撃者はビルドプロセスを傍受したり、ソースがタグ付けされた後かつ公開前のアーティファクトを改変したりすることが可能です。エンジニアリングチームにとって、これはリポジトリの履歴のみを根拠にパッケージを信頼することが危険であることを意味します。.pth ファイルを使用して明示的なインポートなしにコード実行を実現する方法は、アプリケーションコード内の危険な関数呼び出しを探す多くの標準的なセキュリティチェックを回避します。
さらに、PyPI 上での来歴証明の欠如により、コンパイル済み wheel の由来を即座に検証することが困難でした。ビルドされたアーティファクトを特定の検証済みビルドプロセスにリンクする暗号学的証明がない場合、防御側は反応的なフォレンジック分析に頼らざるを得ません。この遅延により、悪意のあるパッケージがより長く流通し続けることになり、依存関係の更新を自動化している組織における露出期間が増大します。
対応策
- どの環境にも存在する場合、LiteLLM バージョン 1.107.0 を直ちにアンインストールしてください:
pip uninstall litellm==1.107.0。 - 侵害されたバージョンをインストールした可能性のあるマシンに保存されているすべての認証情報、API キー、シークレットをローテーション(更新)してください。
- Python の
site-packagesディレクトリにcook.pth、cook.py、sitecustomize.pyが存在するか確認してください。 - 検証済みのパッチがリリースされるまで、1.106.2 や 1.107.0rc2 などの既知の良いバージョンに依存関係をピン留めしてください。
- 利用可能な場合は依存関係の来歴チェックを有効にし、アテステーションメタデータを提供するパッケージを優先してください。
www.litellm[.]devへのアウトバウンド接続や異常なデータ外部送信パターンについてネットワークログを監視してください。



