PyPI パッケージlightning:PyTorch Lightningが改ざん、マルウェアを埋め込まれる

セキュリティニュース

投稿日時: 更新日時:

PyPI パッケージlightning:PyTorch Lightningが改ざん、マルウェアを埋め込まれる

2026年4月30日、機械学習・ディープラーニング向けPythonフレームワーク「lightning(旧称:PyTorch Lightning)」のPyPI上の2つのバージョン(2.6.2・2.6.3)に情報窃取マルウェア(クレデンシャルスティーラー)が仕込まれていたことが判明しました。

Lightning AIの公式GitHubセキュリティアドバイザリによれば、攻撃者がPyPI発行チャンネルの認証情報を侵害し、正規のソースコードにバックドアを注入したビルドを直接PyPIにプッシュしました。悪意あるバージョンがPyPI上に公開されていたのは42分間でしたが、その間にインストール・import lightningを実行した環境では認証情報が窃取された可能性があります。

現在、PyPIではバージョン2.6.1(2026年1月30日リリース)がクリーンなバージョンとして利用可能です。

この記事のサマリー

  • lightning(PyTorch Lightning)2.6.2・2.6.3が2026年4月30日にPyPIに公開され、クレデンシャルスティーラーが仕込まれていました。悪意あるバージョンの公開期間は42分間
  • 攻撃者はPyPI発行チャンネルの認証情報を侵害し、ソースコードリポジトリ(GitHub)を経由せずに直接PyPIへ悪意あるビルドをプッシュしました。ソースコードリポジトリ自体が改ざんされた証拠はないとされています。
  • 悪意あるバージョンはimport lightningの実行だけで自動的にバックグラウンドプロセスを起動し、GitHubからBun JavaScript ランタイムをダウンロードして**11.4 MBの難読化JavaScriptペイロード(router_runtime.js)**を実行します。
  • 窃取対象はGitHubトークン・AWS/GCP/Azure認証情報・Kubernetes・Docker・CI/CDシークレット・.envファイル・ブラウザ保存認証情報です。
  • さらにペイロードは自己増殖ワーム機能を持ち、窃取したGitHubトークンを使って被害者がアクセスできるリポジトリの最大50ブランチへ悪意あるファイルを自動コミットします。コミット者として**「claude<[email protected]>」という偽Anthropic IDを使用**します。
  • 本攻撃は直前に発生したMini Shai-Hulud(SAP関連npmパッケージへの攻撃)と同一の攻撃者グループ(TeamPCP)による連続攻撃キャンペーンとみられています。
  • Microsoftのテレメトリによれば、悪意ある活動の影響を受けたのは「少数のデバイス」で「限定的な環境に封じ込められた」とされていますが、Wiz・Aikido・Socket・StepSecurityが独自に調査しており全容の解明は継続中です。
  • 現時点での安全なバージョンは2.6.1です。2.6.2・2.6.3は削除済みです。

lightningとは

lightning(PyTorch Lightning)はLightning AIが開発するオープンソースのディープラーニングフレームワークで、PyTorchに高レベルのインターフェースを提供し、AI/MLモデルの訓練・展開・本番運用を効率化します。月間ダウンロード数は791万件超(lightningパッケージ単体)に達し、旧パッケージ名のpytorch-lightningを含めると月間1,100万件以上に上ります。GitHubスター数は31,100超です。

攻撃者がこのパッケージを狙った戦略的な意図は明確です。lightningを使用する開発者環境には通常、GPUクラスターの認証情報・クラウドIAMトークン・Hugging Face APIキー・Weights & BiasesトークンおよびCI/CDシークレットなど、モデル訓練インフラに紐づく高価値なシークレットが存在しています。

攻撃の仕組み

フェーズ1:PyPI発行チャンネルの侵害

Lightning AIの公式声明によれば「攻撃者はPyPI認証情報へのアクセスを取得し、オープンソースコードをクローン・悪意あるペイロードを注入してソースコントロールを完全に迂回する形でPyPIへ直接プッシュした」とのことです。ソースコードリポジトリ(GitHub)には悪意あるコードが混入した証拠はなく、今回の攻撃の起点はPyPI発行に使用する認証情報の漏洩です。

なお、2.6.3は2.6.2のバグ修正版ではなく、悪意ある機能を維持しながらメタデータとローダーの挙動を微妙に変更して検知回避を試みた版であることがSonatypeの解析で確認されています。

フェーズ2:import時の自動実行

悪意あるバージョンには_runtime/という隠しディレクトリが含まれており、__init__.pyが改ざんされています。import lightningを実行した瞬間、以下のチェーンが自動起動します。

import lightning
    → __init__.pyが改ざん済み
    → バックグラウンドデーモンスレッドが起動
    → GitHubからBun JavaScript ランタイムv1.3.13をダウンロード
    → 11.4 MBの難読化JavaScriptペイロード(router_runtime.js)を実行
    → クレデンシャルの窃取・C2サーバーへの送信
    → リポジトリへの自己増殖ワーム

ユーザーへの警告は一切表示されず、処理はサイレントに実行されます。

フェーズ3:窃取対象の情報

カテゴリ 具体的な窃取対象
バージョン管理 GitHub Personal Access Token・fine-grainedトークン
クラウド AWS・GCP・Azure認証情報
コンテナ・K8s ~/.docker/config.json~/.kube/config・ServiceAccountトークン
CI/CDシークレット 環境変数・npmトークン・PyPIトークン
ブラウザ ブラウザに保存された認証情報
その他 .envファイル・~/.netrc・Vault トークン

窃取されたデータは4チャンネル並列でC2サーバーに送信されます(うち1チャンネルはHTTPS POSTでポート443経由)。

フェーズ4:自己増殖ワーム機能

窃取したGitHubトークンの有効性を確認後、ペイロードはGitHub GraphQL APIを使用して被害者がアクセスできるリポジトリに対して以下のファイルを自動コミットします。

コミットされるファイル 用途
.vscode/tasks.json VS Codeタスクバックドア
.claude/router_runtime.js ペイロードの自己コピー
.claude/settings.json Claude Codeの設定改ざん
.claude/setup.mjs 難読化セットアップスクリプト
.vscode/setup.mjs 同スクリプト(VS Codeパス)
.github/workflows/format-check.yml GitHub Actionsワークフロー

コミットの著者として**「claude<[email protected]>」**(Anthropicの公式IDを模倣した偽ID)が使用されます。これによりCI/CDパイプラインがワークフローを実行し、次にリポジトリをクローンした開発者にもペイロードが配信される「連鎖感染」が発生します。

Mini Shai-Hulud・TeamPCPとの関連

本攻撃はAikido・Socket・WizによってそれぞれMini Shai-HuludキャンペーンまたはTeamPCPという攻撃グループに関連付けられています。前日(4月29日)にはSAP関連の4つのnpmパッケージ(@sap/cds関連)への攻撃が確認されており、同じBunランタイム・同じ難読化手法・同じ4チャンネル並列送信が使用されました。

Wiz は「Intercom(intercom-client npm 7.0.4)の侵害も同一キャンペーンの一部」と評価し、共有されたRSA公開鍵を証拠として高確度の帰属を示しています。一方、Socket・Semgrepは独立した攻撃者が同様の手法を使用している可能性を指摘するなど、帰属については複数の評価が存在します。

なお本件はelementry-data PyPIパッケージへの攻撃(2026年4月24日)や、Bitwarden CLI npmパッケージへの攻撃(いずれもTeamPCP帰属疑い)とも手法の類似性が指摘されています。

▶ 関連記事:月間110万ダウンロードのPyPIパッケージ「elementary-data」が改ざん——GitHub Actionsのスクリプトインジェクションでインフォスティーラーを配布

DevOps・セキュリティ担当者が今すぐ取るべき対応

パッケージのバージョン確認・ダウングレードとして、pip show lightningでバージョンを確認してください。2.6.2または2.6.3と表示された場合は直ちにpip install lightning==2.6.1を実行してください。

全シークレット・認証情報のローテーションとして、lightning==2.6.2または2.6.3をインストールしimport lightningを実行した環境では、以下をすべてローテーションしてください。GitHub Personal Access Token・fine-grainedトークン、AWS IAMアクセスキー・Secrets Manager内のシークレット、GCP・Azure認証情報、Kubernetesシークレット・ServiceAccountトークン、CI/CDの全シークレット変数、npmパブリッシュトークン・PyPIトークンが対象です。

ローテーションは必ず別の信頼できるマシンから行うことが重要です(侵害された可能性のある環境からは行わない)。

GitHubリポジトリの不審なコミット確認として、[email protected]を著者とするコミット・format-check.ymlワークフローの追加・.claude/.vscode/への不審なファイル追加・ブランチ作成が行われていないかを確認してください。

内部ミラー・Dockerレイヤー・ビルドキャッシュの確認として、PyPIの公開削除・検疫が行われても、内部パッケージミラーやDockerイメージのレイヤーにキャッシュが残っている可能性があります。router_runtime.jsEveryBoiWeBuildIsAWormyBoiA Mini Shai-Hulud has Appearedという文字列が存在しないかを確認してください。


よくある質問(FAQ)

Q. lightning==2.6.1を使用していれば安全ですか? はい。2.6.1(2026年1月30日リリース)はクリーンなバージョンとして確認されており、現時点で安全に使用できます。

Q. インストールだけで感染しますか?importが必要ですか? import lightningを実行した時点でペイロードが起動します。pip installでインストールしただけでimportを実行していない場合、ペイロードは起動していない可能性があります。ただし念のためバージョンを確認してダウングレードすることを推奨します。

Q. pytorch-lightningパッケージも影響を受けましたか? Snykの分析によれば、旧パッケージ名のpytorch-lightningは影響を受けず、クリーンな2.6.1のまま維持されていたとのことです。

Q. トランジティブ依存(間接依存)経由でも感染しますか? はい。Intercomの事案では、pyannote-audioをインストールした際にlightningが依存関係として取り込まれ、間接的に感染した事例が確認されています。依存関係ツリーにlightningが含まれている場合も確認が必要です。


参考情報