AIツールが呼ぶnpmとMCP、Node.js脆弱性を広げない導入手順
公開日 ・更新日
AIツールが便利になるほど、モデルの回答だけでなく、その裏で動くnpmとNode.jsを確認する必要があります。MCPの公式セキュリティ文書は、ローカルMCPサーバーがクライアントと同じ権限でコマンドを実行し、情報流出や任意コード実行につながり得ると説明しています。これは特定のAI製品が被害を受けたという発表ではなく、接続方式が持つ一般的なリスクです。
インストール元とlockfileを固定する
プロジェクトの `package-lock.json` をレビューし、CIや検証環境では `npm ci` を使います。npm公式の説明では、`npm ci` はlockfileを必須とし、`package.json` やlockfileを書き換えず、依存関係が一致しない場合はエラーになります。AIが生成した手順をそのまま貼るのではなく、追加されたパッケージ、バージョン、実行スクリプトを差分で確認します。
install scriptを無条件に信頼しない
npmのライフサイクルスクリプトは、インストール時にコマンドを実行できます。npm公式ドキュメントには `ignore-scripts` があり、有効にするとpackage.jsonのスクリプトを実行しないと説明されています。ただし、ネイティブモジュールなど正当なビルドにスクリプトが必要な場合もあるため、全環境で機械的に無効化するのではなく、隔離した検証環境で挙動を確認します。
依存関係の確認には `npm audit` も使います。npm公式では、直接依存、devDependencies、bundledDependencies、optionalDependenciesを確認する一方、peerDependenciesは対象外としています。既知の脆弱性を見つける手段であり、悪意あるパッケージや想定外の処理を安全と保証する検査ではありません。
MCPの起動コマンドと権限を表示する
新しいMCPサーバーを接続するときは、実行されるコマンド、引数、読み書きするディレクトリ、ネットワーク先を省略せずに確認します。MCP公式文書も、ワンクリック設定の前に正確なコマンドを表示し、明示的な同意を求め、サンドボックスと最小権限を使うよう勧めています。SSH鍵、ホームディレクトリ、システム領域を読む設定は、目的が説明できない限り許可しません。
最初の試行では、stdio接続と読み取り専用のツールを優先し、HTTP接続なら認証とアクセス元を限定します。APIキーやクラウド認証情報を環境変数へ一括で渡さず、必要な操作だけ個別に許可します。動作ログと停止方法がないツールは、本番データへ接続しないことです。
Node.jsの修正版へ更新することは土台ですが、AIが実行するnpm・MCPの出所、スクリプト、権限を確認して初めて実務の対策になります。インストール、起動、権限を別の承認にすれば、便利さを残したまま影響範囲を小さくできます。
AIツールの導入前に、依存・起動コマンド・権限の確認表を作り、現場で続けられる安全策へ落とし込みたい方は、COZITOへご相談ください。
関連記事
著者: 松井 勇樹