npm サプライチェーン 攻撃 Shai-Huludの新たな波-AntVエコシステムを中心に323パッケージへ637件の悪性バージョンが公開。週間ダウンロード数約1,600万件に影響

セキュリティニュース

投稿日時: 更新日時:

npm サプライチェーン 攻撃 Shai-Huludの新たな波-AntVエコシステムを中心に323パッケージへ637件の悪性バージョンが公開。週間ダウンロード数約1,600万件に影響

2026年5月19日、npmパッケージエコシステムを標的とする自己伝播型サプライチェーン攻撃「Shai-Hulud(シャイ・フルード)」の新たな波が発生し、AlibabaのデータビジュアライゼーションライブラリであるAntVエコシステムを中心に、323パッケージへ637件の悪性バージョンがnpm上に公開されました(

Snykの調査によれば、攻撃は547個のパッケージを管理するnpmアカウント「atool」の侵害を起点として、2026年5月19日01:39〜02:06 UTC(日本時間同日10:39〜11:06頃)のわずか27分間に集中的に実施されました。影響を受けるパッケージの合計週間ダウンロード数は約1,600万件に上ると推定されています。

本攻撃は、TanStack・Mistral AI・UiPath・OpenSearchなどに影響した「Mini Shai-Hulud攻撃」の継続・拡大事案として位置づけられており、対象をAntVエコシステムへと広げた同一キャンペーンと評価されています。

【この記事のサマリー】

  • 攻撃の規模:npmアカウント「atool」(547パッケージ管理)が侵害され、27分間で323パッケージへ637件の悪性バージョンが公開(Snyk)。
  • 主な影響パッケージ:@antv/g2・@antv/g6・@antv/x6・@antv/l7・@antv/s2・@antv/f2・@antv/g・@antv/g2plot・echarts-for-react(月間約380万DL)・timeago.js(月間約115万DL)・size-sensor(月間約420万DL)・canvas-nest.jsなど。
  • 窃取対象:80以上の環境変数と100以上のファイルパスを探索。AWSアクセスキー・GCPサービスアカウント・Azure・GitHubトークン・npmトークン・Kubernetesトークン・Vaultトークン・MongoDB/MySQL/PostgreSQL/Redis接続文字列・Stripeキー・Slackトークン・Docker認証情報・SSH秘密鍵(Snyk)。
  • GitHub悪用:盗んだGitHub認証情報を使って被害者アカウントに新リポジトリを作成し、盗んだデータをアップロード。StepSecurityは2,200件超の公開GitHubリポジトリが作成されていたと報告。
  • 追加の注意点:悪性パッケージを削除しても、VS CodeやClaude Codeの設定ファイルにバックドアが残存している可能性がある(Aikido Security)。
  • 即時対応:5月19日以前の正常バージョンに固定・npm install --ignore-scriptsの一時利用・すべての認証情報のローテーション・ロックファイル・CI/CDログ・npmキャッシュ・GitHubリポジトリの確認。

Shai-Hulud(シャイ・フルード)攻撃とは何か

Shai-Huludは、npmなどのパッケージエコシステムを狙う自己伝播型のサプライチェーン攻撃です。その最大の特徴は「正規のパッケージに見える」ことにあります。

通常のマルウェアであれば、利用者が怪しいファイルをダウンロードして実行するという行為が必要です。しかしShai-Hulud系攻撃では、開発者が普段から使っている正規パッケージの新バージョンとして悪性コードが配布されます。利用者から見ると「よく知っているパッケージの更新版を取り込んだだけ」にしか見えません。

感染の仕組みとして、悪性パッケージにはpackage.jsonに**preinstallスクリプト**が仕込まれています。このスクリプトはnpm installの実行時に自動的に呼び出されるため、利用者が悪意あるファイルを明示的に実行しなくても、インストール操作だけで悪性コードが動作します。依存関係として間接的に取り込まれた場合も同様です。

通常のマルウェアと根本的に異なるのは、感染した開発環境が持つnpm公開権限を次の攻撃に使う点です。攻撃者は盗んだnpmトークンやメンテナー権限を使って、その開発者が公開権限を持つ別の正規パッケージへ悪性コードを注入します。これにより、一つの開発環境・メンテナーアカウントの侵害が、別のOSSパッケージや企業内パッケージへ連鎖していきます。


先行するMini Shai-Hulud攻撃との関係

今回の攻撃は単独の事件ではなく、TanStack・Mistral AI・UiPath・OpenSearchなどに影響した「Mini Shai-Hulud攻撃」の継続・拡大として理解する必要があります。

先行する攻撃では、TanStackのnpmパッケージを起点に、開発端末やCI/CD環境のGitHubトークン・npmトークン・クラウド認証情報・Kubernetesトークン・Vaultトークン・SSH秘密鍵などを窃取する挙動が確認されていました。GitHub Actionsのtrusted publishing経路を悪用する手法も問題となっていました。

今回の新たな波でも、インストール時に悪性ペイロードを実行し、開発環境やCI/CD環境に保存された認証情報を探索・外部送信しようとする点は共通しています。Aikido Securityは今回のAntV関連への攻撃を「TanStackの波に続く同一キャンペーンの拡大」として説明しています。

つまりMini Shai-Hulud系攻撃は、npmエコシステム内で対象パッケージを変えながら継続・拡大しているものとして扱う必要があります。


今回の攻撃の詳細——27分間で637件の悪性バージョンを公開

ocketおよびSnykの調査によれば、攻撃はnpmメンテナーアカウント「atool」の侵害から始まったとされています。

atoolアカウントは547個のパッケージを管理しており、侵害された攻撃者はアカウントの公開権限を使い、2026年5月19日01:39〜02:06 UTCのわずか27分間に323パッケージへ637件の悪性バージョンを自動的に公開しました。

各悪性tarballには、難読化されたindex.jsと、それをインストール時に実行するpreinstallスクリプトが追加されていました。正規のパッケージ名とメンテナー権限が悪用されているため、利用者から見ると見慣れない怪しいパッケージを導入したのではなく、普段から利用している正規パッケージの新バージョンを取り込んだだけで感染する可能性があります。

AtoolアカウントがどのようにAntV関連パッケージの公開権限を持っていたのかについては、現時点で詳細は明らかにされていません。


影響を受けるパッケージと規模

パッケージ名 主な用途 ダウンロード規模(月間)
size-sensor DOM要素サイズ検知 約420万
echarts-for-react Reactグラフコンポーネント 約380万
timeago.js 相対時刻表示 約115万
@antv/g2 データ可視化(文法ベース)
@antv/g6 グラフ・ネットワーク可視化
@antv/x6 ダイアグラム・フローチャート
@antv/l7 地理情報可視化
@antv/s2 多次元表計算
@antv/f2 モバイル向けグラフ
@antv/g Canvas/SVGレンダリング
@antv/g2plot プロット・チャート
@antv/graphin グラフ分析
@antv/data-set データ変換・処理
canvas-nest.js Canvasアニメーション

Snykは影響を受けたパッケージの合計週間ダウンロード数を約1,600万と説明しています。これらのパッケージは企業ダッシュボード・管理画面・グラフ表示・分析UI・金融レポート・データ可視化基盤などで広く利用されています。

フロントエンド開発では間接依存として取り込まれることもあるため、直接利用していない場合でもロックファイルを確認することが必要です。


何の情報が狙われているのか

Snykは、今回のペイロードが80以上の環境変数と100以上のファイルパスを探索すると説明しています。窃取の対象は開発端末とCI/CD環境に存在するほぼあらゆる認証情報です。

カテゴリ 狙われる情報
クラウド AWSアクセスキー・GCPサービスアカウント・Azureサービスプリンシパル
開発プラットフォーム GitHub PAT・GitHub OIDCトークン・npmトークン
インフラ Kubernetesサービスアカウント・Vaultトークン・SSH秘密鍵
データベース MongoDB・MySQL・PostgreSQL・Redis接続文字列
SaaS Stripeキー・Slackトークン・Docker認証情報

StepSecurityは特に、GitHub ActionsのRunnerプロセスメモリからマスク済みCI/CDシークレットを平文で抽出しようとする挙動を報告しています。マスクされているシークレットでも、プロセスメモリから取得できる場合があることを意味します。

盗まれた情報は暗号化されたうえで外部送信されるため、ネットワークログ上で通信が確認できたとしても送信内容を平文で確認することは困難です。このため、感染の疑いがある環境では、「窃取されたかどうか」を待って判断するのではなく、到達可能だった認証情報を基準にローテーションを検討する必要があります。


GitHubリポジトリを「外部ストレージ」として悪用

今回の攻撃で特に注目されるのが、GitHub自体を盗んだデータの保管場所として悪用していることです。

、GitHub認証情報が利用可能な場合、マルウェアはGitHub APIを使って被害者アカウント上に新しいリポジトリを作成し、盗んだデータをアップロードします。StepSecurityは2,200件超の公開GitHubリポジトリが作成されていたと報告しており、これらのリポジトリにはDune関連の命名や「niagA oG eW ereH :duluH-iahS」(Shai-Hulud Here We Go Again を逆順にした文字列)が使われていると説明しています。

GitHubは通常の開発業務で利用されるため、通信先としてGitHubが見えるだけでは異常と判断しにくい点が問題です。攻撃者はこの性質を悪用し、C2通信の隠蔽だけでなく、盗んだ情報の保管先としてGitHubリポジトリを活用しています。


「正規に見える署名」にも注意——SLSA Provenanceでも安全とは限らない

Snykは今回の攻撃において特に重要な警告を発しています。攻撃者がGitHub Actions OIDCトークンを悪用することで、SigstoreやSLSA Provenanceを備えたように見える悪性パッケージを生成できる可能性があるとしています。

これはビルドパイプライン自体が侵害された場合、署名や来歴情報が正しくても成果物が安全とは限らないことを意味します。署名やSLSA Provenanceは重要な防御策ですが、それだけでサプライチェーン攻撃を防げるわけではありません。CI/CDワークフロー・キャッシュ・OIDC権限・npm公開権限・メンテナーアカウントの保護を合わせて確認することが不可欠です。


即時対応——情報システム・開発部門が確認すべきポイント

Step 1:影響パッケージの確認

2026年5月19日以降に以下の環境がAntV関連パッケージ・echarts-for-react・timeago.js・size-sensorなどを取り込んでいないか確認してください。

確認対象の環境として、開発端末・CI/CD環境・コンテナビルド環境・社内npmミラー・社内アーティファクトリポジトリが挙げられます。

確認対象のファイルとして、package-lock.json・pnpm-lock.yaml・yarn.lock・npmキャッシュ・CI/CDログ・コンテナイメージが対象です。直接依存だけでなく、間接依存として取り込まれている可能性もあるため注意が必要です。

# ロックファイルで影響パッケージを確認する例
grep -E "@antv/|echarts-for-react|timeago.js|size-sensor|canvas-nest" package-lock.json

# npmキャッシュの確認
npm cache ls | grep -E "@antv|echarts-for-react|timeago"

Step 2:バージョンの固定と修正

Snykが推奨する即時対応として、5月19日以前の正常バージョンに固定し、ロックファイルを修正したうえでクリーンな環境で再ビルドを実施してください。

インストールスクリプトを一時的に無効化する暫定措置として以下が使えます。

npm install --ignore-scripts

ただし--ignore-scriptsは短期的なリスク低減策です。正規パッケージの中にはインストールスクリプトに依存するものもあるため、恒久対応としては影響バージョンの除去・ロックファイルの修正・クリーンな環境での再ビルド・シークレットのローテーション・CI/CD権限の見直しが必要です。

Step 3:開発端末の設定ファイルの確認

Aikido Securityは今回の波でVS CodeやClaude Codeの設定ファイルへバックドアを仕込む挙動に注意を促しています。悪性パッケージを削除しても、開発者端末上の設定ファイルが残っていれば、攻撃者の足場が維持される可能性があります。

悪性パッケージをインストールした可能性がある端末では、以下の設定ファイルの改ざんを確認してください。

# VS Code設定ファイルの確認
~/.vscode/settings.json
~/.vscode/extensions/

# Claude Code設定ファイルの確認
~/.claude.json
~/.claude/

# npmrc・gitconfigの確認
~/.npmrc
~/.gitconfig

Step 4:認証情報のローテーション

悪性パッケージをインストールした可能性がある環境では、到達可能だったシークレットを基準にローテーションを実施してください。「実際に窃取されたかどうかの確認」を待ってから判断するアプローチは、暗号化送信によって確認が困難なため推奨されません。

ローテーション対象として、GitHub PAT・npmトークン・AWSアクセスキー・GCPサービスアカウントキー・Azureサービスプリンシパルのクライアントシークレットまたはフェデレーション設定・Kubernetesシークレット・Vaultトークン・MongoDB/MySQL/PostgreSQL/Redis接続情報・SSH秘密鍵・Stripeキー・Slackトークン・Docker認証情報が挙げられます。

Step 5:GitHubの監査ログ確認

GitHubの監査ログで以下を確認してください。

不審なリポジトリの作成として、results/ディレクトリを含むリポジトリ・Dune関連の命名・niagA oG eW ereH :duluH-iahSの逆順文字列が含まれるリポジトリを探します。未知のGitHub Actionsワークフロー・不審なブランチ・想定外のSecretへのアクセスも確認が必要です。

# GitHub CLIを使ったリポジトリ一覧確認(自組織)
gh repo list ORG_NAME --json name,createdAt --jq '.[] | select(.createdAt > "2026-05-19")'

Step 6:自社管理npmパッケージの確認

自社や従業員が管理しているnpmパッケージについて、以下を確認してください。

想定外の新バージョンの公開がないか、preinstallスクリプトが追加されていないか、難読化されたindex.jsやGitHub由来のオプション依存が追加されていないかを確認します。


CI/CD環境の設定見直し

GitHub Actions・GitLab CI・Jenkins・Azure DevOps・CircleCI・Vercel・Netlify・Cloudflare Pagesなど、npm installを実行するCI/CD環境はすべて確認対象です。

Aikido Securityは、今回のペイロードがこれらのCI/CD環境を意識した挙動を含むと説明しています。

権限の分離として、依存関係インストール用ジョブと、本番デプロイ用ジョブ・npm公開ジョブ・クラウド操作ジョブを分離してください。依存関係をインストールするだけのジョブに、npm publish権限・クラウド管理者権限・GitHub書き込み権限を持たせるべきではありません。

OIDC trusted publishingやSigstore Provenanceを利用している環境でも、CI/CDワークフロー自体が侵害された場合に備える必要があります。PR検証ワークフロー・リリースワークフロー・公開ワークフローの権限とキャッシュを分離し、外部由来コードが高権限コンテキストで実行されないよう設計を見直してください。


参考情報(1次ソース)