0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

package.jsonに含まれていないのに脆弱性アラートがきた時の対処法

Posted at

1. 何が起きたか

GitHub Dependabot から、あるパッケージの脆弱性アラートが届いた。

しかし自分の package.json を確認すると、そのパッケージは「直接」依存に含まれていない。なぜ脆弱性が発生するのか分からない状態から調査。

2. package.json を確認

  • dependencies
  • devDependencies

両方を確認したが、該当パッケージは見当たらない。
→ 間接依存(transitive dependency)に存在する可能性が高い

3. 依存ツリーを確認して原因を特定

実際に依存関係を見るためにコマンドを実行(npm の場合)

npm ls <パッケージ名>

すると、複数のライブラリが内部的に問題のパッケージを利用していることが判明。

典型的な例:

  • Jest
  • Storybook
  • ESLint
  • Babel
  • Webpack
  • Tailwind
    など、ビルドツールやテストツールが内部で色々なパッケージを引き込む。

→ 直接依存していなくても、内部で使われているため脆弱性が出る。

4. 一番問題のパッケージ(原因箇所)を特定

依存ツリーを見て、
どのパッケージ経由で問題バージョンが入っているかを特定する。

ツールA → 内部依存X → 問題のパッケージ

5. package.json の overrides で依存を強制上書き

npm では overrides を使って依存ツリー全体のバージョンを書き換えることができる。

{
  "overrides": {
    "<パッケージ名>": "<安全なバージョン>"
  }
}

この仕組みを使うと、

  • 直接依存していない
  • どのライブラリが引き込んでいるかも関係ない

という状況でも、
依存ツリー全体の問題バージョンを安全なバージョンへ一括置換できる。

6. 再インストールして反映確認

npm install
npm ls <パッケージ名>

すべての依存が安全バージョンに統一されていることを確認。

7. 動作確認

依存を書き換えたことでアプリに影響が出ていないか確認。

npm test
npm run build
npm run dev
  • 開発ツール
  • 本番ビルド
  • Storybook
  • テストランナー
    などが正常に動作することを確認。

8. まとめ

  • 直接依存していなくても Dependabot から警告が来る理由は間接依存に存在するため
  • npm ls により実際の依存ツリーを確認できる
  • overrides で安全バージョンに固定すると解決
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?