対象:LLM(大規模言語モデル)のAPIをまとめて扱うオープンソース「LiteLLM」を、Pythonのライブラリとして、またはDockerのプロキシ(LLMゲートウェイ)として使っている開発者・運用担当者。
本記事はLiteLLMの開発元BerriAIの公式発表と、同社がGitHubのissueに書いた状況報告にもとづく解説です。攻撃の手順、マルウェアの中身、侵害の痕跡(IoC)の具体的な値は扱いません。ファイル名やイメージのダイジェストは同社の発表ページで確かめてください。
続報待ち:この記事は公式発表に合わせて更新します
2026年10月22日13時30分時点まだ分かっていないこと
- 社内の環境に入られた方法(同社は最近修正した脆弱性を疑っている)
- 影響を受けた利用者・環境の数
- 盗まれた情報が使われたかどうか
- 痕跡の詳しい探し方(同社が公開予定としている)
同社は発表で「さらに詳しいことが分かりしだい追記する」としています。発表は10月21日20:30 UTC(日本時間10月22日5:30)の版のままで、その中で予告していた22:30 UTCの更新は出ていません。
GitHubのissueでは約2時間ごとに状況を報告していましたが、10月22日02:19 UTC(日本時間11:19)の報告で、前回から大きな進展はなく、配布元への新しい公開と通常のリリースは止めたままだとしました。今後は約2時間ごとではなく、大きな進展があったときに報告するとしています。
LiteLLMの利用者が今日やること
手順1はすべての利用者向けです。手順2以降は、対象の版・イメージを入れた(起動した)場合の、同社の案内に沿った流れです。
対象かを確かめる:入れた時刻と、使ったタグ
同社が示した対象は次のとおりです。日本時間は当サイトで換算しました。
| 配布の経路 | 対象 | 期間(UTC) | 期間(日本時間 10月21日) |
|---|---|---|---|
| PyPI | litellm==1.107.0(7つのwheelすべて) | 11:39〜13:23 | 20:39〜22:23 |
| Docker Hub | v1.107.0・latest・main-latest・main-stable | 11:46〜14:20 | 20:46〜23:20 |
| GHCR(GitHubのコンテナの置き場) | 同じ4つのタグ(litellm・litellm-database・litellm-non_root) | 11:46〜13:51までに取り下げ | 20:46〜22:51 |
同社は、期間内に版を固定せずにpipで入れた場合と、期間内に上のタグのイメージを起動した場合を対象としています。CIで毎回 pip install litellm を実行している、FROM でlatestのイメージから作っている、といった使い方では、人が操作していなくても期間内に入っていることがあります。
- 入っている版は
pip show litellmで確かめられる(同社の案内) - 同社は、確かめるためのファイルの名前とイメージのダイジェストを公表している。見つかれば対象と確定するが、見つからなくても安全とは言えない、としている
- 1.106.2以前の版、1.107.0rc1・rc2を明示して使っていた場合は対象外(同社は「それより前の版はすべて安全」としている)
- 企業向けの非公開の配布元(プライベートレジストリ)から入れている顧客は影響を受けていない(同社)
入っていたら:その環境でいきなりpip installをしない
同社の発表に載っている報告者の分析によれば、このマルウェアは、Pythonが起動するたびに自動で読み込まれるファイルとして入ります。litellmをimportしない処理や、pipを動かしただけでも、もう一度実行されます。
同社が案内している片付けの順番は次のとおりです(ファイル名と場所は同社の発表ページにあります)。
- Pythonを起動せずに、シェルから、同社が名前を公表している不正なファイル(とキャッシュのファイル)を、対象のすべてのsite-packagesから削除する
- 裏で動き続けているPythonのプロセスを止める
- そのあとで
litellm==1.106.2に固定して入れ直す。同社は、イメージや仮想環境を一から作り直す方がよいとしている
コンテナで動かしていたなら、対象のイメージから作ったコンテナを止め、版を固定したイメージから作り直すのが手早い方法です(当サイトの補足)。
版を固定する:1.106.2か、明示した版
同社は当面、利用者に 1.106.2、または今回より前に公開された版を明示して固定するよう求めています。10月22日時点で、PyPIの最新版は1.106.2に戻っており、1.107.0は取り除かれています。
Dockerでは、latest・main-stableのように中身が入れ替わるタグではなく、版のタグ、できればダイジェスト(イメージの中身から作られる値)で指定すると、同じタグの中身が差し替えられても影響を受けません。同社は、通常のリリースを止めており、公開の配布元への新しい版の公開もいったん止めているとしています。新しい版が出ても、同社の発表で安全が確かめられるまで待つのが無難です(当サイトの補足)。
キーを変える:その環境から届いたものすべて
同社は、外部と通信できるホストに1.107.0が入っていたなら、盗んだ情報の送信は成功したものと考えるよう求めています。変える対象として同社が特に挙げているのは次のとおりです。
- サーバーやコンテナに割り当てたクラウドの権限(AWSのインスタンスやタスクのIAMロールなど)
- LiteLLMのプロキシのデータベースに保存した、LLMプロバイダのキーのすべて
- プロキシのマスターキーと、発行した仮想キー
- データベースの接続文字列(DATABASE_URL)のパスワード
- そのホストで動いていたプロセスの環境変数に入っていた秘密のすべて
報告者の分析では、これに加えてSSHの鍵、Gitやパッケージの公開に使う認証情報、Kubernetesのトークン、ブラウザに保存したパスワード、AIのコーディング支援ツールの設定なども集める作りでした。開発者の手元のPCで1.107.0を動かした場合は、そのPCにある認証情報も変える対象になります。
キーは、各サービスの管理画面で新しく発行し、古いキーを無効にします(当サイトの補足:新しいキーを設定してから古いキーを止めると、サービスの停止を避けられます)。APIキーの置き方は .envとAPIキーは何が危ないのか にまとめています。
使われていないかを確かめる:クラウドの監査ログと、LLMの利用量
同社は、AWSの監査ログ(CloudTrail)で、入れた時刻のあたりにインスタンスの権限で本人確認の呼び出し(GetCallerIdentity)が行われていないか、その後に自社の環境の外からその権限が使われていないかを確かめるよう案内しています。
当サイトの補足として、LLMプロバイダの管理画面で、10月21日夜(日本時間)以降の利用量と請求に、身に覚えのない増え方がないかも確かめてください。盗まれたLLMのキーが使われると、利用量や請求に表れることがあるためです。盗まれたキーで起きることは 盗まれたAPIキーが悪用されてアカウントが停止される例 にまとめています。
期間内に1.107.0を入れた/対象のタグを起動した
侵害されたものとして扱う
↓→
① Pythonを起動せずに片付ける
できればイメージ・仮想環境を作り直す
外部と通信できるホストだった
送信は成功したものと考える
↓→
② 届いたキーをすべて変える
クラウドの権限・プロバイダのキー・マスターキー・DB
1.106.2以前を明示して固定していた
同社は「それより前の版は安全」
↓→
③ 固定を続け、新しい版は発表を待つ
Dockerは版のタグかダイジェストで指定
LiteLLMのプロキシを運用している人へ
プロキシのデータベースには、つないでいるLLMプロバイダのキーがまとめて入っています。報告者の分析では、マルウェアはDATABASE_URLが設定されていると、プロバイダのキーとモデルの設定を入れた表を読み出す作りでした。プロキシを1.107.0で起動したなら、登録しているプロバイダのキーは1つ残らず変える前提で、一覧を作ってから作業してください。利用者に配った仮想キーも作り直しになるので、配った相手への連絡も用意しておくと混乱が減ります。
何が起きたのか(BerriAIの発表より)
以下は、BerriAIのブログの記事「Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised」(2026年10月21日公開、同日20:30 UTC更新)と、同社のセキュリティの責任者がGitHubのissueに書いた状況報告にもとづきます。時刻は特に書かない限り10月21日のUTCで、括弧内は日本時間です。
10:08(19:08)
非公開のリリース用リポジトリの手順の書き換えが、ブランチ保護で拒否される。5秒後、権限の強い開発者のアカウントの認証情報で保護が外され、書き換えが入る。10:46(19:46)
書き換えた手順で、似た名前の攻撃者のリポジトリを元にした検証用の実行が始まる。11:11(20:11)
2人目の開発者のアカウントの認証情報で、本番公開の承認が通される。11:39〜11:40(20:39〜20:40)
不正な1.107.0のwheel 7つがPyPIに公開される。11:46(20:46)
同じリリースのDockerイメージが公開される。11:53(20:53)
3人目の開発者のアカウントの認証情報で、実行の記録が消される。調べられるログが限られたという。12:06(21:06)
外部の研究者がGitHubのissueで報告。13:23までに(22:23)
PyPIから1.107.0が取り除かれる。14:20(23:20)
Docker Hubのすべての対象のタグが、削除されるか問題のないイメージに付け替えられる。20:30(10月22日5:30)
同社が、攻撃の経路を特定したとみられるとして発表を更新。23:37(10月22日8:37)
同社が、組織のすべての認証トークンを洗い出して失効・作り直しを進めていると報告。配布元への新しい公開と通常のリリースは止めたまま。10月22日 02:19(11:19)
同社が、前回の報告から大きな進展はないと報告。新しい公開と通常のリリースは止めたまま。今後は約2時間ごとではなく、大きな進展があったときに報告するとした。
- 対象
- PyPIのlitellm==1.107.0(wheel 7つすべて)。Docker HubとGHCRの v1.107.0・latest・main-latest・main-stable(GHCRは litellm・litellm-database・litellm-non_root)
- 起きたこと
- リリースの仕組みが侵害され、マルウェア入りの1.107.0が公開された。GitHubの公式の1.107.0のタグには不正なファイルは含まれず、似た名前の攻撃者のリポジトリから作られた
- マルウェアの働き(公表の範囲)
- コンパイルされたマルウェアで、認証情報を盗み、遠隔でコードを実行する道具を読み込む。Pythonの起動のたびに動き、裏でプロセスが動き続ける
- 安全な版
- それより前の版はすべて安全。当面は1.106.2か、明示した版に固定する
- 原因(同社の見立て)
- 3人の開発者のGitHub CLIのOAuthトークンが攻撃者の手に渡った。組織の所有者のトークンでブランチ保護を外し、手順を書き換えた。トークンは、インターネットに公開されていた社内のLiteLLMのログから取られたとみている
- 同社の対応
- PyPI・Docker Hub・GHCRから取り下げ。関わったトークンを失効させ、組織のメンバーを1人に絞り、公開の配布元から組織への信頼の設定を外した。すべてのトークンの失効・作り直しを進めている
- 件数・悪用
- 公表されていない
分かっていること・分かっていないこと
2026年10月22日時点の状態です。続報が出たら、この表の状態欄を書き換えます。
| 項目 | 発表の内容 | 状態 |
|---|---|---|
| 対象の版(PyPI) | litellm==1.107.0、wheel 7つすべて | 確定(同社) |
| 対象のイメージ・タグ | Docker Hub・GHCRのv1.107.0・latest・main-latest・main-stable | 確定(同社) |
| 対象の時間帯 | PyPIは11:39〜13:23 UTC、Docker Hubは11:46〜14:20 UTC、GHCRは13:51 UTCまでに取り下げ | 確定(同社) |
| マルウェアの混入 | 認証情報を盗み、遠隔でコードを実行する道具を読み込む | 確定(同社) |
| 対象の環境の認証情報 | 外部と通信できたなら、送信は成功したものと考えるよう求めている | 可能性(同社) |
| それより前の版 | すべて安全 | 含まれない(同社) |
| 企業向けの非公開の配布元 | 影響を受けていない | 含まれない(同社) |
| GitHubの公式のソースのタグ | 不正なファイルは含まれない | 含まれない(同社) |
| トークンが盗まれた経路 | 社内のLiteLLMのログから取られたとみている | 可能性(同社) |
| 社内の環境に入られた方法 | 確認できていない。最近修正した脆弱性を疑っている | 調査中 |
| 影響を受けた利用者・環境の数 | 発表に書かれていない | 記載なし |
| 盗まれた情報の悪用 | 発表に書かれていない | 記載なし |
読み方の注意:公開されていた時間が短くても、判断は「入れたか・起動したか」で行う
PyPIでの公開は約2時間でしたが、CIや自動の作り直しで版を固定せずに入れていると、その間に入ることがあります。当サイトは件数を推測しません。自分が対象かどうかは、期間内に1.107.0を入れたか、対象のタグのイメージを起動したかで判断してください。
同社の発表には、手順を寄せた研究者や、原因の説明に関わる開発ツールの製品名が出てきますが、当サイトの方針として、被害を公表した組織以外の名前は役割で書いています。
配布物にマルウェアが混ざると、何が起きうるか
以下は一般に言えることで、今回これらが起きたという意味ではありません。今回の働きとして同社が公表しているのは、上の「何が起きたのか」の範囲です。
Pythonのパッケージは、入れた人の権限で動きます。サーバーやコンテナで動けば、そのホストの環境変数、ファイル、割り当てられたクラウドの権限に届きます。LLMのゲートウェイは、もともと複数のLLMプロバイダのキーをまとめて預かる役目のため、1か所が侵されると、つないでいる先すべてのキーが一度に危うくなります。
正規の配布元から、正規の名前と版番号で配られたものが原因になる点が、依存関係の名前の打ち間違いや、古い版の脆弱性を突かれる事故と違うところです。同じ型の事案として Trivyのサプライチェーン侵害、TanStack・Nx Consoleの事案、WordPressのプラグインで起きた Rank Math PROへのマルウェア混入 があります。
LiteLLMを使う側が見直すこと:公表された経緯から
本節は同社の対応を評価するものではありません。今回の発表から、利用する側で次の事故に備えられる3点に絞ります。
中身が入れ替わる指定をやめる:版の固定と、ダイジェストでの指定
今回の対象は、版を固定せずにpipで入れた環境と、latest・main-latest・main-stableのような中身が入れ替わるタグを使った環境でした。1.106.2を明示し、Dockerをダイジェストで指定していれば、期間内に作り直しても影響を受けませんでした。
最初の1つとしては、本番とCIで使う依存関係を、ハッシュ付きのロックファイル(pip install --require-hashes、uvやPoetryのロックファイル)で固定してください。公開されたばかりの版をすぐに使わない設定(uvの exclude-newer など、指定した日時より後に公開されたものを使わない設定)も、短時間で取り下げられる事案には効きます。考え方は OSV-Scannerで依存関係を点検する にまとめています。
LLMのゲートウェイに預けるキーを、変える前提で分けておく
プロキシのデータベースには、つないでいるプロバイダのキーがまとめて入ります。今回のように変える必要が出たとき、どのキーがどの環境のものか分からないと、変え忘れか、全部止めるかの二択になります。
開発・検証・本番でプロバイダのキーを分け、プロバイダ側で利用額の上限と通知を設定しておくと、変える範囲が小さくなり、悪用にも早く気づけます。キーが漏れたときの流れは AIで書いたコードからAPIキーが漏れた事例 にまとめています。
ゲートウェイのログと管理画面を、外に出さない
同社は、インターネットに公開されていた社内のLiteLLMの環境に入られ、そのログに、AIのコーディング支援ツールが応答の本文に含めた開発者のGitHubのトークンが残っていたとみています。LLMのゲートウェイで応答の本文までログに残していると、そこに秘密が混ざることがあります。
自分で運用しているゲートウェイでは、管理画面とAPIをインターネットから直接触れないようにする、応答の本文を残すログの設定を見直す、残す場合は保存期間を短くする、の3つを確かめてください。開発者のGitHubのトークンは期限付きのものを使い、組織の所有者の権限を日常の作業のアカウントから分けておくと、今回のようにトークンが取られたときの被害が小さくなります。GitHubのアカウントの守りは GitHubの2段階認証の設定 にまとめています。
出典(公開記録)
本記事の事実関係は以下の公開情報にもとづきます。マルウェアの中身、通信先、痕跡の具体的な値は転載していません。
- BerriAI(LiteLLM)「Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised」(2026年10月21日公開、同日20:30 UTC更新) — docs.litellm.ai
- BerriAI/litellm のGitHubのissue #47826(外部の研究者の報告と、同社の状況報告。10月22日02:19 UTCの報告まで確認) — github.com
- PyPI「litellm」のプロジェクトのページ(10月22日に確認。最新版は1.106.2で、1.107.0は掲載されていない) — pypi.org
更新履歴
2026-10-22(13時30分):issueの10月22日02:19 UTCの報告(大きな進展はなく、今後は大きな進展があったときに報告)を反映。発表は20:30 UTCの版のまま。対象のイメージの書き方を改めた。
2026-10-22:初版。BerriAIの発表(10月21日20:30 UTC更新版)と、issueの10月21日23:37 UTCの報告にもとづく。侵入の経路や件数が公表され次第更新します。
次に読む
- 同じ型の事案:Trivyのサプライチェーン侵害で、CIでTrivyを使っている人がやること / TanStack・Nx Console・GitHubの連鎖で開発者が確認すること
- 盗まれたトークンの失効の順序:npmサプライチェーン攻撃の守り方
- 秘密の置き方:.envとAPIキーは何が危ないのか / 漏れた認証情報が有効なまま残る問題
- 用語:バックドアとは / マルウェアとは
- 2026年の他の事案:情報漏えい・サイバー攻撃の一覧(国内・海外)
よくある質問
QLiteLLMのどの版・どのイメージが対象ですか?
BerriAI(LiteLLM)の発表によれば、対象はPyPIのlitellm==1.107.0(7つのwheelすべて、2026年10月21日11:39〜13:23 UTC=日本時間20:39〜22:23)と、Docker HubとGHCRのv1.107.0・latest・main-latest・main-stableのタグです。Docker Hubのタグが不正なイメージを指していたのは11:46〜14:20 UTC(日本時間20:46〜23:20)で、GHCRでは13:51 UTC(日本時間22:51)までに取り下げられました。同社は、それより前の版はすべて安全で、企業向けの非公開の配布元を使っている顧客は影響を受けていないとしています。
Q自分が対象かどうかは、どう確かめればいいですか?
同社は、期間内に版を固定せずにpipでLiteLLMを入れた場合と、期間内に対象のタグのDockerイメージを起動した場合を対象としています。1.107.0で一度でもPythonを起動した環境は侵害されたものとして扱うよう求めており、版は pip show litellm で確かめられます。同社は確かめるためのファイルの名前も公表していますが、見つからなくても安全とは言えない、としています。
Qlitellmをimportしていなくても危ないのですか?
危ないです。同社の発表に載っている報告者の分析によれば、マルウェアはPythonが起動するたびに自動で読み込まれるファイルとして入るため、litellmを使わないPythonの処理や、pip自体を動かしても実行されます。そのため同社は、対象の環境でいきなりpip installをしないよう、片付けの順番を指定しています。
Qどの認証情報を変えればいいですか?
同社の案内では、対象のホストから届いたものすべてです。特に、サーバーやコンテナに割り当てたクラウドの権限(AWSのIAMロールなど)、LiteLLMのプロキシのデータベースに保存したLLMプロバイダのキーのすべて、プロキシのマスターキーと発行した仮想キー、DATABASE_URLのパスワード、そのホストで動くプロセスの環境変数に入っていた秘密を挙げています。外部と通信できるホストに入っていたなら、送信は成功したものと考えるよう求めています。
Q原因は何ですか?
同社は、3人の開発者のGitHub CLIのOAuthトークンが攻撃者の手に渡り、そのうち組織の所有者のトークンでブランチ保護を外して、リリースの手順を似た名前の別のリポジトリから作るように書き換えられたと説明しています。トークンは、インターネットに公開されていた社内のLiteLLMのログから取られたとみています。社内の環境に入られた方法は確認できておらず、最近修正した脆弱性を疑っている段階です(10月22日時点)。
Q3月にもLiteLLMの事案がありましたが、同じものですか?
別の事案です。同社は今回の発表で、3月の事案のあとにリリースの仕組みを強化した(非公開のリポジトリへの移行、信頼された発行元の仕組み、Dockerのタグの書き換え禁止、イメージへの署名)と書いており、今回はそれらを複数の正規の権限で乗り越えられたと説明しています。3月の事案の対象の版と、今回の1.107.0は違う版です。