LiteLLMプロジェクトは、大規模言語モデル(LLM)プロバイダー向けの人気のPythonインターフェースおよびプロキシですが、最近、バージョン1.107.0を含むサプライチェーン攻撃の標的となりました。セキュリティ研究者は、アップストリームのGitHubリポジトリはクリーンな状態を保っていた一方で、PyPI上で配布されている「wheels」(事前コンパイルされたPythonパッケージ)には、`cook.pth`、`cook.py`、および`sitecustomize.py`という3つの悪意のあるファイルが含まれていることを特定しました。これらのファイルは、アプリケーションが実際にLiteLLMライブラリをインポートしているかどうかにかかわらず、ホスト上でPythonプロセスが開始されるたびに自動的に実行されるように設計されていました。

PyPI上のLiteLLM 1.107.0バージョンの侵害を示すバナーグラフィック。
セキュリティ研究者は、LiteLLMライブラリの事前コンパイルされたwheelsに悪意のあるファイルが注入されたサプライチェーン攻撃を特定しました。safedep.io

この画像は、バージョン1.107.0を含むLiteLLMサプライチェーン攻撃の主要な視覚資料です。

この侵害は主に2つのメカニズムを通じて機能していました。第一に、`cook.pth`は起動フックとして機能し、`cook.py`をインポートしました。このファイルには「privcollect」と名付けられた認証情報窃取ツールが含まれていました。この窃取ツールは、SSHキー、クラウド資格情報(AWS、Azure、GCP)、ブラウザのパスワード、さらにはLiteLLMプロキシデータベースに保存されているLLMプロバイダーのAPIキーを含む幅広い機密データを標的にしていました。ツールはこれらのデータを暗号化した上で、リモートサーバーに送信しました。第二に、`sitecustomize.py`はバックグラウンドデーモンを開始し、1時間ごとにリモートのGitHubリポジトリをチェックして新しいドメインがないか確認しました。新しいドメインが見つかった場合、デーモンは第2段階のペイロードをダウンロードして実行し、攻撃者に持続的なリモートコード実行(RCE)チャネルを提供しました。

ビルド成果物の分析から、この注入は修正されたZIPファイルを単純に手動アップロードしたことによってではなく、wheelの構築プロセス中に発生したことが示唆されています。ソース配布物内の`pyproject.toml`ファイルには、ビルドツールであるMaturinに対して最終的なパッケージに`cook`という名前のフォルダを含めるよう指示する特定の命令(`data = "cook"`)が含まれていました。このフォルダとその内容は公開のGitリポジトリには存在しなかったため、悪意のあるコードはコンパイルされたwheelをダウンロードしたユーザーにのみ表示されました。研究者は、悪意のあるwheelsがプロジェクトの標準的なビルドパイプラインの出力と一致していたことから、この攻撃は侵害されたプライベートリリースパイプライン、盗まれたメンテナークレデンシャル、または侵害されたプライベートブランチに起因した可能性が高いと考えています。PyPIはすでに影響を受けたリリースを削除しており、ユーザーはバージョンを1.106.2以前に固定することが推奨されています。