見出し画像

【速報】axios乗っ取り事件──あなたのMacが感染していないか確認する方法と防御手順


はじめに:これは「エンジニアの話」ではない

2026年3月31日。世界中の開発者が使う「axios」というソフトウェア部品が乗っ取られた。

週に1億回以上ダウンロードされるパッケージだ。最新版をインストールした瞬間、あなたのパソコンに遠隔操作ウイルス(RAT)が仕込まれる。しかもウイルスは実行後に自分自身を消去し、証拠を残さない。

「自分はエンジニアじゃないから関係ない」と思うかもしれない。だが、Claude CodeやCursorなどのAIツールでアプリを作ったことがあるなら、あなたのMacにも「axios」は入っている可能性がある。

この記事では、非エンジニアでもできる「自分の環境が安全かどうかの確認方法」と「今後同じことが起きても被害を受けない設定方法」を、実際に私が今日やった手順そのままで共有する。


そもそも何が起きたのか(30秒で理解する)

JavaScriptのアプリ開発では「npm」というパッケージ管理ツールを使う。これは、アプリに必要な部品(ライブラリ)を自動でダウンロード・インストールしてくれる仕組みだ。

今回起きたことを、日常に例えるとこうなる。

いつも使っている通販サイトで、信頼しているブランドの商品を注文した。届いた箱はいつも通り。でも中身に、誰かが盗聴器を仕込んでいた。配送ルートのどこかで、箱を開けられて。

これが「サプライチェーン攻撃」だ。axiosというライブラリの管理者アカウントが乗っ取られ、正規の流通経路(npm)を通じてウイルス入りのバージョンが配布された。


まず確認:自分は感染しているのか?

ターミナルを開いて(Macなら「ターミナル」アプリを起動)、以下のコマンドをコピー&ペーストしてEnterキーを押す。

確認①:ウイルス本体の有無

find ~ -type d -name "plain-crypto-js" 2>/dev/null

何も表示されなければ、感染していない。 安心してほしい。

確認②:axiosのバージョン

find ~ -path "*/node_modules/axios/package.json" -exec grep '"version"' {} \; 2>/dev/null

結果に 「1.14.1」または「0.30.4」が含まれていたら、感染の可能性がある。 その場合は記事末尾の「感染していた場合の対処法」を参照してほしい。

それ以外のバージョン(1.12.x、1.13.xなど)が表示された場合、もしくは何も表示されなかった場合は安全だ。


「感染していなかった」で終わらせてはいけない理由

ここからが本題だ。

今回たまたま被害を受けなかったとしても、npmの初期設定には構造的な問題がある。何もしなければ、次の攻撃では被害を受ける可能性が十分にある。

具体的には、以下の2つの問題がある。

問題1:バージョンが勝手に上がる

npmでライブラリをインストールすると、バージョン指定が `"axios": "^1.12.0"` のように記録される。この `^`(キャレット)は「1.12.0以上、2.0.0未満なら何でもOK」という意味だ。つまり次に `npm install` を実行したとき、勝手に最新版(今回の場合、ウイルス入りの1.14.1)がインストールされる。

問題2:インストール時にスクリプトが自動実行される

npmには「postinstall」という仕組みがあり、パッケージのインストール直後にスクリプトを自動実行できる。今回のウイルスは、まさにこの仕組みを悪用して、インストールした瞬間にウイルスを展開・実行していた。


防御設定:3つのコマンドで終わる

ターミナルで以下を1行ずつ実行する。

設定①:バージョンを完全固定する

npm config set save-exact true

今後 `npm install` でパッケージを追加するとき、`^` なしの完全なバージョン番号で記録されるようになる。`"axios": "1.12.0"` のように固定され、勝手にバージョンが上がらない。

設定②:自動スクリプト実行を無効化する

npm config set ignore-scripts true

インストール時のpostinstallスクリプトを無効化する。仮にウイルス入りのパッケージをインストールしてしまっても、ウイルスのスクリプトは実行されない。

設定③:脆弱性チェックを有効にする

npm config set audit true

`npm install` 時に、既知の脆弱性がないか自動チェックが走るようになる。

確認

npm config list

以下の3行が表示されれば成功だ。

save-exact = true
ignore-scripts = true
audit = true

既存プロジェクトのaxiosも固定する

過去に作ったプロジェクトでaxiosを使っている場合、そちらも `^` を外しておく必要がある。

まず、axiosを使っているプロジェクトを探す

find ~ -name "package.json" -not -path "*/node_modules/*" -exec grep -l "axios" {} \; 2>/dev/null

表示されたファイルの中身を確認し、`"axios": "^1.12.0"` のように `^` が付いていたら、テキストエディタで開いて `^` を削除する。

変更前: "axios": "^1.12.0"
変更後: "axios": "1.12.0"

設定②の副作用について

`ignore-scripts=true` にすると、正規のパッケージでもインストール後のビルドスクリプトが実行されなくなる。一部のパッケージ(画像処理の `sharp` など)が正常に動作しない場合がある。

その場合は、信頼できるパッケージだけを個別にビルドすればよい。

npm rebuild パッケージ名

考え方としては「デフォルトで全部ブロック、信頼できるものだけ個別に許可」だ。セキュリティの世界ではこれを「ホワイトリスト方式」と呼ぶ。


感染していた場合の対処法

確認コマンドで `1.14.1` または `0.30.4` が見つかった場合、あるいは `plain-crypto-js` というフォルダが見つかった場合は、以下を実行する。

  1. そのマシンで使用していたすべてのパスワード・APIキー・認証情報を変更する

  2. SSH鍵、AWSキー、GCPの認証情報などがあれば、すべてローテーションする

  3. 可能であれば、クリーンな状態からOSを再セットアップする

これは大げさに聞こえるかもしれないが、今回のウイルスはリモートアクセス型トロイの木馬(RAT)であり、攻撃者がマシンを完全に遠隔操作できる状態になっていた可能性がある。「念のため」ではなく「必須」の対応だ。


Claude Codeユーザーへの補足

Claude Codeを使っている方は、インストール方法も確認しておくことを勧める。

ターミナルで以下を実行する。

claude doctor

表示結果の中で確認すべきポイントは2つだ。

  • 「Currently running」が `native` であること(`package-manager` より安全)

  • 「Auto-updates」が `enabled` であること

もし `package-manager` と表示された場合は、Native Installerへの切り替えを検討してほしい。

curl -fsSL https://claude.ai/install.sh | bash

この1行でNode.jsに依存しない独立したバイナリとしてインストールされ、自動更新も有効になる。sudoは使わないこと。


まとめ

今日やったことを整理する。

  1. 感染チェック(2コマンド)

  2. 現在の安全を確認

  3. npmグローバル設定(3コマンド)

  4. 今後の同種攻撃を防御

  5. 既存プロジェクトのバージョン固定

  6. 既存資産の保護

  7. Claude Codeの環境確認

  8. 開発環境の安全確認

合計10分もかからない。

AIツールの普及により、エンジニアでない人がコードを書き、パッケージをインストールする機会が急増している。しかし「コードが書ける」ことと「安全にパッケージを管理できる」ことは、まったく別のスキルだ。

今回のaxios事件は、その現実を突きつけている。

あなたのMacを守れるのは、あなただけだ。この10分の投資を、今日のうちに済ませてほしい。

いいなと思ったら応援しよう!