2026年に入って、AIのコーディング支援ツールと npm(JavaScript の部品の配布所)をめぐる事件が3件続いた。Cline の npm パッケージは無断で公開されて約8時間そのまま置かれ、axios は改ざん版が約3時間公開され、Claude Code などに名前を似せたパッケージが少なくとも19個ばらまかれた。
3件とも、狙われたのは開発者が毎日使う道具の「設定」と「権限」だ。この回では、何をされたかを短く押さえたうえで、全組織・開発者の端末・CI(自動ビルドの仕組み)ごとに今日から手を付けられることを並べ、最後に入れてしまった後の手順を書く。
3件で何をされたか
Cline:issue を読む AI に、シェルの権限があった
2025年12月21日、Cline は GitHub の issue(不具合報告)を AI に振り分けさせる自動処理を加えた。この処理は誰でも issue を開けば起動でき、AI にシェル(コマンド実行)の権限を与えていた。claude-code-action を、allowed_non_write_users を「*」にし、Bash ツール付きで動かしていた。
そのため issue の文面に仕込んだ指示(プロンプトインジェクション)で、AI に任意のコマンドを実行させられた。さらにこの処理は夜間の公開処理と同じキャッシュ領域を共有しており、公開用の秘密に届く経路があったと Cline は事後報告で説明している。
研究者の Adnan Khan が2026年1月1日に非公開で報告し、2月9日に公開された。Cline は30分以内に問題の処理を外して鍵の入れ替えを始めたが、管理画面の一覧に漏れたトークンが表示されておらず、npm のトークンの入れ替えに失敗した。
We failed to rotate the NPM token: during the process, the wrong token was deleted while the exposed one remained active.
訳: npm のトークンの入れ替えに失敗した。作業中に間違ったトークンを消し、漏れたトークンが有効なまま残った。
Cline、npm パッケージ無断公開の事後報告
2026年2月17日 03:26(米太平洋時間)、生きていたそのトークンで cline@2.3.0 が無断で公開された。変更は、インストール時に別のソフト(openclaw)を勝手に入れる1行だけだった。同日 11:23 に 2.4.0 が出て 2.3.0 は取り下げられた(GHSA-9ppg-jx86-fqw7)。
Cline は、悪意のあるコードは誰にも届いていないとしている。VS Code 版と JetBrains 版の拡張は影響を受けていない。その間のダウンロードは約4,000回とする推計もある(StepSecurity の推計を The Hacker News が報道。一次の確定値ではない)。
axios:メンテナーのアカウントが乗っ取られた
2026年3月31日 00:21〜03:20 UTC の約3時間、広く使われている HTTP ライブラリ axios のメンテナーのアカウントが乗っ取られ、改ざん版の 1.14.1 と 0.30.4 が公開された。連絡先メールは攻撃者のアドレスに変えられていた。乗っ取りの方法は未公表だ。
axios のコード自体は変えず、plain-crypto-js という依存を1つ足しただけだった。これがインストール時に動き、Windows・macOS・Linux 向けのバックドア(WAVESHAPER.V2)を入れる。Google Threat Intelligence Group は、北朝鮮とつながりのある集団 UNC1069 の活動として追跡している。
Cline と axios で、改ざん版が公開されていた時間を並べた。

SANDWORM_MODE:似せた名前のパッケージが AI の設定を書き換える
Socket の調査(2026年2月20日)によると、本物に名前を似せた(タイポスクワット)npm パッケージが少なくとも19個、2つの名義で公開された。claud-code、cloude-code、cloude は Claude Code に、suport-color は本物の supports-color に似せている。
19個のうち3個は Claude Code のふりをしていた。

入れるとまず、トークンや鍵、API キーなどの認証情報を広く集める(対象は後半の「入れてしまったら」に並べた)。さらに Claude Code、Claude Desktop、Cursor、VS Code の Continue、Windsurf の設定に偽の MCP サーバーを書き込み、その道具の説明文に仕込んだ指示で AI に機密ファイルを集めさせようとする。
盗んだ npm トークンで他のパッケージを再公開する、GitHub のリポジトリに依存を足す、git の global の init.templateDir で新しいリポジトリにも残る、といった形で自分で広がろうとする。CI では待たずにすぐ動く。パッケージはその後レジストリから削除された。
全組織が今日やること:改ざん版と似せた名前を探す
AI ツールを使っているかどうかに関係なく、npm を使う組織はまずここから手を付ける。Google の報告は、改ざん版に上げないよう明言している。
Do not upgrade to axios version 1.14.1 or 0.30.4.
訳: axios 1.14.1 と 0.30.4 には上げないこと。
Google Threat Intelligence Group、axios の npm パッケージを狙った北朝鮮系集団の報告
- 今日中に、社内の全リポジトリの lockfile(package-lock.json など)を、axios の 1.14.1 と 0.30.4、そして plain-crypto-js という名前で検索する。
- 同じ検索で claud-code、cloude-code、cloude、suport-color も探す。
- 安全な版は 1.14.0 以前と 0.30.3 以前。lockfile で axios がこの範囲に固定されているかを見る。
- 1件でも見つかったら、その端末や CI のランナーは乗っ取られた前提で作り直し、そこにあった鍵はすべて入れ替える。
- npm・yarn・pnpm のキャッシュも消す。
あわせて、依存の取り方を2点変える。
- lockfile で版を固定し、CI で「latest」を取りに行かない。
- 社内の npm ミラーやプロキシを置き、確認済みの版だけを配る(Google の推奨)。
開発者の端末で、今日やること

図4は、開発者の端末で確かめる項目をまとめたものだ。次の項目を、開発者1人ずつに済ませてもらう。
- MCP の設定を開く。Claude Code・Claude Desktop・Cursor・Windsurf・VS Code(Continue を含む)の設定ファイルで mcpServers の項目を見て、自分で足した覚えのないものは消す。
- git のテンプレート設定を確かめる。git config --global init.templateDir を実行し、身に覚えのない設定やフックがあれば消す。
- パッケージ名を1文字ずつ確かめてから入れる。claud-code、cloude-code、cloude、suport-color のような似せた名前がある。
- AI に入れさせるときも名前を見る。AI に「このパッケージを入れて」と頼んで名前が提案されたら、入れる前に本物の名前と1文字ずつ照らし合わせる。
- 秘密を平文で置かない。.env ファイルや環境変数に置きっぱなしの API キーやトークンを、OS のキーチェーンなどの保管庫に移す(Google も推奨)。
情シス兼任の担当者なら、この項目をそのまま社内の開発者に配り、端末ごとに済んだかを返してもらえば一巡できる。MCP の設定と init.templateDir の2つは、何も入れた覚えがない人にも見てもらう。
CI で AI エージェントを動かしているなら

図3は、Cline の件で崩れた箇所を CI の設定で塞ぐ項目だ。GitHub Actions で issue や PR に AI を反応させている組織は、ワークフローの定義ファイルを開いて上から確かめる。
- 外部の人が書ける文面を起動条件にしない。issue・PR のタイトルや本文・コメントで AI エージェントが起動する設定を探す。残すなら書き込み権限のある人に限る。claude-code-action なら allowed_non_write_users を空のままにする。
- シェルと書き込みの道具を渡さない。振り分けや要約なら読み取りだけで足りる。Cline も、今後の自動化は読み取り専用・シェルなしに変えた。
- 公開用の秘密を持つ処理とキャッシュを分ける。npm への公開など秘密を扱う処理が、他の処理と同じキャッシュを使っていないか見る。Cline は公開系の処理から GitHub Actions のキャッシュを外した。
- npm の公開を長期のトークンから OIDC に切り替える。GitHub Actions の信頼された公開(provenance)にすれば、盗まれて困る長く使えるトークンそのものが無くなる。
- 鍵を入れ替えたら、古い鍵で本当に入れないかを試す。管理画面の一覧で消えたことを見るだけでは足りない。Cline は一覧に出ないトークンを見落とした。
自社でパッケージを公開しているなら、メンテナー全員の npm アカウントに多要素認証を掛け、公開は OIDC に寄せる。axios では、メンテナーのアカウントそのものが入口になった。
入れてしまったら:被害を小さくする手順
似せたパッケージや axios の改ざん版を入れていたと分かったら、パッケージを消すだけでは終わらない。Socket は、それが動いた環境を丸ごと漏れたものとして扱うよう求めている。
Treat any environment where they ran (developer workstation or CI) as potentially exposed
訳: それが動いた環境は、開発者の端末でも CI でも、漏れた可能性があるものとして扱うこと。
Socket、SANDWORM_MODE の調査報告
- node_modules/ を消す。axios の改ざん版だった場合は、その端末を作り直す。
- その端末と CI で使えた npm と GitHub のトークン、CI の秘密をすべて入れ替える(Socket の推奨)。
- SANDWORM_MODE が集める対象も入れ替えの一覧に入れる。.npmrc、SSH の鍵、AWS の認証情報、.env ファイルの値、key・secret・token・password を含む環境変数、LLM の API キー(9社分が対象)、CLI から読めるパスワード管理ツールの中身だ。
- 入れ替えたら、古い鍵で実際にログインや公開ができないことを1本ずつ試す。
- MCP の設定と init.templateDir を、端末の手順でもう一度確かめる。似せたパッケージは、ここに居残ろうとする。
- 自社が公開しているパッケージと自社の GitHub のリポジトリに、身に覚えのない版や依存の追加が無いかを見る。盗まれたトークンで再公開されている場合がある。




