Aikido

エージェントスキルが幻覚的なnpxコマンドを拡散している

執筆者
Charlie Eriksen

2026年1月14日、私はnpm上で「」というパッケージを主張しました。 react-codeshift.

私はその作者ではありませんでした。そのために一行もコードを書いたことはありません。そのパッケージは存在したことがなく、誰も公開したことがありませんでした。しかし、237のGitHubリポジトリがすでにそれを参照し、AIエージェントにインストールを指示していました。実際に試みているものもありました。私は、公開したばかりの、中身が何もないパッケージのダウンロードを受け取っていました。 

その名前はどこから来たのでしょうか?LLMが作り出したものです。どのようにして237のリポジトリに広がったのでしょうか?エージェントスキルファイルです。コピー&ペーストされ、フォークされ、日本語に翻訳され、一度も検証されることはありませんでした。私は他の誰よりも早くそれを見つけて主張しました。

調査

2025年7月に、私は調査を開始しました npx confusion issues。これらはドキュメントやコードに現れるものの、実際には公開されていないnpmパッケージ名です。アイデアはシンプルでした。スクレイピングして package.json npm全体のスクリプトとREADMEファイルから npx <package> パターンをスクレイピングし、それらのパッケージが実際に存在するかどうかを確認することでした。結果として、多くは存在しませんでした。

その後、S1ngularity攻撃が発生したため、研究を一時中断しました。ホリデーシーズンになり、再び取り掛かりました。本稿では、その研究の一つの側面のみを扱っています。今後も続きます。

react-codeshiftの登場

12月に再び研究を再開し、参照をスクレイピングすることでGitHubもインデックス化するように拡張することにしました。 npx コマンド。 react-codeshift が多く見つかりました。200以上のリポジトリです。私がそれを主張した時には、その数は237以上に増えていました。

GitHub上で「npx react-codeshift」に一致する215ファイル

問題は、 react-codeshift は存在しなかったことです。私が登録するまでは。しかし、その名前は正当に聞こえます。実際に存在する2つのパッケージがあります。

🧬 LLM HALLUCINATION
幻覚の構造
LLMが2つの実在するパッケージを1つの偽のパッケージに混同した経緯
jscodeshift
汎用codemodランナー
Facebook
+
react-codemod
Reactに特化したトランスフォーム
React Team
=
react-codeshift
もっともらしい。しかし、存在しません。
🚫 捏造された

LLMがこれらを組み合わせ、react-codeshiftという存在しないツールを幻覚的に生成しました。存在しないツールとしては、もっともらしい名前です。典型的な事例です。

その成り立ち

それは単一のコミットに遡ることができます。 65e5cb0wshobson/agents リポジトリで、2025年10月17日付です。

そのコミットは、14のプラグインにわたって47のLLM生成「Agent Skills」を投入しました。明らかな人間のレビューはありませんでした。これらのスキル(react-modernizationとdependency-upgrade)のうち少なくとも2つには、以下の内容が含まれていました。

npx react-codeshift --transform=react-codeshift/transforms/rename-unsafe-lifecycles.js ./src

npx react-codeshift --transform=react-codeshift/transforms/new-jsx-transform.js ./src

正当に見え、正当に聞こえます。トランスフォームパスは、実在するcodemodの構造を反映しています。

しかし、それは存在しませんでした。

スキル:新たな攻撃対象領域

タイポスクワッティングやAIスロップパッケージは見てきましたが、これは単なる憶測ではなく、実際に発生しているスロップスクワッティングの事例です。そして、Skillsを通じて拡散されています。

スキルは新しい標準です: AnthropicのAgent Skills Specification、Claude Codeプラグイン、MCPサーバー。これらはすべてスキルファイルを使用してAIエージェントに何をすべきかを指示します。これらのファイルは、Markdown、YAML、プレーンテキストの指示といったドキュメントのように見えます。

しかし、それらは実行可能な命令です。AIエージェントがスキルファイルをロードすると、そのコマンドに従います。npx react-codeshiftが存在するかどうかは検証せず、ただ実行するだけです。

npxがローカルでパッケージを見つけられない場合、次のようにプロンプトを表示します。

以下のパッケージをインストールする必要があります。  
react-codeshift

続行してもよろしいですか? (y)

エージェントは「y」を押します。ほとんどの人もそうするでしょう。その点では、エージェントも私たちと同じです。大規模な「盲人が盲人を導く」状態です。

アクティブな実行試行の証拠

パッケージをクレームした後、ダウンロードテレメトリーを監視しました。

📊 テレメトリ
ダウンロードテレメトリー
ファントムパッケージをクレームした後のnpmダウンロード統計
~74 4 1 3 1 3
0日目 1日目 2日目 3日目 4日目 5日目
ミラー / スキャナー エージェントの実行試行
通常のファントムパッケージ: 0日目に60~100回のダウンロード、その後はゼロ。
react-codeshift: 継続的な少量ダウンロード = 実際のエージェントが使用を試みている。

通常のパッケージは初日に60~100回のダウンロードを記録しますが(レジストリミラー、セキュリティスキャナーによるもの)、その後はゼロになります。実際に利用しようとしているユーザーはいません。

しかし、 react-codeshift?1日あたり1~4回の継続的な少量ダウンロードは?それらは本物です。AIエージェントがスキル指示に従い、npxダウンロードをトリガーしているのです。

スキルが使用されています。幻覚されたパッケージが実行されています。もし私が最初にクレームしていなければ、攻撃者がそうしていた可能性があります。

拡散パターン

237個の全リポジトリは同じソースに遡ります。そのパターンは、ほぼ完全に直接フォークです。

  • wshobson/agents (オリジン)
  • 正確なパスを維持したまま、約100のフォーク: plugins/framework-migration/skills/react-modernization/SKILL.md
  • あるユーザーが自身の30以上のリポジトリにコピーしました
  • 異なるディレクトリ構造へのいくつかの再編成
  • 日本語訳まで!
  • あるリポジトリが切り替えました npx to bunx。同じ幻覚パッケージ、異なるランナーです。

npxだけではありません

同じパターンがすべてのパッケージランナーに適用されます。

  • npx react-codeshift
  • bunx react-codeshift
  • pnpm dlx react-codeshift
  • yarn dlx react-codeshift

これらはすべて同じnpmレジストリに解決され、インストール前にプロンプトを表示し、深く考えることなく承認されます。LLMがある形式でパッケージ名を幻覚した場合、他の形式でも同様に幻覚します。

これは拡散力がありますが、表面的なものです。主要なリポジトリや高評価のプロジェクトはありません。存在しないパッケージを使用するようにエージェントがエージェントに教えているだけです。どこまでもエージェントであり、ある意味、自己改善システムと言えます。

これが重要な理由

これは大規模な侵害ではありませんでした。誰も乗っ取られることはなく、このパッケージは現在、安全なプレースホルダーとなっています。

しかし、これはこれらのものがどのように広がるかについての有用なケーススタディです:

  1. LLMはもっともらしいパッケージ名を幻覚します。特に、命名規則が予測可能なドメイン固有のツールでは顕著です。
  2. スキルはレビューなしでコピー&ペーストされます。これらはドキュメントのように見えるため、コードと同じ精査を受けません。
  3. エージェントは指示を文字通りに実行します。それが彼らの仕事です。
  4. npxがプロンプトを表示し、人間が承認します。摩擦が十分に低いため、ほとんどの人が「y」を押してしまいます。
  5. 未登録の名前は先着順です。誰でも登録できます。

私は偶然これを見つけて登録しました。このパターンは理解する価値があります。

🎯 新しいアタックサーフェス
スキル:ドキュメントかコードか?
スキルファイルがざっと見るだけでなくコードレビューを必要とする理由
👀 ~のように見える
📝 Markdownファイル
📋 YAMLコンフィグ
📖 ドキュメント
💬 プレーンテキストの指示
⚡ ~のように振る舞う
💻 実行可能なコマンド
🤖 エージェントの指示
🔧 シェルスクリプト
🎯 アタックサーフェス
スキルをドキュメントではなくコードとして扱います。

どのような対応が必要でしょうか?

エージェントスキルまたはAIツールのメンテナンスを行っている場合:

  1. スキルをドキュメントではなくコードとして扱います。 レビューし、監査し、ソースコードと同じ厳格さでバージョン管理してください。
  2. パッケージ名が存在することを確認します。 任意のコミットを行う前に npx <package> 指示を行う前に、そのパッケージが本物であり、意図した発行元によって公開されていることを確認します。
  3. コードベースを検索します。 実行します grep -r "npx react-codeshift" 検出された問題を修正します。適切なツールに置き換えてください。
    • npx jscodeshift 汎用的なコードモッド向け
    • npx react-codemod React固有のトランスフォーム向け

侵害の痕跡

npmパッケージ: react-codeshift

全体像

スキルは新しいコードです。一見そうは見えませんが、MarkdownやYAML、そして分かりやすい指示で構成されています。しかし、それらは実行可能です。AIエージェントは、『このパッケージは実際に存在するか?』と問うことなく、それらに従います。

これはハルシネーションでした。237のリポジトリに拡散し、実際のダウンロード試行を発生させました。それが攻撃ベクトルにならなかった唯一の理由は、私が先に発見したからです。

サプライチェーンに、LLMの夢から生まれた新たなリンクが加わりました。これはnpxの混乱に関する調査で判明したことの一つに過ぎません。今後も続きます。

共有:

https://www.aikido.dev/blog/agent-skills-spreading-hallucinated-npx-commands

脅威ニュースをサブスクライブ

今日から無料で始めましょう。

無料で始める
CC不要
4.7/5
誤検知にうんざりしていませんか?

試してみてください Aikido 10万人以上が実践中
今すぐ始める
パーソナライズされたウォークスルーを入手する

10万以上のチームに信頼されています

今すぐ予約
アプリをスキャンして、IDOR(内部データ操作脆弱性)と実際の攻撃経路を検出する

10万以上のチームに信頼されています

スキャンを開始
AIがアプリをペネトレーションテストする様子をご覧ください

10万以上のチームに信頼されています

テストを開始

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。