LiteLLM によると、不正な 1.107.0 が北京時間10月21日19時40分ごろ PyPI、Docker Hub、GHCR に公開され、チームは21時32分に把握しました。不正なリリースとイメージはすでに削除されています。LiteLLM のプライベートレジストリからのみイメージを取得しているエンタープライズ環境は影響を受けません。1.107.0 をインストールまたは実行した場合は、その環境からアクセスできた認証情報を漏えいしたものとして扱う必要があります。固定すべきクリーンなバージョンは 1.106.2 です。
不正パッケージの動作
SafeDep の分析によると、1.107.0 の wheel は site-packages に3つのファイルを追加し、そのうち2つはホスト上で Python が起動するたびに実行されます。litellm を import しないプロセスでも同じです。1つは認証情報の窃取プログラム、もう1つは追加のコードをダウンロードして実行できるバックドアです。
SafeDep が挙げる窃取対象は、SSH 鍵、クラウド認証情報(AWS、Azure、gcloud、Kubernetes、Docker)、CI/CD のシークレット、AI コーディングツールのトークン、ブラウザのパスワード、他プロセスの環境変数、そして LiteLLM プロキシのデータベースが設定されていれば、そこに保存された LLM プロバイダーの API キーです。LiteLLM ゲートウェイはチームが使う全プロバイダーのキーを持つことが多く、感染したプロキシ1台からすべてのキーが漏れる可能性があります。ゲートウェイの位置づけについては、ルーターと AI ゲートウェイに関する OpenAI の新しい承認ルールもご覧ください。
確認方法と対処
まず、litellm 1.107.0 をインストールしたマシン、仮想環境、コンテナイメージ、CI ジョブがないか、またインシデント期間中に v1.107.0、latest、main-latest、main-stable のタグが付いた LiteLLM の Docker イメージを取得していないかを確認します。GitHub issue の対処手順には、このパッケージが site-packages に置くファイルとして cook.pth、cook.py、sitecustomize.py が挙げられています。
1.107.0 がインストールされていた場合、issue の対処手順は次のとおりです。
- 影響を受けた環境でいきなり pip install を実行しない。そこで Python を起動すると、pip を含め不正コードが再び実行されます。
- シェルから、影響を受けたすべての site-packages にある cook.pth、cook.py、sitecustomize.py と、そのキャッシュの .pyc ファイルを削除する。
- バックドアが起動した、切り離された Python のバックグラウンドプロセスを停止する。
- litellm 1.106.2 に固定して再インストールする。イメージや仮想環境は一から作り直すほうが望ましいとされています。Docker の場合は v1.106.2 で再デプロイします。
- ホストが外部のインターネットに接続できた場合は、認証情報が盗まれたものとみなし、アクセスできたものをすべてローテーションする。対象は、LiteLLM プロキシのデータベースに保存された全キーとプロキシのマスターキー・仮想キーを含むモデルプロバイダーの API キー、クラウド認証情報とインスタンスロール、SSH 鍵、CI のシークレット、データベースのパスワード、そしてホスト上のあらゆるプロセスの環境変数にあったシークレットです。
LiteLLM 自身はオープンソース版の利用者に対し、1.106.2 か、インシデント前に公開された明示的なバージョンに固定するよう案内しています。最近の開発ツールのインシデントとしては、OpenCode Console のセキュリティインシデントもあります。守る側の話題としては、AI が PHP の重大な脆弱性発見に貢献した件とサイト運営者が確認すべき点もご覧ください。
出典
- LiteLLM security statement on X (https://x.com/LiteLLM/status/2112945728565993864)
- LiteLLM GitHub issue #47826 (https://github.com/BerriAI/litellm/issues/47826)
- SafeDep analysis (https://safedep.io/litellm-pypi-compromise-credential-stealer-backdoor/)
