pnpm auditで見つかった脆弱性をoverridesで解消する
TL;DR
// package.json
{
"pnpm": {
"overrides": {
"esbuild": ">=0.25.0"
}
}
}
これで**推移的依存関係(依存の依存)**に含まれる古いesbuildを強制的に新しいバージョンに置き換えられる。
背景
pnpm audit を実行したら脆弱性が検出された:
$ pnpm audit
┌─────────────────┬──────────────────────────────────────────────────┐
│ high │ Development server directory traversal │
├─────────────────┼──────────────────────────────────────────────────┤
│ Package │ esbuild │
├─────────────────┼──────────────────────────────────────────────────┤
│ Patched in │ >=0.25.0 │
├─────────────────┼──────────────────────────────────────────────────┤
│ More info │ https://github.com/advisories/GHSA-67mh-4wv8-2f99│
└─────────────────┴──────────────────────────────────────────────────┘
esbuild < 0.25.0 に開発サーバーのディレクトリトラバーサル脆弱性がある。
問題
脆弱なバージョンは直接の依存関係ではなく、推移的依存関係に含まれていた。
drizzle-kit
└── esbuild@0.24.x ← これが脆弱
drizzle-kit は既に最新版を使っているが、そのバージョンがまだ古いesbuildに依存している状態。
解決策: pnpm.overrides
pnpmには overrides 機能がある。これを使うと、推移的依存関係のバージョンを強制的に上書きできる。
// package.json
{
"pnpm": {
"overrides": {
"esbuild": ">=0.25.0"
}
}
}
設定後、pnpm install を実行するとロックファイルが更新される。
確認
$ pnpm audit
No known vulnerabilities found
npm/yarnの場合
npm
// package.json
{
"overrides": {
"esbuild": ">=0.25.0"
}
}
yarn (v1)
// package.json
{
"resolutions": {
"esbuild": ">=0.25.0"
}
}
yarn (v2+)
// package.json
{
"resolutions": {
"esbuild": ">=0.25.0"
}
}
注意点
互換性の問題
強制的にバージョンを上げるため、依存パッケージが新バージョンに対応していない可能性がある。
今回のesbuildの場合:
- マイナーバージョンアップ(0.24 → 0.25)
- 開発ツール依存のみ(本番ビルドには影響なし)
- 実際にビルドして問題なく動作確認
CIでauditを回す
脆弱性は継続的にチェックすべき。CIに組み込む:
# .github/workflows/ci.yml
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- run: pnpm audit --audit-level=high
--audit-level=high で高リスクの脆弱性のみ検出。moderate 以下は許容する運用。
まとめ
| パッケージマネージャ | 設定キー |
|---|---|
| pnpm | pnpm.overrides |
| npm | overrides |
| yarn | resolutions |
推移的依存関係の脆弱性は、依存パッケージの更新を待つしかない...と思いがちだが、overridesを使えば自分でコントロールできる。ただし互換性には注意。
本記事の内容は pnpm 9.x で動作確認済みです。
参考
noteでは「AI × 技術 × ビジネス」視点で書いています
Qiitaでは純粋な技術Tipsを、noteでは「その技術をどう活かすか」というPM/事業視点の記事を書いています。
- Qiita: ハマりポイント、解決策、設定方法
- note: AI駆動開発の実践、技術選定の判断軸、放置プロジェクトの救い方