---
title: CIをサプライチェーン攻撃から守るためのversion pinning
tags:  #github actions #ci #ci/cd  
author: [takaram](https://www.docswell.com/user/takaram)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/37K98DW97D.jpg?width=480
description: PHPカンファレンス愛媛2026のLTスライドです
published: October 03, 26
canonical: https://www.docswell.com/s/takaram/5R87W1-phpcon-ehime-2026-ci-version-pinning
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/37K98DW97D.jpg)

CIをサプライチェーン攻撃から
守るためのversion pinning
PHPカンファレンス愛媛2026
takaram (@takaram71)


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LJ3W2R19J5.jpg)

サプライチェーン攻撃
● OSSライブラリなどに攻撃コードが仕込まれる
● 利用したり、インストールするだけでもマルウェアに感染
○ APIトークン、ソースコード流出
○ 本番のコードにバックドア
○ 社内ネットワークに侵入 → ランサムウェア


# Page. 3

![Page Image](https://bcdn.docswell.com/page/8JDKZYX8EG.jpg)

サプライチェーン攻撃
● 利用者の多いnpmパッケージなどが狙われがち
● Composerパッケージが侵害された事例も
○ 今年5月: laravel-lang/lang など
○ https://yamory.io/blog/laravel-lang-supply-chai
n-attack


# Page. 4

![Page Image](https://bcdn.docswell.com/page/VEPKD6PW78.jpg)

今回のLT
● CI環境でのサプライチェーン攻撃対策
● Why?
○ CI環境は毎回インストールから始める
○ 無対策だと侵害されたバージョンをインストールしちゃうかも


# Page. 5

![Page Image](https://bcdn.docswell.com/page/27VV13297Q.jpg)

よくある被害パターン
● 昨日までは問題なかった
→ 同じCIを今日動かしたら被害に遭った
● 昨日と今日で異なるものがインストールされている
● 常に同じバージョン、同じコードがインストールされるように
固定する
= version pinning


# Page. 6

![Page Image](https://bcdn.docswell.com/page/5JGL23R47L.jpg)

version pinningの対象
● Composer, npmなどのパッケージ
● サードパーティAction (e.g. actions/checkout)
● Dockerイメージ
● GitHub Releasesからダウンロード


# Page. 7

![Page Image](https://bcdn.docswell.com/page/47QYP5VREP.jpg)

Composer, npmなどのパッケージ
● lockファイルをコミットする
○ composer.lock / package-lock.json
● 常に同じものがインストールされることが保証される
● CIで composer require hoge/fuga:^1.0 もNG


# Page. 8

![Page Image](https://bcdn.docswell.com/page/KE4WY9MQJ1.jpg)

サードパーティAction
● actions/checkout@v7のv7はGitタグ
● @の後ろに書けるもの
○ タグ、ブランチ：中身が後から変わりうる
○ コミットハッシュ：後から変わらない ←採用


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L71Y6K8LJG.jpg)

サードパーティAction
●
uses:
actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
# v7.0.1
○ 末尾にコメントでどのバージョンか示すのが一般的


# Page. 10

![Page Image](https://bcdn.docswell.com/page/G7WGWDZQE2.jpg)

サードパーティAction
● gh actions-lock
○ Technical Preview (2026/10/03時点)
○ .github/workflows/actions.lockで間接依存まで固
定
● 将来的にはこっちに乗り換えることになるかも？
● 参考: GitHub Actionsにロックファイルが来るぞ


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JZL5G13E3.jpg)

Dockerイメージ
● タグとともにイメージのdigestを渡す
● php:8.5.10@sha256:df50257c90ad9a53052fb4e9c
6fdba8262cf72ca9e9a048b7c89f74c8d23fc0d
● Dockerfileだけではない
○ Docker Composeのcompose.yaml
○ GitHub Actionsのワークフローファイル


# Page. 12

![Page Image](https://bcdn.docswell.com/page/YE6W9YLZEV.jpg)

GitHub Releasesからダウンロード
● latestではなく特定のバージョン
● 既存のリリースも内容差し替え可能
● 追加でいずれかを検証
○ Attestation（構成証明）
○ チェックサム
■ Releaseページのchecksum.txtは改竄されうるので注意


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GE5MNG19E4.jpg)

GitHub Releasesからダウンロード


# Page. 14

![Page Image](https://bcdn.docswell.com/page/97295Y15JR.jpg)

対策
● これで皆さん明日から対策できますね！


# Page. 15

![Page Image](https://bcdn.docswell.com/page/DJY4KGZ67M.jpg)

対策
● これで皆さん明日から対策できますね！
● 半年後も忘れずに全部対応できる？
● 他のチームメンバーは？
○ lockファイルは一度コミットしたら大丈夫そうだが……


# Page. 16

![Page Image](https://bcdn.docswell.com/page/V7NYRGY1E8.jpg)

対策を強制する
サードパーティAction / Dockerイメージ
● pinact
● dockerfile-pin
○ pinされた状態に更新
○ pinされていないファイルを検知
■ CIに入れると強制できる


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YJ9PMWPY73.jpg)

対策を強制する
GitHub Releasesからダウンロード
● 仕組み的な強制が難しい
● インストールをmiseに寄せる
○ attestation / チェックサムを自動で検証 ※
○ GHA上はjdx/mise-actionで
※ attestationは対応リポジトリのみ、チェックサムはlockファイル作成済みの場合等のみ


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJ8DLNDKJD.jpg)

覚えておいてほしいこと
● 常に全く同じライブラリ・ツールが使われるようにする
● バージョン番号の明示だけでは足りないこともある


# Page. 19

![Page Image](https://bcdn.docswell.com/page/LJLMLPMPER.jpg)

● 荒巻拓哉
自己紹介
● X: @takaram71
GitHub: @takaram
● バックエンドエンジニア @株式会社
ラクス
○ 問い合わせ自動応対システムの
開発
● 大阪から来ました 人生初愛媛！


# Page. 20

![Page Image](https://bcdn.docswell.com/page/47MYM4Y27W.jpg)

おまけスライド


# Page. 21

![Page Image](https://bcdn.docswell.com/page/P7R9VW95E9.jpg)

version pinning以外の対策
● Composer自体をバージョンアップ
○ 最近のバージョン (2.9, 2.10) は対策を強化している
○ composer self-updateだけでセキュリティ強化
● npm, pnpmなども同様


# Page. 22

![Page Image](https://bcdn.docswell.com/page/PJXQZPQX7X.jpg)

Immutable Release
● GitHub ReleasesはImmutableになっていると安心
○ タグのforce pushやasset差し替えをGitHubが拒否して
くれる
○ Attestation自動対応
● リポジトリごとに設定で有効化する
○ 使いたいリポジトリが未対応ならIssueでお願いするといい
かも
○ リリース済みのバージョンは遡ってImmutableにはならな
い


# Page. 23

![Page Image](https://bcdn.docswell.com/page/3JK98D99JD.jpg)

ライブラリ更新
● version pinningして放置すると、古いバージョンを使い
続けることになる
● RenovateやDependabotでアップデートできるように
する


# Page. 24

![Page Image](https://bcdn.docswell.com/page/LE3W2RW9E5.jpg)

被害の最小化
● 攻撃を受けないことも重要だが、万が一の際の被害を最小
化するのも大事
○ 権限の最小化
■ permissions設定
■ secretsのAPIトークン
○ 長命なトークンを使わない仕組みを検討


