製品 Lemma API証明の発行・検証の基盤Trust402エージェントに任せ、取引するSeal鍵を渡さない、エージェント時代のサインイン
ユースケース 製造・基幹インフラ検査記録アシュアランス金融・FinTech取引先レコード検証自治体・公共証明書レス手続き医療・ヘルスケア有資格者アシュアランス調達・サプライチェーン仕入先資格モニタリングメディア・コンテンツコンテンツ真正性サービス・小売グループ横断アイデンティティAI導入(業種横断)AI実行ガバナンス開発者・エージェント運用エージェント権限統制 ▸ 業界別ソリューション索引を見る
料金
リソース Critical BriefAI×信頼の最前線ブログ考え方と実装の記録ドキュメントAPI と仕様書検証センター検証・発行の実数運営会社FRAME00, Inc.お問い合わせ導入・取材のご相談用語集言葉の定義FAQよくある質問
ダッシュボード ↗ EN
No. 166 Critical Brief · 来歴証明

LiteLLM:攻撃者のフォークからビルドされた v1.107.0 が、正規の署名つきで配布された

約 4.9万件
v1.107.0 のダウンロード数(Wiz が引用した ClickPy の数値・独立解析)
11:39→13:23
PyPI での公開から、隔離まで(10-21・UTC)
05-27→10-21
管理鍵が公開リポジトリに載ってから、悪性のバージョンが公開されるまで(鍵は失効されていなかった)
国・地域国際
事案日2026-10-21
公開2026-10-30
発行Lemma Critical Team
目次
  1. 01要点
  2. 02通った操作
  3. 03実行前の照合
  4. 04Lemma でできること
  5. 05事実と時系列
  6. 06Sources

要点

AI ゲートウェイ LiteLLM の v1.107.0 が、攻撃者のフォークのソースから LiteLLM 自身のパイプラインでビルドされ、正規の名前とタグで PyPI と Docker Hub・GHCR に公開された。バージョンには正規の鍵の署名と有効な公開の来歴が付いており、外部の指摘を受けて、PyPI は約 1 時間 44 分で隔離した。署名と来歴が示すのは、どのパイプラインが作ったかである。そのパイプラインが中でどのソースを取ってきたかまでは保証しない。

図表 1「検知」と「実行の前の照合」の違い

実行の前の照合=取り込む前に、成果物が公式のタグのソースから作られた承認済みのバージョンかを照合し、記録に残すこと。検知=悪性のバージョンが出た後に気づくこと。

実行の前の照合 · 公表からは分からない取り込む前に、成果物を承認済みのバージョンと照合する
その間正規の署名と来歴のまま
配布先に届いた
検知 · 働いた外部の指摘を受け、隔離して取り下げる
10-21 11:39
PyPI に公開される
12:06
外部の研究者が指摘
〜13:23
正規の名前のまま取り込まれうる
13:23
PyPI が隔離

通った操作

通った操作
正規の名前と標準のタグでの、悪性のバージョン litellm==1.107.0 の公開と取り込み。PyPI では 10 月 21 日 11:39 UTC から、13:23 UTC に隔離されるまで公開されていた。
受け付けた側に届くもの
一般に、取り込む側に見えるのは、名前、バージョン、タグ、署名、来歴である。LiteLLM によれば、v1.107.0 には当時の正規の鍵の有効な署名(cosign)と、有効な Trusted Publishing の来歴が付いていた。
公表されていないこと
盗まれた情報の実数、攻撃者の特定。

実行前の照合

経路を問わず区別できる条件は、取り込む側が、成果物が公式のリポジトリのタグのソースから作られた承認済みのバージョンかを、入れる前に照合することである。

この事案の核心
取り込む前に確かめるべきは、署名の有無ではなく、中身がどのソースから作られたかである。
誰が承認を出すか
配布元(発行者)。公式のタグのソースから、リリースのパイプラインとは別の場所で作り直し、配布物と一致したハッシュだけを承認する。承認の鍵は、リリースのパイプラインからも、GitHub の組織の権限からも届かないところに置く。取り込む側が、自社で作り直して確かめたバージョンを承認する形でもよい。ソースが公式かどうかは、コミットが公式のタグから辿れるかで見る(フォークのコミットは、公式のリポジトリからも ID で引けてしまうことがある)。
どこで照合するか
取り込む側の CI やデプロイの、パッケージやイメージを取得する境界。承認されたハッシュと一致しない成果物は、入れない。
何が残るか
どのホストでどのバージョンが動き、そのバージョンがどの承認で入ったかの記録。悪性のバージョンと分かったとき、資格情報を入れ替える範囲を後から決められる。

検知が止めたのは公開済みのバージョンで、すでに取り込んだ環境ではない。正規の名前のまま悪性のバージョンが配られる点は、keyv/cacheable の npm 乗っ取り(正規の名前のまま悪性のバージョンが配られた)の件とも共通する論点である。

Lemma でできること

Lemma は、実行前の照合を、パッケージやイメージを取り込む境界に組み込む。侵入を見つけるのではなく、入れようとしている成果物が、承認されたバージョンかを確かめる。

注意したい業界・業務

業界AI導入(業種横断)
AI ゲートウェイやエージェントの基盤を自社で動かす組織。多くのモデル提供元の API キーやクラウドの資格情報を 1 か所に預けるので、そこで悪性のバージョンが動くと、届く範囲が広い。
業界開発者・エージェント運用
OSS のパッケージやコンテナイメージを、CI やデプロイで自動で取り込むチーム。latest のような動くタグは、公開と同時に取り込まれる。
業務配信・送付
自社でパッケージやイメージを公開する側の、リリースの起動と承認の管理。

いまの対策と Lemma の違い

今回の経路は左端の列(フォークのソースからのビルド)である。右の 2 列は今回は起きていない別の経路で、どの対策も限定的にしか働かない。

対策フォークのソースからのビルド公式のタグそのものの書き換え承認の鍵を持つ人が出した悪性のバージョン
署名と公開の来歴の確認(cosign・Trusted Publishing)効かない効かない効かない
ソースのリポジトリとタグを指定した来歴の照合(SLSA など)一部効かない効かない
外部からの指摘と隔離一部一部一部
固定と、公開から日を置いた更新一部一部一部
Lemma(実行の前の照合)効く効かない効かない

署名と来歴はどのパイプラインが作ったかを確かめる。今回の来歴に載るのは、ソースとは別のリリース用のリポジトリのワークフローで、そのワークフローが入力で取得先を変えてフォークのソースを取ってきた。ソースのリポジトリとタグを来歴で照合する方法は、ビルドがソースのリポジトリ自身で動く構成なら働くことがあるが、ワークフローを書き換えられる権限には通る。固定は新しいバージョンをすぐには入れないことを、公開から日を置いた更新(Renovate の minimumReleaseAge など)は、その間に出る外部の指摘を待つことを確かめる。どちらも、上げるバージョンの中身そのものは照合しない。Lemma が照合するのは、入れようとしている成果物そのものが、公式のタグのソースから作られた承認済みのバージョンかである。配布元が承認を出していない OSS では、照合の相手は、取り込む側が自社で作り直して確かめたバージョンになる。

注:Lemma の照合が働くのは、取り込む境界に照合を組み込み、承認の鍵がリリースのパイプラインとは別にあり、承認が公式のタグからの作り直しとの一致に基づく場合に限る。公式のタグのソースそのものを書き換えられた場合や、承認の鍵を持つ人の権限ごと奪われた場合は通る。今回、攻撃者はオーナーのトークンで公式のリポジトリのブランチの保護を上書きしている。公式のリポジトリに入った悪性のコードは、Lemma の照合では区別できない。また今回、GitHub 上の本番の承認は、盗まれたメンテナのトークンで通った。LiteLLM は、承認を事務所の端末に結びついた専用アカウントに限る制限を持っていたが、その週に一時的に緩めていた。別の鍵による承認は、運用で緩めれば働かない。表は何を照合しているかの比較で、今回の事案で止まったかどうかを示すものではない。Lemma は、侵入や悪性コードを検出・防止するものではない。

点検点検チェックリスト

取り込む OSS と、自社のリリースについて、組織で確認する 3 項目

  • 新しいバージョンを上げる前に、配布物と公式のリポジトリのタグのソースとの差分を確認しているか。
  • 自社のリリースで、起動するアカウントと承認するアカウントを、別の人と別の端末に分けているか。
  • 依存パッケージを動かすホストから、どの資格情報に届くかを一覧にしているか。

事実と時系列

対象
litellm==1.107.0 の PyPI wheel 7 つ。Docker Hub の v1.107.0・latest・main-latest・main-stable と、GHCR の同名のタグ(LiteLLM)。
成果物の出所
公式の GitHub v1.107.0 タグに悪性ファイルは無い。成果物は、正規の BerriAI/litellm に似せたフォーク Berri-AI/litellm のソースからビルドされ、LiteLLM のパイプラインで署名されて公開された(LiteLLM)。リリースのワークフローは非公開のリリース用のリポジトリ(BerriAI/project-releaser)にあり、攻撃者はソースの取得先を入力で変えられるように書き換えたうえで(コミット 9cf97e9)、フォークのコミットを指定して起動した。イメージは、パイプラインが使う cosign の鍵で署名された(LiteLLM)。
署名と来歴
LiteLLM は 3 月の事案の後、固定の公開用の資格情報を Trusted Publishing に置き換え、コンテナイメージに cosign で署名していた。Trusted Publishing は、決まった CI のワークフローからだけ PyPI に公開させる仕組みである。LiteLLM は 10 月 30 日の公表で、v1.107.0 は有効な署名と有効な来歴を持っていたとし、「パイプラインの管理はオーナーが持つので、オーナーになった攻撃者はパイプラインの統制では防げない」と述べている。署名鍵は 10 月 23 日に入れ替えた。
中身
LiteLLM は、資格情報を盗み、リモートコード実行の道具を読み込む、コンパイル済みの悪性コードと説明している。独立解析の Wiz は、AWS・GCP・Azure の認証情報、AI 提供元の API キー、SSH 鍵などが標的で、盗んだデータを LiteLLM に似せたドメインへ送る挙動を報告している。
影響範囲
LiteLLM は、エンタープライズの非公開レジストリ向けのバージョンは影響を受けず、以前のバージョンは安全としている。ダウンロード数は、Wiz が ClickPy の数値として約 49,000 件と記している(独立解析)。Wiz は、窃取の約 4.5 時間後(16:20〜17:01 UTC)から、盗まれた AWS のロールの資格情報が使われたのを観測している(独立解析)。
入口
5 月 27 日、内部の試験サービス「Agent Platform」の管理鍵を含む設定ファイルが、公開リポジトリにコミットされた。約 3 時間後に削除されたが、履歴は 10 月 22 日まで公開のままで、鍵は失効されなかった。10 月 10 日、この鍵で呼んだ API の応答に、組織オーナーの GitHub CLI のトークンが含まれていた。攻撃者は、そのトークンでリリースのワークフローを書き換え、別のメンテナのトークンで本番の承認を通した。その週、リリースを増やすため、本番の承認を事務所の端末に結びついた専用アカウントに限る制限が一時的に緩められ、任意の 2 名で起動と承認ができる状態だった(LiteLLM)。

時系列

  • 管理鍵を含む設定ファイルが公開リポジトリにコミットされる。約 3 時間後に削除。履歴は 10 月 22 日まで公開。
  • 鍵で Agent Platform の API が呼ばれ、オーナーのトークンが応答に含まれる。使い捨てのワークフローで CI のシークレットが外へ送られ、実行記録は数分で削除される。12 日にも、非公開の複数のリポジトリで同様に送られる。
  • 10:08 UTC、リリースのワークフローの変更がブランチ保護に拒否され、オーナーのトークンで上書きされる。11:11 UTC、別のメンテナのトークンで本番の承認が通る。11:39 UTC から PyPI、11:46 UTC から Docker Hub と GHCR に公開。12:06 UTC、外部の研究者が Issue #47826 で指摘。13:23 UTC までに PyPI が隔離し、13:51 UTC までに GHCR のタグが使えなくなり、14:20 UTC に Docker Hub のタグが削除または差し替えられる。18:20 UTC に最初のインシデント投稿。
  • 攻撃の経路の分析を公表。同日、イメージの署名鍵を入れ替える。
  • 再発防止策と期日の一覧を公表。インシデント投稿に新しい署名鍵の指紋を載せる。

事実は LiteLLM の公式発表(インシデント投稿、10 月 23 日の攻撃の経路の分析、10 月 30 日の再発防止策)と Wiz の独立解析に拠る。LiteLLM は、10 月 21 日の初期の更新に不正確な推定があったとし、10 月 23 日の分析を正典としている。Wiz は PyPI の隔離を 13:20 UTC、Docker Hub からの削除を 13:53 UTC ごろとしており、本稿は LiteLLM の値を採る。Wiz が記す 08:56 UTC からのコミットは攻撃者のフォークへのもので、10:08 UTC の公式のワークフローへの push とは別の出来事である。12:09〜12:24 UTC には、攻撃者がオーナーのトークンでワークフローの変更を差し戻し、見える履歴から消している。公表されていないことは、対策が無かったことを意味しない。11 月 2 日時点で、10 月 30 日より後の続報は出ていない。

公表後の対応

  • 配布先への案内: 1.106.2 などの事故前のバージョンに固定する。影響を受けた環境では cook.pth・cook.py・sitecustomize.py と、__pycache__ の cook*.pyc・sitecustomize*.pyc を削除し、常駐プロセスを止め、環境とイメージを作り直す。1.107.0 が外部と通信できるホストで動いた場合は、データが送られたものとして、そのホストから届いた資格情報(IAM ロール、DB 内の提供元キー、マスターキーなど)をすべて入れ替える。旧い鍵の署名は、v1.107.0 より前のイメージに限って信頼する。
  • LiteLLM 側: GitHub 組織の全メンバーを(一時的にオーナーにした 1 つのアカウントを除いて)外し、内部とベンダーのトークンを失効させた。10 月 30 日に、25 項目の再発防止策を期日つきで公表した。本番の承認を事務所の特定の端末に結びついた専用アカウントだけに持たせること、日常のアカウントをオーナーにしないことは完了済みとしている。公開された wheel とイメージを公式のタグと突き合わせ、不一致なら取り下げる検証を GitHub の外で動かすことは、12 月 31 日までの予定としている。

Sources

  1. 一次・企業公式LiteLLM「Contained: Oct 21, 2026 LiteLLM release v1.107.0 Compromised」(インシデント投稿、2026-10-21、10-23・10-30 更新)docs.litellm.ai/blog/security-incident-oct-21-2026
  2. 一次・企業公式LiteLLM「The attack chain behind the v1.107.0 LiteLLM release」(攻撃の経路の分析、2026-10-23)docs.litellm.ai/blog/…
  3. 一次・企業公式LiteLLM「What we are changing after October 21」(再発防止策と期日、2026-10-30)docs.litellm.ai/blog/security-changes-after-oct-21-2026
  4. 一次・指摘の IssueGitHub BerriAI/litellm Issue #478262026-10-21 12:06 UTC · github.com/BerriAI/litellm/issues/47826
報道・解析 1 件
  1. 独立解析Wiz「LiteLLM Compromised, Steals Credentials」2026-10-21、10-22 追記 · wiz.io/blog/litellm-compromised-steals-credentials

参照: 「AI 時代のサイバー防衛に残された、最後の層」

ほかでも起きている同じ手口「配信・送付」の事例 19 件を一覧で見る

この Brief は、公表された事実から、同じ立場の組織が点検できることを整理したものです。個別の被害や手続きの案内ではありません。

本資料は公開情報の構造化分析であり、特定組織への監査・診断・推奨ではありません。

この Brief を引用する

Lemma Critical Team. (2026).
"LiteLLM:攻撃者のフォークからビルドされた v1.107.0 が、正規の署名つきで配布された".
Lemma Critical Brief No.166. Lemma / FRAME00, Inc.
https://lemma.frame00.com/ja/critical/briefs/166-litellm-v1107-pypi-compromise/
次に読むNext
Brief 一覧へ →
Lemma

確かめられないものを、
業務に入れない。

Lemma は、本物に見えるログインや支払い、記録、配信を、実行する前に照合する「実行前照合」の基盤です。暗号技術の証明で、受け取った側が発行者に問い合わせずに確かめられます。検知はそのままに、その手前に置きます。