概要
- litellm==1.82.8 のPyPIホイールパッケージに 悪意ある.pthファイル が含まれる
- Python起動時に 資格情報窃取スクリプト が自動実行される
- 多様な機密情報 を収集し、外部サーバーへ送信
- 全環境(開発・CI/CD・本番) が影響対象
- 即時対応・認証情報のローテーション が推奨
litellm==1.82.8におけるサプライチェーン攻撃の概要
-
PyPI公開の litellm==1.82.8 ホイールパッケージに、 litellm_init.pth (34,628バイト)が含まれる
-
.pthファイル はPythonインタープリタ起動時に自動実行され、 import litellm は不要
-
RECORDファイル に悪意ある.pthファイルが明記されている
-
pip download litellm==1.82.8 --no-deps で再現可能
- litellm_init.pth 内に次のような記述
import os, subprocess, sys; subprocess.Popen([sys.executable, "-c", "import base64; exec(base64.b64decode('...'))"])
- litellm_init.pth 内に次のような記述
悪意ある挙動の詳細解析
-
ペイロードは二重base64エンコード で秘匿化
-
デコード後の動作は以下の通り
-
ステージ1: 情報収集
- システム情報取得(hostname, whoami, uname -a, ip addr, ip route)
- 環境変数(printenv):APIキーやシークレット含む
- SSH鍵・設定ファイル(~/.ssh/各種ファイル)
- Git認証情報(~/.gitconfig, ~/.git-credentials)
- AWS認証情報(~/.aws/credentials, IMDSトークン取得)
- Kubernetesシークレット(~/.kube/config, /etc/kubernetes/各種)
- GCP, Azure, Docker, 各種パッケージマネージャ設定ファイル
- シェル履歴(~/.bash_history 等)
- 仮想通貨ウォレット・SSL/TLS秘密鍵・CI/CDシークレット
- データベース認証情報・Webhook URL(Slack, Discord等)
-
ステージ2: 暗号化と外部送信
- 収集データを一時ファイルに保存
- openssl randでランダム32バイトの AES-256セッションキー 生成
- openssl encでデータをAES-256-CBC暗号化
- RSA公開鍵(ハードコード済み4096bit) でAESキーを暗号化
- 2つのファイルを tpcp.tar.gz にまとめる
- curlでhttps://models.litellm.cloud/ へPOST送信(攻撃者管理ドメイン)
-
技術的特徴・ステルス性
- .pthファイル による自動実行:import不要、site-packages配置のみで発動
- 二重base64エンコード でソースコードgrepを回避
- 公式と異なるドメイン (litellm.cloud)へのデータ送信
- RSA公開鍵 (冒頭64文字:MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvahaZDo8mucujrT15ry+...)
影響範囲
- litellm==1.82.8 をpip経由でインストールした全環境
- ローカル開発マシン
- CI/CDパイプライン
- Dockerコンテナ
- 本番サーバー
- 全ての環境変数、SSH鍵、クラウド認証情報等が漏洩
対応・推奨アクション
- PyPI :litellm 1.82.8の即時削除・yank推奨
- 利用者 :
- site-packages内に litellm_init.pth が存在するか確認
- litellm 1.82.8インストール済みシステムの 全認証情報をローテーション
- BerriAI :PyPI公開権限・CI/CDパイプラインの監査推奨
発見・実行環境
- OS: Ubuntu 24.04 (Dockerコンテナ)
- Python: 3.13
- pip:PyPIからインストール
- 発見日: 2026-03-24