22分間で323個のnpmパッケージが感染しました。今この瞬間も、AntVのパッケージをインストールしている開発者のAWSキーが流出しているかもしれません。

一言まとめ
TeamPCPがnpmメンテナーアカウント(atool)を乗っ取り → AntVエコシステムの323パッケージに悪意のあるコードを注入 → インストールのたびにクラウド認証情報20種類以上を自動窃取 → 2,500以上のGitHubリポジトリにすでにデータ流出完了
323個
感染した固有パッケージ数
22分
攻撃完了までの時間
1,100万
週間ダウンロード数(echarts-for-react)
20種類以上
窃取対象の認証情報タイプ

何が起きたのですか?

2026年5月19日午前1時39分(UTC)、npmエコシステムで異常な動きが始まりました。22分間で639個の悪意のあるパッケージバージョンが一斉に公開され、AntVデータ可視化ライブラリ(@antv/g2、@antv/g6、@antv/x6、@antv/l7、@antv/s2)とecharts-for-react、timeago.jsが含まれていました。

攻撃者グループTeamPCPはnpmメンテナーアカウント「atool」を乗っ取りました。このアカウントはAntVエコシステムを含む数百のパッケージの公開権限を持っていました。一つのアカウントが侵害されただけで、エコシステム全体が連鎖的に崩れていきました。

最も衝撃的だったのはそのスピードです。人が反応する暇もなく22分で完了したという事実です。セキュリティチームが気づいて対応を始めた時点で、すでに多くの開発者がCI/CDパイプラインで感染バージョンをインストールしていた可能性があります。

なぜこれほど深刻なのですか?

この攻撃で特に注目すべき点は2つです。窃取する認証情報の広範さSigstore証明の偽造です。

今すぐ対応が必要です: 以下のパッケージのいずれかを最近インストールした場合、今すぐクラウド認証情報を交換してください。「後でいい」という考えは危険です。
パッケージ 週間ダウンロード数 感染状況
echarts-for-react 約110万 感染確認
@antv/g2 数十万 感染確認
@antv/g6 数十万 感染確認
@antv/x6 数十万 感染確認
timeago.js 約150万 感染確認

悪意のあるペイロード(約499KBの難読化JavaScript)はnpm install中にpreinstallフックで自動実行されます。AWS、Google Cloud、Azure、GitHubトークン、npmトークン、SSHキー、Kubernetes、Vault、Stripe、データベース接続文字列など20種類以上の認証情報を組織的に収集します。Dockerコンテナ脱出まで試みます。

さらに、この攻撃は特に巧妙な点があります。Sigstore証明を偽造したのです。CI/CD環境では、GitHub Actions OIDCトークンをランナープロセスメモリから直接抽出し、正規のSigstore署名証明書を取得します。パッケージに緑色の「出所確認済み」バッジが付いていても安心できないということです。

窃取されたデータはt.m-kosche[.]com:443に送信され、バックアップとしてSession P2Pネットワーク(filev2.getsession[.]org)が使用されます。さらに盗んだGitHubトークンで2,500以上の公開リポジトリを作成してデータを分散保管しました。

今すぐすべきこと

  1. 影響を受けたパッケージの確認
    package.jsonpackage-lock.jsonで@antv/*、echarts-for-react、timeago.jsを検索してください。npm ls @antv/g2で依存関係ツリーも確認しましょう。
  2. 認証情報の交換前に永続化アーティファクトを削除する
    悪意のあるコードは.claude/settings.jsonフック、VS Codeタスク、systemdデーモンに永続化を仕込みます。先に認証情報を交換するとデーモンが新しい認証情報を再度盗む可能性があります。順序が重要です。
  3. すべての認証情報を即時交換
    AWSキー、GCPサービスアカウント、Azure認証情報、GitHub PAT、npmトークン、SSHキーをすべて交換してください。侵害されている可能性が高いと考えて行動してください。
  4. GitHubリポジトリの監査
    「niagA oG eW ereH :duluH-iahS」という文字列(「Shai-Hulud: Here We Go Again」の逆順)をGitHub検索で探してください。攻撃者が作ったデータダンプリポジトリを見つけられます。
  5. npm 2FAの設定
    GitHubはすでに61,274個のnpmアクセストークンを無効化しました。新しく発行し直し、必ず2FAを有効にしてください。
  6. 今後は--ignore-scriptsを使用
    npm install --ignore-scriptsでpreinstall/postinstallフックの実行を防げます。CI/CDパイプラインのデフォルト設定にすることをお勧めします。

さらに詳しく知りたい方へ

Microsoft Security Blogの分析 TeamPCPの技術的なTTPとCI/CD環境別の検知方法をまとめた公式ガイドです。 microsoft.com

Snyk技術分析 498KBペイロードの構造、AES-256-GCM暗号化、RSA-OAEPキーラッピングなど悪意のあるコードの技術的詳細を扱っています。 snyk.io

Orca Security対応ガイド 永続化アーティファクトの削除手順とCI/CDパイプライン強化方法をステップ別に説明しています。 orca.security