4
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?

pnpm auditで見つかった脆弱性をoverridesで解消する

4
Posted at

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駆動開発の実践、技術選定の判断軸、放置プロジェクトの救い方

👉 note.com/ebiyy

4
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
4
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?