LiteLLMをインストールしたあと、Pythonを起動しただけで、認証情報がただちに盗まれる事態が起きました。10月21日、攻撃者はバージョン1.107.0に悪意あるデータ窃取型マルウェアを仕込みました。被害はPyPIで配布された7つのwheelリリースすべてと、公式のDockerコンテナイメージに及びました。開発チームは緊急のLiteLLMサプライチェーン・インシデント報告で、侵害を認めています。
パス設定ファイルを悪用したサイレント実行
攻撃には巧妙なインストール手法が使われました。攻撃者はsite-packagesディレクトリ内に、cook.pthという不正なファイルを仕込みました。Pythonは初期化のたびに、見つかったパス設定ファイルをすべて自動実行します。そのため、ユーザーのアプリケーションがimportを一度も呼び出さなくても、cook.pyが実行される仕組みでした。
さらに、サイバーセキュリティ企業Upwindのアナリストは、補助的なsitecustomize.pyスクリプトも発見しました。このスクリプトは、任意のコマンドを受け取るための不正なバックグラウンドプロセスを起動します。
広範な認証情報の収集と外部送信
いったん動き出すと、このスパイウェアはシステムのディスクを探索し、機密性の高い認証情報を収集しました。ペイロードは、保存されたブラウザのパスワードやCookie、SSHの暗号鍵を抜き取ります。加えて、GitHub、AWS、Azure、Google Cloudのクラウド向けAPIトークンも盗み出しました。
企業のAIキーを標的に
稼働中のAI環境では、このスクリプトが常駐データベースから、接続先のモデルプロバイダーのキーを直接外部へ送り出しました。マルウェアは収集した認証情報を暗号化したうえで、無許可の外部ドメインであるlitellm.devへ送信しています。
さらにこのマルウェアは、1時間ごとにリモートのリポジトリへ接続し、二次的な永続化を図っていました。この第2段階は最初の発見時点では動作していませんでしたが、Windows環境も、主要な認証情報の窃取の危険にはさらされたままでした。
偽リポジトリのクローンとトークン侵害
意外なことに、不正なコードは公式のプロジェクトリポジトリには一切現れませんでした。攻撃者が用意したのは、ハイフンを挿入して紛らわしくしたタイポスクワッティングのクローン「Berri-AI/litellm」です。攻撃者はプロジェクトのメンテナー3人のGitHub CLIトークンを侵害しました。その結果、ブランチ保護ルールを回避し、不正なビルドを承認したうえで、管理用の監査ログも削除しています。
プロジェクトのエンジニアは、社内ゲートウェイのログからこれらの認証情報が意図せず漏えいしたとみています。具体的には、Claude Codeが、アクセス可能なログに保存された生のレスポンスの中に、CLIの認可トークンを埋め込んでいたと伝えられています。
緊急の復旧と隔離措置
感染したディストリビューションは、PyPI上でおよそ2時間にわたって公開されたままでした。一方、悪意あるDockerコンテナは、メンテナーが取り下げるまでに3時間近く残っていました。幸い、企業のプライベートレジストリは、この間も侵害を受けませんでした。
必須の除染手順
セキュリティ専門家は、Pythonコマンドを実行する前に、悪意あるファイルを手作業で削除するよう勧めています。注意すべき点として、pipコマンドを実行するだけで、休眠中のパススクリプトが意図せず作動する恐れがあります。最後に、管理者は仮想環境を再構築し、クリーンなリリース1.106.2に戻したうえで、システムのシークレットをすべてローテーションする必要があります。
翻訳元: https://meterpreter.org/litellm-supply-chain-attack-pypi/