世界を動かす技術を、日本語で。

ミニ・シャイ・フルードが再び襲来:314のnpmパッケージが侵害される

2026年5月19日原文(safedep.io)

概要

  • 2026年5月19日、 npmアカウント atool大規模に侵害 され、317パッケージに637の悪意あるバージョンが公開
  • 主要パッケージ (size-sensor、echarts-for-react等)が自動化された攻撃で汚染
  • Mini Shai-Huludツールキット 利用、 認証情報収集と二重流出経路 を実装
  • CI/CD環境・AIエージェント・VS Code などにも永続化を仕込む
  • 脅威の指標(IoC)影響範囲検知・防御策 について解説

npm atoolアカウント侵害の全貌

  • 2026年5月19日、 atool([email protected]) のnpmアカウントが 攻撃者に乗っ取られ、22分間で 637の悪意あるバージョン317パッケージ に自動公開
  • 被害パッケージ例:
    • size-sensor (月間4.2Mダウンロード)
    • echarts-for-react (3.8M)
    • @antv/scale (2.2M)
    • timeago.js (1.15M)
    • @antv系パッケージ 多数
  • payload498KBの難読化Bunスクリプト、SAP事案で使われた Mini Shai-Hulud と同一構造

攻撃フロー

  • preinstallフック (bun run index.js)でpayload実行
  • optionalDependenciesGitHub imposterコミット から二重にpayload配布
    • antvis/G2リポジトリ の孤立コミットを利用、正規コミット履歴には現れない
    • npm github:依存解決 の仕様を悪用し、SHA指定でpayload取得・実行

収集・流出対象

  • AWS認証情報 (env/config/EC2/ECS/SecretsManager)
  • Kubernetesサービスアカウントトークン
  • HashiCorp Vault・GitHub PAT・npmトークン・SSH鍵
  • ローカルパスワードマネージャ(1Password/Bitwarden/pass/gopass)
  • GCP/Azure/DB/Stripe/Slack/Docker認証情報
  • CI/CDのOIDCトークン交換・Sigstore署名正規署名アーティファクト も生成

データ流出経路

  • 2系統の並列流出:
    • GitHubパブリックリポジトリ へのGitオブジェクトコミット
      • User-Agent: python-requests/2.31.0
      • Duneシリーズ由来の命名パターン のリポジトリ
    • RSA+AES暗号化HTTPS POST (OpenTelemetryトレース偽装)
      • t.m-kosche[.]com/api/public/otel/v1/traces

永続化・拡散

  • .github/workflows/codeql.yml へ「Run Copilot」ワークフロー注入
    • secretsダンプ→アーティファクト化→自己削除
  • Claude Code/Codex/VS CodeSessionStart/タスクフック を仕込み再感染
  • systemd/macOS LaunchAgentkitty-monitorサービス 設置
    • GitHub dead-drop C2 (commitメッセージ署名コマンドで遠隔操作)
  • gh-token-monitorGitHubトークンを60秒ごと監視
  • Dockerソケット経由でホスト脱出・他Node.jsプロジェクトへ拡散

IoC(侵害指標)

  • 2026-05-19 01:44〜02:06 UTCatool が公開した全パッケージ
  • preinstall script: bun run index.js
  • Payload SHA256: a68dd1e6a6e35ec3771e1f94fe796f55dfe65a2b94560516ff4ac189390dfa1c
  • antvis/G2 の孤立コミット(例:1916faa365f2788b6e193514872d51a242876569)
  • optionalDependencies: @antv/setup: github:antvis/G2#<commit-sha>
  • exfilリポジトリ命名: {word1}-{word2}-{number}(Dune語句組み合わせ)
  • HTTPS exfil: t.m-kosche[.]com/api/public/otel/v1/traces
  • EC2/ECSメタデータへのHTTPリクエスト
  • chore/add-codeql-static-analysis ブランチ
  • .github/workflows/codeql.yml (Run Copilot名)
  • claude/settings.json /VS Code tasks.jsonへのフック
  • kitty-monitor/gh-token-monitor/cat.py 等のファイル

影響範囲とリスク

  • semver範囲指定(例:^3.0.6) のプロジェクトは 自動的に汚染バージョンを解決
  • CI/CD・AIエージェント・VS Code など 多様な環境で再感染・永続化
  • 正規署名付きアーティファクト も作成され、 検知困難

防御・検知策

  • 侵害期間中のatoolパッケージ利用停止・ロックファイル監査
  • pmg(Package Manager Guard) 等の インストールプロキシburst公開対策
  • .github/workflows/codeql.yml 等のワークフロー・設定ファイル監査
  • 永続化プロセス・ファイル(kitty-monitor等) の有無チェック
  • GitHubリポジトリ・コミットメッセージ監査(firedalazer等)
  • CI/CD・開発環境の認証情報再発行・ローテーション

まとめ

  • npmサプライチェーン攻撃の最新手法 が高度化し、 認証情報流出・永続化・再感染 の複合攻撃が現実化
  • 攻撃者はnpmの仕様・GitHubの運用・CI/CDの脆弱性を多層的に悪用
  • 開発者・運用者は依存パッケージ管理・CI/CD監査・認証情報管理の強化が急務

Hackerたちの意見

もう「Mr. Bones' Wild Ride」から降りたい気分なんだけど、これからも続きそうで心配。自分の調査によると、商業的な検出戦略の多くは、パッケージを読み込んだり使ったりする際に、リポジトリやデバイス、開発者レベルに向けられてるみたい。これは、メールのスパムや一般的なマルウェアへの対処法に似てると思う。つまり、悪意のある人たちが狙う価値のあるターゲットがほぼ常に存在するってこと。でも、メールとは違って(ほとんどの場合)、パッケージマネージャーは中央集権的な権威だし、何か外部からの問題は開発者の責任だよね?私の無知な感覚だけど、急速なリリースによる怠惰なバージョニングの文化を変えて、安定した、しっかりスキャンされたバージョンに焦点を当てる必要があるかもしれない。量やスケールの影響もあるだろうから、私の考えが間違ってるかもしれないけど、高い回転率の言語に影響が出やすいのは示唆的だよね。よくわからないけど、今の状況を詳しく探る包括的な記事があったらいいな。

「Mr. Bones' Wild Ride」について気になって、1991年の映画「Nothing But Trouble」を思い出したんだけど、実際には間違えて覚えてた。あの映画のジェットコースターは「Mr. Bonestripper」って名前だった。https://www.youtube.com/watch?v=NEZEgd8GjJc それとは別に、「Roller Coaster Tycoon 2」から来てるんだ。https://knowyourmeme.com/memes/mr-bones-wild-ride スパムとの比較についてだけど、結局、ほとんどの商業的・社会的なコンピューターネットワークの設定で、メールアドレスを吸い上げて人々にスパムを受け入れさせるような形になってるよね。これもこの分野で起こる可能性が高いと思う。たぶん、Oracleのライセンス監視エージェントスタイルのソフトウェアと自動依存関係管理の組み合わせで、サプライチェーンのマルウェアをホワイトリスト化することで「解決」するみたいな。

状況がマジでクレイジーになってきてる…個人的には、すでにノードやPython、パッケージマネージャーを全部アンインストールして、今はdevcontainersやVMだけで使ってる。でも、たとえ開発コミュニティが超ハードなセキュリティを考え出しても、少なくとも1年後には、ソーシャルエンジニアリングのモデルが十分に良くなって、結局負け続けるゲームをしてる気がする。

コンテナはどうやって問題を解決するの?もしインターネットに接続されてるなら(もちろん接続されてる)、同じ問題があると思う。コンテナが認証情報を読み取れるなら、少なくとも私の理解ではそうだよ。

ノードなしで、どうやってクラウドリソースを管理するの?Cloudflareはwranglerが必要だし、AWSにはたくさんのノードCLIがあるよね。などなど。

Dockerコンテナのエスケープ > ペイロードはDockerソケットをチェックして、もしあれば、3つの連続した方法でコンテナエスケープを試みる。だから、devcontainersやVMを使っていても、これらのワームはすでに脱出を試みてるよ。ルートレスのVMエンジン(例えば、Dockerの代わりにPodman)を使ってるか確認してね!

ルートレスのVMエンジン(例えば、Dockerの代わりにPodman)を使ってるか確認してね! ほとんどの人はLinuxでDockerをルートレスで使ってるんじゃないの?Podmanはもっと何かしてるの?

それとも、Dockerソケットをコンテナにマウントしない方がいいよ。

本当に、もっと「jails」や「zones」のようなものがあればよかったな。あるいは、コンテナをjailやzoneに入れるのがベストだね。BSDみたいに、Linux用の包括的なサンドボックスってあるのかな?

オープンコードには、エージェントに本当にガードレールを設けるプロトコルがあればいいのに。移植を試みるより、SSHが何十年もあるんだから、逸脱しないコミュニケーション経路を構築できるはずだよね。

podmanが設定でルートレスになっているか確認するには、次のコマンドを実行してみてね:> podman info --format '{{.Host.Security.Rootless}}'

ちゃんとした仮想マシンを使ったらどう?

Hacker Newsで議論の続きを見る