はじめに
近年、npmパッケージの改ざんやサプライチェーン攻撃に関する報告が相次いでいます。
依存関係を最新の状態に保つことは重要ですが、公開されたばかりのバージョンをすぐにインストールする行為にはセキュリティ上のリスクが伴います。
pnpmでは、このリスクを軽減するため、公開直後のパッケージのインストールを制御するための設定がいくつか提供されています。
この記事では、minimumReleaseAgeの設定と、関連する以下の設定の活用方法をまとめてご紹介します。
-
minimumReleaseAge:パッケージ公開からインストールまでの最低経過時間 -
minimumReleaseAgeExclude:minimumReleaseAgeの適用除外パッケージ -
trustPolicy:パッケージの信頼性低下を検知するポリシー -
trustPolicyExclude:trustPolicyの適用除外パッケージ
詳細はこちらの公式ドキュメントを参考にしてください。
https://pnpm.io/ja/settings#minimumreleaseage
公開直後のパッケージのインストールを避けるべき理由
pnpmのドキュメントにも記載されているように、悪意のあるリリースはほとんどの場合、公開から1時間以内に発見され、レジストリから削除される傾向があります。
公開後、数時間でパッケージが削除されるケースも存在するため、インストールをわずかに遅らせるだけでもリスクを大幅に軽減できます。これは、有害なバージョンを誤ってインストールしてしまう可能性を低くするために非常に有効な手段です。
minimumReleaseAge の設定方法
この設定は、パッケージが公開されてから指定した時間(分単位)が経過するまで、そのバージョンのインストールを許可しないように制御します。
グローバルに設定する場合
すべてのプロジェクトに一律で設定を適用したい場合は、以下のコマンドを実行します。
pnpm config set --location=global minimumReleaseAge 1440
ここで指定する1440は分単位であり、24時間に相当します。
この設定を有効にすると、公開から24時間未満のバージョンはインストールされなくなります。より高い安全性を求める場合は、この時間を長く設定することもできます。
設定内容を確認するには、以下のコマンドを使用します。
pnpm config list --location=global
プロジェクト単位で設定する場合
プロジェクト固有の設定としたい場合は、pnpm-workspace.yamlに以下の設定を追記します。
minimumReleaseAge: 1440
または、以下のコマンドでプロジェクト設定として指定することも可能です。
pnpm config set --location=project minimumReleaseAge 1440
minimumReleaseAgeExclude による例外設定
すべてのパッケージにminimumReleaseAgeを適用すると、不便な場合があります。
例えば、社内パッケージや自身がメンテナンスしているライブラリなど、新しいバージョンをすぐに確認したいパッケージもあると思います。
このような場合、minimumReleaseAgeExcludeを使用して例外を設定できます。
minimumReleaseAge: 1440
minimumReleaseAgeExclude:
- react
- '@myorg/*'
このようにパッケージ名を指定することで、公開直後であっても制限なくインストールが可能になります。
trustPolicy による信頼性低下の検知
pnpmには、インストール対象パッケージの信頼性(プロベナンスや発行元証明など)が、以前にインストールされた時よりも低下している場合にインストールを停止するtrustPolicyという設定もあります。
trustPolicy: no-downgrade
例えば、あるパッケージが「以前は信頼できる発行元によって公開されていた」にもかかわらず、「現在はプロベナンス(証明)のみを持っている」、あるいは「信頼の証拠がまったくない」といった状況で、no-downgradeを設定している場合、インストールは失敗します。
trustPolicyExclude による例外設定
minimumReleaseAgeExcludeと同様に、trustPolicyについても特定のパッケージに対する例外指定が可能です。
trustPolicyExclude:
- '@myorg/*'
さいごに
サプライチェーン攻撃は今後も増加する傾向にあり、npmエコシステムにおけるセキュリティリスクは無視できません。
今回ご紹介したような設定を取り入れることは、プロジェクトのセキュリティ体制を強化する上で有効な対策となります。
pnpmは、本記事で紹介したセキュリティ機能に加え、ディスク容量の効率的な利用や高速なインストールなど、多くの利点を持つ優れたパッケージマネージャーですのでこの機会にぜひ使ってみてください。