JSConf JP

Your Node.js App Is Lying to You: What axios Taught Us

セッショントラックAEnglish

2026年3月31日、週に1億回ダウンロードされるパッケージ「axios」が、約3時間の間、密かにマルウェア配信システムへと変貌しました。その時間帯にnpm installを実行したすべてのプロジェクトは、ひっそりとバックドアを仕掛けられました。最悪なのは、その後パッケージがクリーンな状態になったことです。npm auditも何も検出せず、アプリは問題なしと表示しました。

これは、2026年におけるNode.jsサプライチェーンセキュリティの実践的な解説です。タイポスクワッティングや依存関係の混乱から、アカウント乗っ取り、ビルドパイプラインの汚染まで、実際の攻撃の仕組みをたどり、それらすべてに共通する糸口を探ります。それは、巧妙なバグを悪用した攻撃はほとんどなく、信頼を悪用した攻撃だったということです。

そして、ここからが厄介な点です。あなたが頼りにしているツールは、誤った安心感を与えてしまうのです。npm auditは既にフラグが立てられているものしか認識しません。ロックファイルは、あなたが既に信頼しているものしか固定しません。axiosは最も明確な証拠です。なぜなら、悪意のあるコードは痕跡を消し去り、クリーンなマニフェストを残したからです。

後半では、すぐに適用できる防御策をご紹介します。インストールスクリプトの無効化、依存関係の差分の確認、sigstoreによるプロベナンスの検証、そしてCIのロックダウンによって、盗まれたトークンがあなたの名前で公開されるのを防ぐ方法などです。まさにaxiosが被害を受けたケースと同じです。タイミングが重要です。npm v12では、2026年7月からインストールスクリプトがデフォルトでオプトイン方式になります。これは、npm installにおける10年以上ぶりの大きな変更です。この変更で何が修正され、何が見落とされているのか、そして、すでに信頼しているはずの侵害されたパッケージがなぜ許可リストをすり抜けてしまうのかを解説します。

npmレジストリは共有インフラストラクチャです。どこか一箇所への攻撃は、どこからリリースしていようとも、私たち全員に影響を及ぼします。この講演は、まさにその精神に基づいています。国際的なインシデントの経験に基づき、すべてのNode.js開発者が共有する問題にアプローチします。