PyPI の LiteLLM バージョン 1.107.0 で、資格情報窃取プログラムとバックドアがインストールされる脆弱性情報

2026/10/21 23:00

PyPI の LiteLLM バージョン 1.107.0 で、資格情報窃取プログラムとバックドアがインストールされる脆弱性情報

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

元々のサマリーは、可読性と一般的な精度の点で高品質ですが、キーポイントリストに提供されていたいくつかの具体的な技術的詳細が欠けています。以下に、それら不足している要素を取り入れつつ明確さを保ちながら改訂されたバージョンを示します。

サマリー:

PyPI リリース

litellm==1.07.0
で重大なセキュリティ侵害が発生したことが確認されました。このリリースは、資格情報窃取ツール(
cook.py
)とリモートコード実行(RCE)用のバックドア(
sitecustomize.py
)が仕込まれた状態で PyPI から削除されるまでの間、侵害されました。攻撃は 2026 年 10 月 21 日に展開されました:UTC 時間 06:59 にタグ作成が行われた後、UTC 時間 11:20–11:37 の間に BerriAI の内部パイプライン内で maturin
1.9.4
を使用して悪意のあるホイールが構築され、UTC 時間 11:39 にアップロードされました。特筆すべきは、このリリースを公開するパブリックな GitHub Actions ランが存在しなかったことと、SafeDep がプロヴェナンスの検証証明(provenance attestations)を検出できなかったことです。

感染範囲は深刻です:Linux、macOS、Windows の 7 つすべてのホイールが、

litellm
ライブラリが一度もインポートされない場合でも、Python の起動時に自動的に悪意のあるファイルを実行します。この侵害は、
pyproject.toml
の特定のエンティリ
maturin data = "cook"
を通じて隠された
cook/
フォルダを注入し、パブリックな GitHub コミットとプロヴェナンスチェックを回避しました。リリースタグ
v1.107.0
(コミット
66c8f5b
)は、sdist ソースと一致しておらず、これはより後のコミットおよび攻撃者による改変に対応しています。

窃取ツール(

cook.py
)は、機密データ(SSH キー、クラウドトークン、ブラウザのパスワード、Git シークレットを含む)を収集し、AES-256-CBC + RSA-OAEP で暗号化して、
www.litellm[.]dev/healthcheck
に流出させます。バックグラウンドで動作するデーモンは、時ごとの間隔で窃取ツールを再実行し、攻撃者による制御サーバーから任意のコードをダウンロードして実行します。しかし、攻撃者の制御サーバーは今やアクセス不可になっています(GitHub アカウントは UTC 時間 13:40 に削除済み)、現在のバックドアはコードを実行するためのサーバーアドレスを見つけることができていません。

幸運なことに、前バージョン(

1.106.2
、
1.107.0rc1
、
1.107.0rc2
)とコンパニオンパッケージは侵害されていないことを確認しました。検出は、
site-packages
内の
cook.pth
、
cook.py
、および
sitecustomize.py
、環境変数
PRIVCOLLECT_ACTIVE=1
、あるいは独立したデーモンプロセスといったインジケーターをスキャンすることで可能です。組織は、継続的なデータ窃取を防ぐために、Python 3.10+ を動作させるすべてのシステムからこれら感染ファイルを能動的に検出して削除する必要があります。利用可能な SHA-256 ハッシュを使用して悪意のあるホイールファイルを特定します。

本文

LiteLLM 1.107.0 リリースにおけるマルウェア混入事象

2026 年 10 月 21 日発行 • 約 6 分読み

PyPI で公開された

litellm
パッケージ バージョン 1.107.0 は、**認証情報窃取(クレディビリティ・ハーベスト)および遠隔コード実行(RCE)**を可能にするバックドアを含むマルウェアが混入していました。 この攻撃により、Python プロセス全体(
litellm
をインポートしていないプロセスも含まれます)が起動する際に、即座にマルウェアの実行が誘発されます。

被害概要

  • 被害ファイル: Linux、macOS、Windows 向けに用意された7 つのホイール(wheel)パッケージすべてに、認証情報窃取器とバックドアが含まれていました。システム上の
    site-packages
    ディレクトリ内に 3 つのファイルとして展開されます。
  • 影響範囲: PyPI よりもファイルを削除していますが、既にこのバージョンをインストールしているすべてのシステムは現在も危険な状態にあり、継続的な脅威にさらされています。
  • 安全なバージョン:以下のバージョンおよび対応するコンパニオンパッケージはマルウェアから無事に守られています。
    • litellm==1.106.2
    • litellm==1.107.0rc1
    • litellm==1.107.0rc2
    • litellm-proxy-extras==0.4.110
    • litellm-enterprise==0.1.78

攻撃の実行メカニズム (What the attack does)

litellm==1.107.0
をインストールすると、以下の 3 つのファイルが
site-packages
に配置され、Python インターpreter が起動するたびにそのうち 2 つが自動的に読み込まれます。

1. cook.pth(認証情報窃取器)

  • 動作: このファイルは
    cook.py
    をインポートします。
  • 機能: SSH キー、クラウド認証情報、CI/CD シークレット、AI ツールのトークン、ブラウザのパスワード、LLM プロバイダーキーなどの機密情報を収集し、LiteLLM Proxy のデータベースに保存(暗号化)した後、
    www.litellm[.]dev
    へ送信します。
    • 影響: すべての Python プロセス(アプリケーション、
      pip
      、IDE ランタイムサーバー、CI ジョブなど)が実行対象となります。

2. sitecustomize.py(バックドア)

  • 動作: バックグラウンドでデーモンプロセスを起動します。
  • 機能: 1 時間ごとに攻撃者の GitHub リポジトリからサーバーアドレスを読み取り、再び窃取器を実行して、そこから遠隔コードをダウンロードして実行します(RCE)。

マルウェア混入の経緯 (How the implant got into the release)

ビルドプロセスにおける改ざん

バージョン 1.107.0 のソースディストリビューション(sdist)に含まれる

pyproject.toml
ファイルに、正当なコミット履歴には含まれていない以下の行が追加されていました。

  • 変更箇所:
    pyproject.toml
    (
    litellm-1.107.0.tar.gz
    ) の
    [tool.maturin]
    セクションに
    data = "cook"
    が追加されました。
  • 結果: マチュリン(Maturin)のビルドプロセスにより、本来は含まれていない**
    cook/
    フォルダ**がホイールパッケージ内にコピーされます。
    pip install
    時にこれが
    site-packages
    に展開され、マルウェアとして動作を開始します。

タグとの不一致 (The release does not match its tag)

  • タグ v1.107.0: このタグはコミット
    66c8f5b
    を指していますが、
    pyproject.toml
    内で設定されているバージョン番号は
    "1.108.0"
    とされていました。
  • 実際のソースコード: SafeDep はすべての sdist ファイルと Git ツリーをブロッブ(blob)ハッシュで照合しました。結果として確認されたのは、より後のメインブランチのコミット
    a8113b0
    および 5 つの修正ファイル、そして攻撃用のフォルダ
    cook/
    を含んだものでした。
  • 変更内容の詳細:
    • 4 つの変更点は
      Cargo.toml
      で
      readme = "README.md"
      の行を追加するものであり、これは正当な 1.106.2 や rc2 リリースでも同様に含まれています。
    • 5 つ目の変更点は
      pyproject.toml
      です。バージョンを
      1.107.0
      に修正し、コンパニオンパッケージの依存関係を rc2 バージョンに固定する変更を含んでいました。このため、rc2 に対する依存関係の差分が異常に見えないようになり、改ざんが見逃されました。

ホイールの構築と公開 (How the wheels were built)

攻撃ホイールの特徴

  • ビルドパイプライン: 悪意のあるホイールは、通常の BerriAI のリリースパイプラインから出力されたものと同様です(
    WHEEL
    ファイルに maturin 1.9.4 が指定されている)。インプラントファイルの RECORD エントリーも正常であり、ビルド後の編集痕跡はありませんでした。
  • タイムスタンプ: 圧縮ファイルのタイムスタンプは、macOS で UTC 11:20、Linux で 11:21、Windows で 11:37 と異なる時刻を示しており、各プラットフォームで独立して構築されたことを示唆しています。
  • 改ざんの痕跡: Windows ホイール内のすべての
    .py
    ファイル(インプラントファイルを含む)にCRLFの行終端記号が含まれていますが、Linux ホイールにはありません。これは Git チェックアウト後に行終端を Windows 形式に変換した結果であることを示します。

公開プロセスの異常

  • GitHub Actions の実行記録: 公衆向けの GitHub Actions ログを確認したところ、このリリースをビルドまたは公開する動作は確認できませんでした(09:30 〜 12:30 UTC の間に行われたすべての実行をチェック済み)。
  • 公開までの遅延: PyPI へのアップロードは約 11:39 UTC に行われましたが、GitHub リリースの公開(
    litellm-dispatcher[bot]
    )は 11:50 UTC(約 10 分後)でした。
  • プロベナンス(追跡可能性)の欠如: PyPI に登録されている 1.107.0、1.106.2、rc2 のいずれにも、ビルダーの情報やソースコードのハッシュ値などを示すプロベナンスアテステーションが存在しません。

推定される原因

SafeDep は、BerriAI のプライベートリリースパイプラインが、攻撃者が改ざんした Git ソースコードからホイールを構築したと、中程度の確信度で評価しています。

  • 可能性: 侵害されたメンテナまたはボットの認証情報、あるいは攻撃者が所有するプライベートブランチやミラー、ビルドの参照先などが悪用された可能性があります。
  • 結論: 攻撃者のマシンから流出した PyPI トークンが原因である可能性は低いです。確定するためには、BerriAI の内部パイプラインログの確認が必要です。

ペイロード詳細

ペイロード 1: 認証情報窃取器 (
cook.py
)

Python が起動すると、

site-packages
内の
.pth
ファイルで始まる行が自動的に実行されます。
cook.pth
は
import cook
を含んでおり、あらゆる Python プロセスに対して窃取器を実行させます。

収集対象データ

コードは約 61 KB の Python スクリプトを、

exec(zlib.decompress(base64.b64decode('...')))
でラップしています。デコードされたコードが収集するのは以下の情報です:

  • システム情報: ホスト名、ユーザー、OS、IP アドレス、ネットワーク設定 (
    sysinfo
    ,
    netinfo
    )
  • ブラウザデータ: クロム保存パスワード(Windows DPAPI で復号化)、Firefox ログイン、ブラウザ履歴
  • SSH キー:
    ~/.ssh/*
    内の全てのキー
  • シェル履歴: Bash/zsh の履歴、PowerShell PSReadLine、cmd 履歴
  • クラウド認証: AWS credentials/config、Azure profile/tokens、gcloud、kubernetes config、docker config、gh hosts.yml、rclone.conf、.netrc、pem/pfx/keystore ファイル
  • 開発者シークレット: Kubernetes SA トークン、GitLab Runner 設定、Jenkins master.key/.vault-token、Terraform/Packer/CircleCI 設定
  • AI ツールトークン: Claude Code/Desktop/Cursor/Windsurf/Copilot/VS Code mcp.json/Gemini CLI/Codex/Continue/Aider/Goose/opencode/Qwen/Crush/Kiro/Zed/HF token など
  • 環境変数: 自身および他のプロセスの環境変数
  • データベース:
    DATABASE_URL
    の読み取り、LLM プロバイダー API キーを保持するテーブルのダンプ
  • メタデータ: AWS IMDSv2/v1(インスタンスアイデンティティ/ロール)、GPG キー、TLS 秘密鍵

データ送信方法

  1. 収集した JSON データはランダムに生成されたAES-256-CBC キーで暗号化されます。
  2. そのキーは埋め込まれたRSA-OAEP パブリックキーで再暗号化されます。
  3. 結果は
    tar.gz
    (
    hdr.json
    ,
    data.bin
    ,
    key.bin
    ) に圧縮され、ヘッダー
    X-Token: XWiA8gZNa7NcX2XRoAEb
    を追加して、
    www.litellm[.]dev/healthcheck
    へ POST リクエストで送信されます。
  4. 成功後は
    /tmp/.pc_once_...
    というファイルを書き出して、そのホストでは1 回ずつのみ収集を行うように制御します(環境変数
    PRIVCOLLECT_ACTIVE=1
    も設定)。

ペイロード 2: バックドア (
sitecustomize.py
)

Python が起動すると

sitecustomize
モジュールがインポートされるため、このファイルもすべての Python プロセスで実行されます。

  • ロック処理:
    /tmp/remote_code_loader.lock
    ファイルに対して排他ロックを取得し、ホストごとに 1 つだけのデーモンを実行します。
  • プロセス分離:
    fork()
    と
    setid()
    を呼び出し、標準入出力を
    /dev/null
    に送って作業ディレクトリを
    /
    に変更することで、親プロセスから独立して動作(ダッチ)します。

毎時の動作 (バックドアループ)

  1. 攻撃者の GitHub リポジトリ (
    domain.txt
    ) からドメイン名を読み取ります。
  2. 読み取ったアドレスから窃取器のコピー(ホスト単一制御マーカーなし)を実行します。
  3. http://<domain>/codepy
    をダウンロードして実行 (
    exec()
    ) し、遠隔コードをインストール・実行します。

攻撃者は

domain.txt
ファイルを編集することで、新しいサーバーへの接続先を変更できます。インフェクトされたホストは、そのサーバーが返すすべてのコードを実行します。

  • 現在の状況: GitHub アカウント
    letters9813
    のリポジトリ(
    pythonclient-test
    )はリリースから約 2 時間後(13:40 UTC)に 404 エラーを返し、アカウントも削除されました。バックドアは現在サーバーアドレスを特定できず不活化していますが、以前実行されたホストでは二次的なコードが実行された可能性があります。

タイムライン (Timeline)

すべては 2026 年 10 月 21 日 UTC です。

時刻イベント
06:59タグ v1.107.0 のコミット
66c8f5b
が作成
08:50メインブランチへのコミット
a8113b0
(リリースソースのベース)
10:44正当なバージョン 1.106.2 が PyPI にアップロード
11:20 ~ 11:37マルウェア混入ホイール 1.107.0 の構築 (macOS, Linux, Windows)
11:39 ~ 11:40ホイール 1.107.0 の全ファイルが PyPI にアップロード
11:50
litellm-dispatcher[bot]
による GitHub リリース v1.107.0 の公開
13:40観測: PyPI から 1.107.0 が消滅、アカウント
letters9813
が削除された事実確認

侵害指示子 (Indicators of compromise)

ネットワーク関連

  • www.litellm[.]dev: 盗まれたデータを格納するサーバー。
    • URL:
      http://www.litellm[.]dev/healthcheck
    • ヘッダー:
      X-Token: XWiA8gZNa7NcX2XRoAEb
  • raw.githubusercontent[.]com/letters9813/pythonclient-test/main/domain.txt: バックドアがサーバーアドレスを読み取る場所(アカウント削除済み)。
  • hxxp:///codepy: 第二段階の悪意あるコードのダウンロード先。
  • 169.254.169.254: Python プロセスからの AWS インスタンス認証情報の窃取対象(メタデータサービス)。

ホスト関連

  • cook.pth, cook.py, sitecustomize.py (
    site-packages
    ): インプラント(マルウェア)ファイル。
  • /tmp/.pc_once_72129118c59f5636c0bb: データをアップロード済みであることを示すフラグファイル。
  • /tmp/remote_code_loader.lock: バックドアデーモンが実行された証拠。
  • PRIVCOLLECT_ACTIVE=1: インフェクトされたプロセスの環境変数。
  • 親 PID 1、独自のセッション、作業ディレクトリ / の Python デーモン: バックドアループの動作パターンを示す特徴。

ファイルハッシュ (SHA-256)

マチュリンで構築された攻撃ホイールのハッシュ値です(Windows ホイールは CRLF ラインエンドのため異なるハッシュ値を持ちます)。

ファイル名システムSHA-256 ハッシュ
litellm-1.107.0.tar.gz
(全プラットフォーム)
2befe2a79fb4fbbd9a543b5b40b530c8cffa8771bab22b8fb22b2e4ae3b1f819
litellm-1.107.0-cp310-abi3-manylinux_2_28_x86_64.whl
Linux (x86_64)
462d0c9f67ca522d9e0e4acd245e90b36ce0d5353604a66bb7c43a1ec4a6fcf7
litellm-1.107.0-cp310-abi3-manylinux_2_28_aarch64.whl
Linux (aarch64)
668169d35b87bf51324080390b1b1c5ab12bd335cfe5f1a99e3689abd5e02ae6
litellm-1.107.0-cp310-abi3-musllinux_1_2_x86_64.whl
Linux (musl)
1bbce8caa94f01c0aaa0b7ddae51553a8a32e1ce53d96d44fe583272aff7ad00
litellm-1.107.0-cp310-abi3-musllinux_1_2_aarch64.whl
Linux (musl aarch64)
c2e32d0ce2548aa662c18bf5001911a79fe5b30cf8357132275add02fdcde054
litellm-1.107.0-cp310-abi3-macosx_10_12_x86_64.whl
macOS (x86_64)
7598727f209d717041db37f7dca271d3a7d328a279890e0e1d55375729aeb86d
litellm-1.107.0-cp310-abi3-macosx_11_0_arm64.whl
macOS (arm64)
0aaf7ba346d41ef2f40390436738b001180d5a1c03aa093f121078a9969d9a1a
litellm-1.107.0-cp310-abi3-win_amd64.whl
Windows (x86_64)
12d4ccc5c6f8d35cf4f2cf233b7f3e418e863e657d81ff5f5fc9e210005b9484

インプラントファイルのハッシュ値 (Linux/macOS vs Windows) 注:Windows 版では CRLF ラインエンドによりハッシュ値が異なります。

ファイルLinux / macOS ハッシュWindows ハッシュ
cook.pth
7f191632e7320705d154b85204f1ae546b543acbd7e8861229b76f5042b92bdb84dc8c8
2c0a4a4a62552ef826b49fcc86d1a5c4a5d0f2c06665723f93d129d7d
cook.py
9dd0a3926f96a37eb86cf1ee2310d9be93139cc4ebef3ef9e2efe9531390be2503ac
2a8b752605d1d7710979c17ff18b03dd978203ba23ba97fd8ce3d6f897ea
sitecustomize.py
34bef04fe88ac9d0aae0475630b1738681d15b94f233ac8aa46eacf5968305fab
6122440d0d9cb1eb1ade9933f49214da8c31288de7710c076c2680dfa528465

本レポートは SafeDep による調査結果に基づいています。

同じ日のほかのニュース

一覧に戻る →

2026/10/22 6:58

鉄道セキュリティ開示

## Japanese Translation: レイルウェイは、本日早些に暗号化された顧客の環境変数への未許可のサードパーティアクセスを検知した直後、すべてのデプロイを一時停止しました。証拠によれば、攻撃者は一部の変数の復号化された内容を取得しており、これには API キー、データベース認証情報、プライベートレジストリ認証情報といったシークレットが含まれている可能性があります。影響範囲は現在ユーザーの一部に限られていますが、深刻度のためレイルウェイは上流プロバイダーに対し鍵の取り消しを能動的に行っています。本件のインシデントは、AI 推論サービスへの侵害を狙うプラットフォーム企業を標的とする攻撃の広範な傾向と一致します。影響を受けたアカウントは、調査の詳細が確認されると、直接的にメールで連絡されます。範囲およびステータスに関するさらなる更新は、公式アナウンスメントおよび status.railway.com を通じて共有されます。ユーザーは強く推奨されるのは、直ちにレイルウェイ(API キーおよびレジストリ認証情報を含む)に格納されているすべての環境変数をローテートし、サービスのログで不審な活動を審査することです。ビルドが完全に復元されるまで、新しいバージョンのロールアウトは行えません。

2026/10/22 0:48

本日の PHP セキュリティリリースとセキュリティ強化の取り組み

## Japanese Translation: PHP は、無認証リモートコード実行 (RCE) を可能にする 2 つの深刻な脆弱性情報である CVE-2026-109618 および CVE-2026-109619 を解消するため、緊急に重要なセキュリティアップデート (バージョン 8.2.35 から 8.5.12) をリリースしました。これらの不備はメモリ管理およびエラー処理の核心的な問題に起因し、ほぼ全てのサーバーリクエストに影響を与えています。脆弱性は当初、2024 年の Quarkslab による監査の際に特定されましたが、互換性維持上のリスクとサードパーティ製拡張機能全体での合意形成が必要だったため、修正は遅延されていました。OpenAI や Wiz などの企業から 2026 年後半に追加の攻撃ベクトルの報告があり、PHP ファウンデーションは AI セキュリティエンジニアの Volker Dusch を補強した専用の「エコシステムセキュリティチーム」を設立し、高度な AI モデルを用いた主要テクノロジー企業と連携して複雑なエクスプロイトレポートを検証するパートナーシップを結んでいます。パッチの詳細が意図せずリークされたことに伴い(具体的には 10 月 20 日に誤った CVE ID が示された)、リリース日は 10 月 22 日から 10 月 21 日に前倒しされ、迅速な対応と安定性の維持の両立を図っています。以降、プロジェクトは 15 の CVE を公表し、100 以上のレポートを処理しており、AI を用いて検証を行いながら人間がパッチを最終調整しています。この強化されたセキュリティ態勢を持続させるため、PHP ファウンデーションは政府、ホスティングプロバイダー、ドイツ主権技術庁(German Sovereign Tech Agency)などの企業から資金支援を募り、サードパーティからの継続的な脅威への対応のために深層コードベースの専門家を採用しています。

2026/10/22 4:01

GitLab 重大パッチリリース

## Japanese Translation: 2026年10月21日、GitLab はコミュニティ版およびエンタープライズ版(バージョン 19.5.1、19.4.3、19.3.6 などを含む)の重大なセキュリティパッチをリリースし、自己管理ユーザーに対し即座にアップグレードを行うよう要請しました。これは、CVSS 10.0 の整数オーバーフローにより任意の実行コードが可能になる脆弱性 (CVE-2026-110264)、アカウント乗っ取りを可能にする認証上の欠陥 (CVE-2026-15723) および機密メタデータを晒す各種キャッシュ poisoning や権限回避などを是正するためです。GitLab.com と特定の専用テナントは既に安全ですが、アップグレードを遅らせるとシステムが攻撃に対して脆弱になります。管理者は未認証の実行コード実行やデータ漏洩を防ぐためにアップグレードの優先度を高める必要があります。特に、シングルノードのホスト型インスタンス(バージョン 19.4.3 および 19.3.6)は複雑なデータベースマイグレーションにより必須のダウンタイムを要しますが、マルチノード設定ではゼロダウンタイムで更新を進めることができます。これらのリスクはパッチ展開前にハッカーワン (HackerOne) の研究者によって特定されていました。 ## Text to translate: The summary is of high quality but could be slightly improved by explicitly mentioning the existence of multiple specific CVEs rather than just grouping them, and perhaps acknowledging the release of several version numbers beyond just the ones requiring downtime to be fully faithful to the list. However, given the constraints of a single paragraph, the current version is acceptable. **Improved Summary:** On October 21, 2026, GitLab released critical security patches for its Community and Enterprise editions (including versions 19.5.1, 19.4.3, 19.3.6, etc.), urging immediate upgrades for self-managed users to address severe vulnerabilities like CVSS 10.0 integer overflow enabling arbitrary code execution (CVE-2026-110264), authentication flaws allowing account takeover (CVE-2026-15723), and various cache poisoning and authorization bypasses that expose confidential metadata. While GitLab.com and specific dedicated tenants are already secure, delaying updates leaves systems open to exploitation. Administrators must prioritize upgrading to prevent unauthenticated code execution and data leaks. Notably, single-node self-hosted instances (specifically versions 19.4.3 and 19.3.6) will face mandatory downtime due to complex database migrations, whereas multi-node setups can proceed with zero downtime. These risks were previously identified by researchers on HackerOne before the patch deployment.

PyPI の LiteLLM バージョン 1.107.0 で、資格情報窃取プログラムとバックドアがインストールされる脆弱性情報 | そっか~ニュース