PyTorch Lightning の AI トレーニングライブラリに、神話上の風化獣「シャイ・フールード」をテーマにしたマルウェアが検出された

2026/05/01 1:09

PyTorch Lightning の AI トレーニングライブラリに、神話上の風化獣「シャイ・フールード」をテーマにしたマルウェアが検出された

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

要約

Japanese Translation:

人気の PyPI パッケージ「lightning」の脆弱なバージョン 2(2.6.2 および 2.6.3)が、2026 年 4 月 30 日に公開されたことが、"Shai-Hulud"というテーマのオブフスクエードされた JavaScript 負荷を含むサプライチェーン攻撃で利用されました。マルウェアはモジュールをインポートするだけで自動的に実行され、認証情報、認証トークン、環境変数、クラウドシークレット(AWS、Azure Key Vault、GCP Secret Manager)、およびローカルファイルシステムの認証情報ファイルを盗みます。また、「EveryBoiWeBuildIsaWormBoi」という特定の命名規則と、"EveryBoiWeBuildIsAWormyBoi"で始まるコミットメッセージを用いて、公開の GitHub リポジトリを毒付けようとし、さらに C2 サーバーへの HTTPS POST、二重 base64 符号化されたトークンを伴う GitHub コミット検索デッドドロップ、攻撃者による公開リポジトリの利用、および

ghs_
トークンを用いて被害者のリポジトリに直接プッシュする、4 つの並列データ流出チャネルを利用しています。

この攻撃は、悪用された npm 認証情報を使用して公開されるあらゆるパッケージに対して、14.8 MB の

setup.mjs
ドロッパー(Bun ランタイム v1.3.13 をブートストアップする)と
router_runtime.js
ファイルを注入することで、PyPI から npm へと感染を広げます。永続性を確保するために、マルウェアは人気のある開発ツール設定ファイルにフックを注入します:Claude Code の
.claude/settings.json
への "SessionStart"フックと、VS Code の
.vscode/tasks.json
への
runOn: folderOpen
タスクです。攻撃者が書込みアクセス権を持っている場合、「Formatter」という名前の悪意のある GitHub Actions ワークフローがプッシュされ、「format-results」というダウンロード可能なアーティファクトとしてシークレットがダンプされます。さらに、
_runtime/
ディレクトリや
start.py
のようなファイルに隠れたフックも注入されます。

セキュリティ企業 Semgrep は、特定の検出規則を含む緊急のアドバースを発表しており、詳細は https://semgrep.dev/orgs/-/advisories で入手できます。影響を受けたユーザーは、直ちにすべての盗まれた認証情報(GitHub トークン、クラウドキー、API キー)の再発行を行い、

.claude/
.vscode/
_runtime/
ディレクトリなどに注入された悪意のあるスクリプトを含むプロジェクトを監査し、将来のサプライチェーン侵害を防ぐために厳格な依存関係フィルタを実装する必要があります。

本文

Lightning PyPI パッケージ「lightning」は、広く利用されているディープラーニングフレームワークですが、2026 年 4 月 30 日に公開されたバージョン 2.6.2 および 2.6.3 がサプライチェーン攻撃の影響を受けました。画像分類器の構築、LLM のファインチューニング、拡散モデルの実行、時系列予測モデルの開発を行うチームにとって、「lightning」は依存ツリーに必ず存在するはずです。「pip install lightning」という一行の実行だけで、悪意あるコードが活性化します。

攻撃バージョンには、モジュールのインポート時に自動的に実行される暗号化された JavaScript パイロードを含む隠蔽された「_runtime」ディレクトリが含まれています。この攻撃では、認証クレデンシャル、トークン、環境変数、クラウド上の機密情報を窃取すると同時に、GitHub リポジトリへの感染(ポイズニング)を試みています。また、「シャイ・フリュッド」というテーマに基づき、

EveryBoiWeBuildIsaWormBoi
という名の公開リポジトリを作成するなど、その特徴も確認されています。当機構は、この攻撃を「Mini Shai-Hulud」キャンペーン背後にいた同じ Threat Actor の所为であると考えます。IOC(感染指標)の構造もその作戦と一致しており、悪意のあるコミットメッセージが「ダンジョン」という作品を意識した命名規則に従っており、今回使用する前辞頭
EveryBoiWeBuildIsAWormyBoi
は、元の Mini Shai-Hulud 攻撃との区別のために設けられたものです。

影響を受けるパッケージ

  • lightning バージョン 2.6.2
  • lightning バージョン 2.6.3

Semgrep ユーザー向け

Semgrep は、この脆弱性をカバーするアドバイザリーとルールを提供していますので、以下の手順でプロジェクトを確認してください:

  • リストを最近スキャンしていない場合は、新しいスキャンを起動してください。

  • advisories ページを確認し、最近これらのパッケージバージョンをインストールしたプロジェクトがあるか確認してください。

  • 依存関係フィルタで一致するか確認してください。

    • 「No matching dependencies」(一致する依存関係なし)が表示された場合:貴社が保有するどのプロジェクトも、現在悪意ある依存関係をアクティブに使用していないことを意味します。
    • もし「Match」が出た場合は
      • 以下の補足情報により、是正措置と感染指標に関する追加のアドバイスが続きます。
      • さらに、下記 IOCs に記載された注入ファイル(
        .claude/
        および
        .vscode/
        ディレクトリ内の予期せぬコンテンツ)を含むリポジトリを確認してください。
      • 影響を受けた環境で保管されていた可能性のあるすべての GitHub トークン、クラウドクレデンシャル、API キーを回転化(再発行)してください。

サプライチェーン攻撃への対処に関する一般的なアドバイス(「クールダウン期間」の対策など)については、「"$foo compromised in $package"」および「manager. Attackers are Still Coming for Security Companies」という投稿で当社の標準的なガイドラインが記されています。

複数エコシステムへの拡大:PyPI から npm へ

Mini Shai-Hulud が直接 npm を標的とにしたのに対し、今回の攻撃ではエントリポイントとなったのは PyPI です。マルウェアのパイロード自体は引き続き JavaScript で構成されており、蠕虫の伝播経路は npm を通じて行われています。

  • 実行後、マルウェアが npm publish クレデンシャルを発見すると、トークンで公開可能なすべてのパッケージに
    setup.mjs
    ドロッパーと
    router_runtime.js
    を注入します。
  • これにより、スクリプト
    scripts.preinstall
    がドロッパーの実行を実装し、マイナーバージョン番号を上げ、再度パブリッシュされます。
  • したがって、これらのパッケージのいずれかをインストールした下流の開発者にとって、彼らのマシン上での完全なマルウェア実行、トークンの窃取、およびパッケージの蠕虫化(感染)が発生します。

動作原理

抽出コンポーネントは、前回のキャンペーンで導入された「Mini Shai-Hulud」メカニズムをデザイン面で共有しており、個々のパスがブロックされても盗まれたデータを外部に出すために 4 つの並列チャネルを使用しています。

  1. C2 への HTTPS POST: 盗まれたデータは、即時にポート 443 を介して攻撃者制御サーバーへ POST されます。ドメインとパスは、静的分析を困難にするため、パイロード内で暗号化文字列として格納されています。
  2. GitHub コミット検索によるデッドドロップ: マルウェアは、
    EveryBoiWeBuildIsAWormyBoi
    で始まるコミットメッセージを持つ GitHub のコミット検索 API をポーリングします。これらは二重に base64 符号化されたトークンを
    EveryBoiWeBuildIsAWormyBoi:<base64(base64(token))>
    の形式で運搬しています。一度復号化されると、このトークンは Octokit クライアントの認証に使用され、さらなる操作が可能になります。
  3. 攻撃者制御の公開 GitHub リポジトリ: 新しい公開リポジトリが作成され、ランダムに選定された「ダンジョン」関連の名前と、「A Mini Shai-Hulud has Appeared」という説明文が設定されます(GitHub で直接検索可能です)。盗まれたクレデンシャルは
    results/results-<timestamp>-<n>.json
    としてコミットされます(API を介した base64 符号化済みで、中身はプレーン JSON)、ファイルサイズが 30 MB 以上の場合は番号付きチャンクに分割されます。コミットメッセージには、「chore: update dependencies」というカバー用の文言が使われます。
  4. 被害者のリポジトリへのプッシュ: もしマルウェアが GitHub Server Token (
    ghs_
    ) を入手した場合、盗まれたデータは直接、被害者自身の
    GITHUB_REPOSITORY
    のすべてのブランチにプッシュされます。

何が窃取されるのか

マルウェアは、ローカルファイル、環境変数、CI/CD パイプライン、クラウドプロバイダにまたがるクレデンシャルを標的とします:

  • ファイルシステム:
    ghp_
    ,
    gho_
    , および
    npm_
    トークン(各ファイル最大 5 MB)を検出できる 80 個以上のクレデンシャルファイルパスをスキャンします。
  • シェル/環境:
    gh auth token
    を実行し、
    process.env
    からすべての環境変数をダンプします。
  • GitHub Actions: Linux ランナー上では、埋め込まれた Python を使用して
    Runner.Worker
    プロセスのメモリをダンプし、「isSecret':true」とマークされたすべてのシークレット、および
    GITHUB_REPOSITORY
    ,
    GITHUB_WORKFLOW
    を抽出します。
  • GitHub オーガ: トークンのスコープ(repo, workflow)をチェックし、GitHub Actions のオーガシークレットを反復処理して確認します。
  • AWS: 環境変数、
    ~/.aws/credentials
    プロフィール、IMDSv2 (169.254.169.254)、ECS (169.254.170.2) を試行して
    sts:GetCallerIdentity
    を呼び出し、さらにすべての Secrets Manager 値と SSM パラメータを列挙して取得します。
  • Azure: DefaultAzureCredential を使用してサブスクリプションを列挙し、Key Vault のシークレットにアクセスします。
  • GCP: GoogleAuth を介して認証し、すべての Secret Manager シークレットを列挙して取得します。

ターゲットには、ローカル開発環境、CI ランナー、および三大クラウドプロバイダのすべてが含まれています。影響を受けた期間中に悪意あるパッケージを取り込んだあらゆるマシンは、完全に侵害されたものとみなす必要があります。

開発者ツールによる永続化

リポジトリに入っただけでなく、マルウェアは二大一般的な開発者ツールのうち 2 つに対する永続性フックを植え付けます。これは、実世界の攻撃において Claude Code のフックシステムを悪用したドキュメント化された最初の実例の可能性があります。

  • Claude Code:
    .claude/settings.json
    • マルウェアは、リポジトリの Claude Code セットアップに
      matcher: "*"
      を持つ
      SessionStart
      フックを書き込み、それを
      node .vscode/setup.mjs
      へ指し示します。
    • 感染されたリポジトリで開発者が Claude Code を起動するたびに発火します。ツールを使用したりユーザーが追加のアクションをとったりする必要はありません。
  • VS Code:
    .vscode/tasks.json
    • 別のフックが、プロジェクトフォルダを開くたびに
      node .claude/setup.mjs
      を実行する
      runOn: folderOpen
      タスクを通じて、VS Code ユーザーを対象とします。

ドロッパー:setup.mjs 両方のフックは、自律的な Bun ランタイムブートストッパーである

setup.mjs
を呼び出します。Bun がインストールされていない場合、それは静かに GitHub リリースから
bun-v1.3.13
をダウンロードします(Linux x64/arm64/musl、macOS x64/arm64、Windows x64/arm64に対応)。その後、
.claude/router_runtime.js
(完全な 14.8 MB のパイロード)を実行し、
/tmp
からクリーンアップします。

ボーナス・パイロード:悪意ある GitHub Actions ワークフロー マルウェアが書き込みアクセスを持つ GitHub トークンを保有している場合、被害者のリポジトリに

Formatter
という名前のワークフローをプッシュします。すべてのプッシュ時に、
${{ toJSON(secrets) }}
を使用してすべてのリポジトリシークレットをダンプし、ダウンロード可能な Actions アーティファクト「format-results」としてアップロードします。アクションは特定のコミット SHA にピン留めされており、見かけ上正当性を与えています。

  • CI 中に感染した lightning パッケージを受け取った、かつ書き込みアクセスを持つトークンを保持していたすべてのリポジトリで、これらのファイルを監査してください。

感染指標 (IOCs)

以下の指標を探してください:

  • EveryBoiWeBuildIsAWormyBoi
    で始まるコミットメッセージ(デッドドロップトークン運搬手段、GitHub コミット検索で検索可能)。
  • 説明文が「A Mini Shai-Hulud has Appeared」の GitHub リポジトリ(攻撃者によるデータ抽出用リポジトリ、直接検索可能)。

影響を受けるパッケージ:

  • lightning@2.6.2
  • lightning@2.6.3

ファイル/システムアーティファクト:

  • _runtime/start.py
    : インポート時に変数初期化を行い、パイルードを実行する Python ロoader。
  • _runtime/router.js
    : 14.8 MB の暗号化された JavaScript パイロード(Bun ランタイム)。
  • _runtime/
    : 悪意あるパッケージバージョンに追加されたディレクトリ。
  • .claude/router_runtime.js
    : 被害者リポジトリに注入されたマルウェアコピー。
  • .claude/settings.json
    : 被害者リポジトリに注入された Claude Code フック設定。
  • .claude/setup.mjs
    : 被害者リポジトリに注入されたドロッパー。
  • .vscode/tasks.json
    : 被害者リポジトリに注入された VS Code 自動実行タスク。
  • .vscode/setup.mjs
    : 被害者リポジトリに注入されたドロッパー。

同じ日のほかのニュース

一覧に戻る →

2026/05/01 4:40

リンクedin は、拡張機能を 6,278 つスキャンし、その結果を全てのリクエストに暗号化して含めています。

## Japanese Translation: LinkedIn は、同意なく特定の Chrome 拡張機能を検出し処罰するために、ユーザーのブラウザを秘密裏にスキャンしており、基本的なプライバシー原則違反となっています。2026 年 4 月現在、そのスキャンカタログには 6,278 の拡張機能エントリが含まれており、少なくとも 2017 年から(当初は 38 から)積極的に維持されています。各拡張機能について、LinkedIn は chrome-extension:// URL に対して fetch() リクエストを發行し、失敗した場合はエラーがログに記録され、成功した場合は無視されて解決し、1 回の訪問あたり最大 6,278 のデータポイントが発生します。~1.6 MB の minified(圧縮された)かつ部分的に暗号化された JavaScript ファイルには、ハードコードされた拡張機能 ID と特定の web_accessible_resources パスが埋め込まれています。スキャンは 2 つのモードで実行されます:Promise.allSettled() を使用した同時並列リクエストと、設定可能な遅延( 때로는 requestIdleCallback に委譲される場合もあり)を持つ順次リクエストであり、パフォーマンスへの影響を隠蔽するためです。二次的なシステム「Spectroscopy」は、ハードコードされたリストに含まれていなくても chrome-extension:// URL を参照するアクティブなインタラクションを検出するために、独立して DOM ツリーを行進します。 拡張機能のみならず、LinkedIn の APFC/DNA ファフィンガープリントでは、キャンバスフィンガープリント、WebGL レンダラー、音声処理、インストール済みフォント、画面解像度、ピクセル比率、ハードウェア並列性、デバイスメモリ、バッテリーレベル、WebRTC によるローカル IP、タイムゾーン、言語など 48 の特性を収集し、これらを開示なしに収穫します。検出された拡張機能 ID は AedEvent および SpectroscopyEvent オブジェクトにパッケージ化され、RSA 公開鍵で暗号化され、LinkedIn の li/track エンドポイントに送信され、セッション中の後続のすべての API リクエストにおいて HTTP ヘッダーとして注入されます。 これらの実践により、求職ツール、政治コンテンツ拡張機能、宗教活動ツール、障害者支援ソフトウェア、神経多様性関連アプリケーションへの執行措置が可能となり、また LinkedIn は個人の詳細(例:アクティブな求職活動)を推測し、従業員間の組織ツールおよびワークフローをマッピングすることが可能です。この暗黙的なスキャンは LinkedIn のプライバシーポリシーに開示されておらず、EU デジタル市場法に違反しており、ゲートキーパーであるマイクロソフト(2024 年に指定)に対し、サードパーティツールを許可し、差別的な執行を禁止することを求めています。browsergate.eu によって公開準備が整っている完全な裁判所文書を通じて、法律当局——バイエルン州中央サイバー犯罪捜査庁(バーミング)など——は刑事調査を開始しました。ユーザーおよび企業は今後、プライバシー侵害とセキュリティ構成の暴露に対するリスクが高まっています。

2026/05/01 5:33

アップル、第四半期業績を発表

## Japanese Translation: アップルは、2026 年 3 月 28 日に終了した fiscal second quarter(第 2 四半期)で史上最高益を記録し、売上高は 1,112 億ドル(前年同期比 17% 増)、一株当たり利益は 2.01 ドル(同 22% 増)となりました。この業績は、iPhone 17 シリーズ(新 iPhone 17e を含む)への特異な需要から生じた iPhone 売上高の歴代最高記録、サービスの歴史的な成長、そして M4チップ搭載 iPad Air と MacBook Neo の成功した発売によって牽引されました。稼働キャッシュフローは四半期史上最高の 280 億ドルを超え、アップルの既存基盤はすべての主要製品カテゴリーおよび地域で史上最高に達しました。このモメンタムを報いるため、アップルは一株当たり 0.27 ドルの配当(4% 増)を宣告し、2026 年 5 月 14 日に記録日(レコードデー)として 2026 年 5 月 11 日の株主に対して支払い可能にするほか、追加の 1,000 億ドル規模の自社株式買回プログラムを承認しました。アップルの利益発表会合は、2026 年 4 月 30 日午後 2 時(太平洋標準時間)にライブストリーミング開始され、約 2 週間後のリプレイも利用可能です。詳細は apple.com/investor/earnings-call で確認できます。同社は堅調な財務体質とすべての主要セグメントにおける消費者の積極的な関与を強調しました。

2026/05/01 2:14

F# でゲームボーイエミュレータを作りました。

## Japanese Translation: Nick Kossolapov の「Fame Boy」は、個人的な学習プロジェクトとして F# で構築された Game Boy エミュレータであり、デスクトップ環境(Raylib)および Web 環境(Fable/JavaScript)の両方をサポートしています。Kossolapov は以前「From NAND to Tetris」や CHIP-8 エミュレータ(Fip-8)の学習経験を活かし、F# の強力な型付けを用いて CPU 命令を代数型でモデル化し、概念上 512 のopcode を 58 のドメインに削減しました。シングルスレッドのコアでは、「stepper」という関数を用いてコンポーネントをシーケンシャルに実行することで並列なハードウェア動作を模倣しており、音声アクティブ時のオーディオサンプリング(32,768 Hz)またはターゲットフレームレート(約 60 FPS に相当する CPU サイクル数は約 17,500)のいずれかに基づいてサイクルを同期します。このエミュレータは、フロントエンドとのインターフェースとして `framebuffer` と `audiobuffer` という 2 つの配列および `stepEmulator()` と `getJoypadState()` という 2 つの関数を提供します。フラグ処理をモジュール化可能な構成に再設計するリファクタリングにより、 Heap アロケーションが減少し、従来のアプローチと比較してデスクトップ環境での FPS が約 10% 向上しました。技術仕様の基盤からテストケースを AI で生成することで厳格なテストレジの開発が可能となり、このプロセスは Tetris の著作権画面にある「timer winter」といった重要なバグも修正する助けとなりました。パフォーマンスベンチマークでは現代のデバイス(例:Ryzen 9 7900を搭載した Windows PC、M4 MacBook Air)で最高 1,000 FPS を達成し、「Roboto」などの特定の ROM では最適化後のデスクトップ環境で 1,943 FPS、Web 環境で 883 FPS という数値を記録しました。当初の Blazor ベースの Web バージョンは約 8 FPS に苦しんでいましたが、変換された JavaScript における 8 ビット無符号整数のビット演算截断エラーを修正することで解決されました。残る制限事項として、実際のハードウェアに対する PPU ピクセル FIFO タイミングの正確さに欠ける点が挙げられ、低レベル動作を利用したゲームでギルチを引き起こす可能性があります;今後のアップデートではこれらの不一致をパッチ適用し、パフォーマンスを損なうことなく完全なハードウェア忠実度を実現を目指します。

PyTorch Lightning の AI トレーニングライブラリに、神話上の風化獣「シャイ・フールード」をテーマにしたマルウェアが検出された | そっか~ニュース