Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pnpmでできるサプライチェーン攻撃への備え / Pnpm Security Practices
Search
Daichi KUDO
June 11, 2026
860
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
pnpmでできるサプライチェーン攻撃への備え / Pnpm Security Practices
https://tamadev.connpass.com/event/391266/
多摩.dev #3 での発表資料
Daichi KUDO
June 11, 2026
More Decks by Daichi KUDO
See All by Daichi KUDO
ゲームから学ぶUX設計 / UX Design Inspired from Games
da1chi
0
430
エンジニアが始める UXリサーチ 入門 / Introduction of UX Research
da1chi
0
580
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
830
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
7k
Hotwireで簡単に非同期処理のユーザー通知を作る / broadcast using Turbo
da1chi
1
200
テストライブラリによってコンポーネントテストの実行時間はどう変わるか / component-test-performance-by-library
da1chi
0
130
Blue/Greenデプロイの導入による 運用フローの改善
da1chi
1
1.2k
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Abbi's Birthday
coloredviolet
3
9.3k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
Code Review Best Practice
trishagee
74
20k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
The Pragmatic Product Professional
lauravandoore
37
7.4k
KATA
mclloyd
PRO
35
15k
Believing is Seeing
oripsolob
1
190
How to train your dragon (web standard)
notwaldorf
97
6.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Transcript
pnpmを活用した サプライチェーン攻撃への備え Daichi KUDO (@da1chi24) 多摩.dev #3 at パルテノン多摩
• npm パッケージを狙ったサプライチェーン攻撃が増えています • パッケージマネージャーでは対策に役立つ設定が多いですが、 どのレイヤーに効果があるのか整理しないと分かりにくいです • ここでは攻撃手順と比較しながら、普段パッケージ利用者の自分が 行っている pnpm
(v11.5.2) でできる対策を紹介します • 他の npm/yarn でも同様の設定はあるので、それらでも適用 できる内容が多いです 今回話すこと
自己紹介 • Daichi KUDO ◦ GitHub @kudoas ◦ Twitter @da1chi24
• 興味・関心ごと ◦ UI/UX、フロントエンド全般 ◦ 開発者体験、Devtools
サプライチェーン攻撃のプロセス(例) 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される パッケージ開発者 パッケージ利⽤者
パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される パッケージ開発者 ライブラリ利⽤者 ①危険性のあるものを インストールしない
パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される ②インストールスクリプ トを実行しない パッケージ開発者 パッケージ利⽤者
③認証情報を セキュアに管理する パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール
利用者がパッケージ をインストールする 3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される パッケージ開発者 パッケージ利⽤者
パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される パッケージ開発者 ライブラリ利⽤者 ①危険性のあるものを インストールしない
• minimumReleaseAge (デフォルト 1440(分) v11.0.0~) セキュリティ対応されるまでの時間を稼ぐ https://pnpm.io/settings#minimumreleaseage 利用者 バージョン v1.0.0
汚染バージョン v1.0.1 削除 指定時間以上 経過したものを インストール
• blockExoticSubdeps (デフォルトtrue v11.0.0~) 推移的依存の参照先が信頼できるかチェック https://pnpm.io/settings#blockexoticsubdeps Package A Package B
Package C Package D 信頼しないURL例 git+ssh://... https://.../package.tgz インストール対象
• trustPolicy: “no-downgrade” (デフォルト: “off”) リリース元の信頼レベル低下を検知 https://pnpm.io/settings#trustpolicy tear 1 staged
publishing 2FA + メンテナー承認 tear 2 trusted publishing OIDCでの認証 tear 3 provenance 誰がいつpublishしたか証跡 tear 4 なし なし リリース元の信頼性レベルのランク 前回のリリース 今回のリリース 2026.6.7時点 pnpmのみ
パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される ②インストールスクリプ トを実行しない パッケージ開発者 パッケージ利⽤者
• v10.0.0よりデフォルト • strictDepBuilds: true で必要なものだけ許可 インストールスクリプトを実行しない https://pnpm.io/settings#strictdepbuilds 設定例
③認証情報を セキュアに管理する パッケージ利用者が対策できる3つのフェーズ 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール
利用者がパッケージ をインストールする 3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される パッケージ開発者 パッケージ利⽤者
pnpm-workspace.ymlに設定を集約する pnpm v10 pnpm v11~ .npmrc 設定全て auth/registry のみ pnpm-workspace.yml
設定全て auth以外の設定全て .npmrcを.gitignore に含めるのが推奨 https://pnpm.io/blog/releases/11.0#npmrc-is-authregistry-only
• .envに直接トークンを書くと流出のリスクがある ◦ よくない例: export NPM_TOKEN=ghp_xxxx • 1passwordなどを用いて認証情報を安全に保存する ◦ 1password
CLI なら参照するときだけ利用できる ◦ NPM_TOKEN=”op://xxx” op run -- pnpm install トークンの平文でローカルに保存しない
紹介した対策 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される minimumReleaseAge blockExoticSubdeps trustPolicy install script停止 strictDepsBuild .npmrcをgit管理しない トークンの脱平文管理
紹介した対策 1. 公開 危険性なパッケージ のバージョンが公開 される 2. インストール 利用者がパッケージ をインストールする
3. 自動実行 悪意のあるライフ サイクルスクリプト が実⾏される 4. 感染 認証トークンなどの 重要な情報が 外部に送信される minimumReleaseAge blockExoticSubdeps trustPolicy install script停止 strictDepsBuild .npmrcをgit管理しない トークンの脱平文管理 pnpm v11.0.0より 下線デフォルト有効
npm v12 でも同様にサポートされる予定 https://github.blog/changelog/2026-06-09-upcoming-breaking-changes-for-npm-v12/ 2026.6.9
• 基本的な防御策は「インストールしない」こと • pnpm v11で安全に倒すデフォルトが増えた ◦ minimumReleaseAge: 1440(分) ◦ blockExoticSubdeps:
true ◦ strictDepBuilds: true ◦ インストールスクリプトの無効化 • 今後さまざまなオプションや対策が増えると思われる まとめ
• 企業で進める場合、各チームの全リポジトリで設定を 漏れなく適用するのは大変だと思います。 • そこで「組織の共通設定を用意し、各リポジトリに 配布する」ということを進めています。 • まだ私も試行錯誤の段階ですので、上手く進んだら どこかで続きをお話します。 今後の課題
• axios ソフトウェアサプライチェーン攻撃の概要と対応指針 - GMO Flatt Security Blog • pnpm
11.0 • Settings (pnpm-workspace.yaml) • Package Managers Need to Cool Down | Andrew Nesbitt • Staged publishing for npm packages • Trusted publishing for npm packages • Mitigating supply chain attacks | pnpm • サプライチェーン攻撃への防御策 | blog.jxck.io • Upcoming breaking changes for npm v12 - GitHub Changelog 参考URL