Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5分で問診!Composer セキュリティ健康診断
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
コドモン開発チーム
PRO
July 19, 2026
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分で問診!Composer セキュリティ健康診断
コドモン開発チーム
PRO
July 19, 2026
More Decks by コドモン開発チーム
See All by コドモン開発チーム
夫婦で子育てするための育児標準化
codmoninc
PRO
0
710
関数型プログラミングに出会って考え方の幅が広がった話 / server_side_kotlin_meetup_20_functional_fujimura
codmoninc
PRO
0
25
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
1.3k
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
490
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
710
「正解の仕様」を求めて、決断する
codmoninc
PRO
0
100
AI時代のPHP開発にASTクエリツール で コードベースの地図を作る / ast-query-tool-php-codebase-map
codmoninc
PRO
0
560
コネクションをピン留めさせずに SELECTクエリのタイムアウトを設定した話
codmoninc
PRO
0
580
コドモンに入社してAI活用により、 設計がより重要だと感じた背景
codmoninc
PRO
0
170
Other Decks in Programming
See All in Programming
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
330
AI Augmentation Techniques with Liberty
ivargrimstad
1
430
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
130
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
300
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
310
SODA - FACT BOOK(JP)
sodainc
1
40k
LLM 101: Exploring LLMs, Starting with Tokens.
dalinaum
0
100
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.5k
protojson における文字化けの扱い
kazuki1023
0
290
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
3
290
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
160
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3.1k
Fireside Chat
paigeccino
43
4.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
It's Worth the Effort
3n
188
29k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Transcript
5分で問診! Composer セキュリティ健康診断 PHPカンファレンス2026 Akito Tsukahara
自己紹介 塚原 彰仁 @AkitoTsukahara 株式会社コドモン ソフトウェアエンジニア 2歳の息子とトイプードルの父。 2014.10 学生の頃に初のPHPカンファレンスに参加 2026.07
人生で7回目のPHPカンファレンス 2
OSSサプライチェーン攻撃とは コードを直接攻撃せず、 信頼されたパッケージを乗っ取る攻撃 3
OSSサプライチェーン攻撃とは パッケージinstallを実行しただけで、 コード変更なし・ユーザー操作なしで感染 4
axios npm サプライチェーン攻撃(2026/3/31) アカウント乗っ取りによる不正なバージョンを公開 被害規模 • 週次1億ダウンロードの人気パッケージが、わずか3時間で世界中に拡散 • 実害を受けた可能性のある規模:数百〜数百万ユーザー(Microsoft推定) 5
PHPエコシステムでも発生(2026年4月〜5月) • intercom/intercom-php(2026/4/30) ◦ Mini Shai-Hulud(TeamPCP)による組織的攻撃の一部として PackagistのGitタグを改ざん • laravel-lang(2026/5/22-23) ◦
漏洩したGitHub PATを悪用し、4リポジトリで700件超のGitタ グを改ざん 6
皆さんは対策できていますか? 🩺
この診断に、絶食は不要です。 その場での挙手🙋も不要です ⚠ 挙手すると、インシデントとして扱われる可能性が...🙅 8
開発フローと防御ポイント ①取り込む前 ②取り込む時 ③使っている間 選定・検証 インストール 制御・監視 ⓪前提:Composer自体を最新に保つ 9
問診① ⓪前提 Composerのバージョンは 最新ですか? 10
処方① ⓪前提 composer self-update で更新する Composer自体のRCE脆弱性(CVE-2026-40176等)/ 2.10のマルウェア検知・タグ改ざん防止は最新版のみ 11
問診② ①取り込む前 公開直後のパッケージ、 いきなり入れてませんか? 12
処方② ①取り込む前 クールダウンを設定して、 公開直後の数日は様子見を 悪意のあるリリースの多くは数分〜数時間で検知される →数日待つだけでも大半を回避できる 13
処方② ①取り込む前 Renovateの例: “minimumReleaseAge”: “3 days” Dependabotの例: cooldown: default-days: 7
# 未設定だと3日 これが効くのは自動更新の経路だけ 手元で追加する時には注意が必要 14
おまけ:コドモンでの取り組み Lefthookで公開直後パッケージをコミット前にチェック 手動追加におけるクールダウンチェックをカバー git commit Lefthook lock差分を抽出 公開日をチェック パッケージの 更新
pre-commit フックで起動 追加・更新 パッケージを特定 公開直後なら 警告⚠ ⚠ 公開日チェックに利用しているpublished_atが改ざんされたら防げない🙅 15
問診③ ②取り込む時 composer.lock リポジトリにコミット していますか? 16
処方③ ②取り込む時 composer.lock をコミットし、 composer install で運用 依存関係の再現性と改ざん検知のため laravel-lang事例:同一バージョン番号のまま中身だけ差し替え→lock固定+installなら防げた 17
composer.lockの役割(1/2) composer.lockなしの場合 composer.json “pkg”: “^1.0” install 7/20 7/21 7/22 v
1.0.2 v 1.0.3 v 1.0.3 💀 installする度にバージョンが変化する 改ざんされたバージョンを取り込んでしまうリスクがある 18
composer.lockの役割(2/2) composer.lockありの場合 composer.lock “asdf123” install 7/20 7/21 7/22 v 1.0.2
asdf123 v 1.0.2 asdf123 v 1.0.2 asdf123 毎回同じ中身が取り込まれる CI経由でのinstallでも問題なし(バージョン偽装も防げる) 19
問診④ ②取り込む時 composer install に --no-scripts --no-plugins 付けてますか? 20
処方④ ②取り込む時 installでは、依存側のスクリプトを実行させない composer install --no-scripts --no-plugins ⚠ 何にでも付ければ良い訳ではない Laravel等は
package:discoverが必要。必要なスクリプトだけ後から明示的に実行する 21
問診⑤ ③使っている間 CIで composer audit、 実行していますか? 22
処方⑤ ③使っている間 CIパイプラインに composer audit を組み込む(検知したら落とす) composer audit --format=summary ||
exit 1 audit.block-insecure(2.9~)はupdate / require時のみ有効 23
詳細チェックリスト ⓪前提 ◻ Composer自体を最新に保つ ⭐ ①取り込む前 ◻ 公開直後の版をすぐに取り込まない ⭐ ◻
依存追加の前にパッケージの素性を確認 ◻ (組織)取り込み窓口の一元化・ミラー経由 ②取り込む時 ◻ composer.lock をコミット ⭐ ③使っている間 ◻ CI でcomposer auditを実行 ⭐ ◻ プルリクで composer.lock の差分をレビュー ◻ 脆弱性発見から一定時間内に更新するルール ◻ 上流が直らない場合の代替手段(フォーク等) 番外編(CI/CD) ◻ CI に渡すクレデンシャルの最小権限化 ◻ CI/Docker での非root実行 ◻ allow-plugins を許可リスト化 ◻ CIで --no-scripts --no-plugins ⭐ ⭐=本編で紹介した項目 24
Web問診票を用意しました!チェックしてみよう https://akitotsukahara.github.io/composer-health-check/ 25
Web問診票を用意しました!チェックしてみよう https://akitotsukahara.github.io/composer-health-check/ 26
定期的な診断もお忘れなく 💊
None
付録💊
付録|取り込み窓口の一元化(組織向け) ①取り込む前 Packagist.org に直接アクセスしていますか? Private Packagist等のミラーを経由すると: • マルウェア版のダウンロードを組織全体でブロック(古いComposerでも有効) • 依存パッケージが削除されてもビルド継続可能
参考:Blocking malware downloads for every Composer version in Private Packagist 30
付録|composer.lock 差分のレビュー ③使っている間 プルリクで composer.lock の差分、見てますか? • 意図しないパッケージの追加・バージョン変更に気づける最後の目視ポイント • 「なぜこの間接依存が増えた?」に答えられるか
lockが守れるのはinstall時のみ update時の差分レビューが、改ざん参照を持ち込む前の最終防衛 laravel-lang事後調査でも、lockのSHAを上流履歴と突き合わせる方法が感染判定手段に 31
付録|audit.block-insecure の補足 audit.block-insecure は Composer 2.9からデフォルトで true • update/require/remove の依存解決時のみ有効
• composer install には適用されない(lockの再現性維持のため意図的な仕様) なので CIでの composer audit 必須化でカバーする 既知の脆弱性があるバージョンは依存解決の時点で弾かれるが、 lockファイルからのinstallは素通りする 32
付録|minimum-release-age の現状 ①取り込む前 Composer に minimum-release-ageは 現状未実装 • 依存ポリシーの基盤は Composer2.10
で追加済み、cooldownは追加予定 • published_at メタ情報を改ざん不可能にする前提作業の完了後に実装見込み それまでは Dependabot/Renovateのクールダウン設定で代替 npm等の他エコシステムには既に存在する機能 参考:An update on Composer & Packagist supply chain security 33
参考リンク • CVE-2026-40176(Composer Perforceコマンドインジェクション) • Composer & Packagistサプライチェーンセキュリティ最新状況 • Composer
2.10リリース(マルウェア検知・タグ改ざん防止) • Composer 2.9.6リリースノート(CVE-2026-40261/40176修正) • Composer 2.9リリース(audit.block-insecure) • audit.block-insecureの適用範囲(update/require時のみ) • intercom-php侵害の詳細(Composerプラグイン化) • intercom-php GitHub Security Advisory • intercom-php:プラグイン化手口の一次分析(Socket) • laravel-lang侵害の詳細(Snyk Advisory) 34
参考リンク • laravel-lang:lock固定+installで影響なしの分析(StepSecurity) • laravel-lang:lockのSHA監査による感染判定手順(Mend) • axios npmサプライチェーン侵害(CISA Alert) •
axios事件のポストモーテム(axios公式GitHub Issue) • axios事件の技術分析(Microsoft Security Blog) • OpenSSF S2C2F 公式仕様 • Packagist:安定版バージョンの不変化(immutable versions) • Private Packagist:マルウェアダウンロードブロック • Private Packagist:ミラーリング機能 35
None