Node.js: Axios の proto によるクラッシュ(CVE-2026-25639)→ 1.13.5 以降へ+ユーザー入力を設定に混ぜない
Axios 1.13.4 以前では、{"proto": {...}} を含むオブジェクトを設定として渡すと、設定のマージ処理で TypeError が起き、Node.js のプロセスが落ちる(DoS)。ユーザー入力の JSON を Axios の設定にそのまま渡す構成が危ない。
対策
- バージョンを確認して更新:
bash
npm ls axios # 間接依存も含めて確認 npm i axios@latest - ユーザー入力をリクエスト設定(headers や params の元になるオブジェクト)へ直接スプレッドしない。必要なキーだけを取り出す:
ts
const { q, page } = body; // 許可したキーだけ await axios.get(url, { params: { q, page } }); - JSON を受けるところで、
__proto__/constructor/prototypeキーを拒否する(スキーマ検証ライブラリで未知キーを落とす)
注意点
- これはプロトタイプ汚染とは違い、汚染が起きる前にプロセスが止まる。プロセスマネージャで自動再起動していても、繰り返し落とされればサービスは止まる。
- 間接依存に古い Axios が残っていることが多いので、
overrides(npm)/pnpm.overridesで底上げする。