npm overridesでtransitive依存の脆弱性を解消する($name構文と到達性評価)
npm
セキュリティ
依存管理
状況
npm audit の指摘が、直接依存ではなく深い transitive 依存(例: SDK が内部で引くユーティリティ)に出ることがある。親パッケージが既に最新で、npm audit fix でも解消できない場合は、package.json の overrides で当該パッケージのバージョンを固定して全ネストに強制適用する。
落とし穴と書き方
- override 値が直接依存の指定と矛盾すると
EOVERRIDE(Override ... conflicts with direct dependency)で失敗する。直接依存にも同じパッケージがある場合は、リテラル版ではなく"pkg": "$pkg"構文で「直接依存の版を全ネストに適用」すると整合する。 - 直接依存にない transitive のみなら、パッチ版のレンジ(例:
^x.y.z)を直接指定できる。 - メジャーを跨ぐ強制(ESM 化や API 変更を含む版)は、それを使う親が壊れる恐れがある。安易に上げない。
到達性の評価
advisory を鵜呑みにせず、脆弱なコードパスが実際に使われるかを確認する。例えば「特定 API に引数を渡したときだけ発火する境界バグ」で、親がその API を使っていなければ実害は低い。それでも監査をクリーンに保つために override する判断はありうるが、リスクと必要性を切り分けて記録する。
検証方法
override 後に npm install と npm audit で件数が減ることを確認し、メジャーを跨いだ場合は対象パッケージを実際に require/import して読み込めるか、ビルドと型チェック、主要ユースケースの実行時動作までを確認する。