LiteLLM 1.107.0に不正コード、AIキーを窃取

大規模モデル用ゲートウェイツールのLiteLLMが10月21日、サプライチェーン攻撃を受けた。クラウドセキュリティ企業のWizによると、改ざんされたLiteLLM 1.107.0は同日PyPIで公開された。GHCRとDocker Hubでv1.107.0、latest、main-latest、main-stableのタグが付いたイメージにも、同じ窃取プログラムが埋め込まれていた。公式が示す直近の安全なバージョンはv1.106.2だ。

LiteLLMはBerriAIが開発しており、社内にプロキシを1層置いて、OpenAI、Anthropic、Bedrockなど100を超えるモデルサービスへ統一インターフェースで転送する使い方が一般的だ。プロキシの裏には各ベンダーのAPIキーが保管されており、今回の攻撃が狙ったのはまさにここである。

インストールした瞬間から盗み始める

悪意あるパッケージはsite-packages直下にcook.pth、cook.py、sitecustomize.pyの3ファイルを置く。前の2つはPythonの.pth機構を利用しており、インタープリターが起動するだけで実行されるため、業務コードがLiteLLMをimportする必要はない。

窃取プログラムは内部でprivcollectと呼ばれ、16のモジュールで構成される。標的は次のとおり。

  • Chrome、Firefox、Edge、Safariのブラウザー認証情報とCookie
  • AWS、GCP、Azureのクラウド認証情報
  • OpenAI、Anthropic、CohereなどAIベンダーのAPIキー
  • SSH・GPGの秘密鍵とシェル履歴
  • LiteLLM ProxyのPostgreSQLデータベースから直接取得した上流ベンダーの認証情報

データはまずAES-256-CBCで暗号化され、その鍵がRSA-4096で包まれたうえで、攻撃者が登録した偽装ドメインwww.litellm[.]devへHTTP POSTで送信される。sitecustomize.pyはLinuxとmacOSでのみ動作し、GitHub上の「デッドドロップ」用リポジトリから第2段階のアドレスを取得する。Wizによれば、このファイルにはテスト値以外は中身が入っておらず、GitHubはすでにそのリポジトリを削除した。

時系列を並べてみる

Wizが公表したUTC時刻から、各段階のおおよその時間幅を整理した。

段階時刻(UTC)継続時間
偽装リポジトリへ10回のコミットをプッシュ08:56〜10:46約1時間50分
PyPIで悪意あるバージョンが公開11:39〜13:20約1時間41分
改ざんされたDockerタグが公開13:53前後に削除PyPI公開から数えて約2時間14分
攻撃者がAWS認証情報を検証16:20〜17:01外部送信から約4.5時間後

PyPIで公開されていた1時間余りは短く見えるかもしれない。しかしlatestのようなタグは多数のCIパイプラインやKubernetesのデプロイが自動で取得するため、影響範囲はこの間にイメージを再構築した環境の数に大きく左右される。Wizはダウンロード数を公表しておらず、影響を受けた組織の数も現時点では確認できない。

攻撃者は認証情報を手にすると、侵害されたCIランナーやKubernetesノード上のAWSインスタンスロールを使い、sts:GetCallerIdentityやbedrock:ListFoundationModelsなどのAPIを呼び出した。Wizはこれを、他人のクラウドアカウントを乗っ取って大規模モデルを無断利用するLLMjackingの手口と一致するとみている。一部の環境では、攻撃者が定型的な偵察としてIAMの列挙も行っていた。

侵入口はGitHubトークンか

攻撃者がプッシュした10回のコミットは、偽装リポジトリBerri-AI/litellmに置かれた。最初の9回にはGitHubの署名があり、最後の1回だけは署名がなく、メールアドレスも変わっていた。BerriAIは次のように説明している。

"malicious actions were taken through three engineers' GitHub accounts"
(悪意ある操作は、3人のエンジニアのGitHubアカウントを通じて行われた。)

LiteLLMは、これらのGitHub CLIのOAuthトークンが、インターネットに公開された社内のデプロイ環境から漏えいしたと疑っている。直近で修正された脆弱性が関係している可能性があるが、Wizはこの点が未確認であると明記している。BerriAIは、問題のトークンはすべて失効させたとしている。1.107.0を使った、あるいは該当時間帯に上記のイメージを取得したチームは、そのマシンから読み取れるクラウド認証情報、モデルのAPIキー、SSH秘密鍵をすべてローテーションする必要がある。

参考資料:Wiz リサーチブログ、CocoLoop、Wiz 脅威インテリジェンスセンターの告知、BerriAI の公式声明。影響を受けるバージョンとイメージタグ、悪意あるファイル名、各段階のUTC時刻を確認した。