---
title: "PHP2Shell：脆弱なPHPバージョンから、Harbynでレビューできるプルリクエストまで | Harbyn"
description: "Harbynの公開スキャンを、PHP2Shellの検出結果から実際の更新PRまでたどります。厳密なバージョン指定、可変タグ、そしてレビューに残る判断について。"
canonical: "https://harbyn.com/jp/blog/php2shell-production-runtime"
last-updated: 2026-10-22
---

# PHP2Shell：脆弱なPHPバージョンから、Harbynでレビューできるプルリクエストまで

公開日 2026年10月22日、著者 Harbyn。タグ: php, security, php2shell, developer-tools。

PHPの重大な更新が出たとき、告知は始まりにすぎません。次の問いはあなたのプロジェクト固有のものです。影響を受けるバージョンはどこで宣言されていて、何を変える必要があるのか。

PHP2Shellはその具体例になりました。PHPのバージョンをさまざまな方法で宣言した公開デモリポジトリに対してHarbynを実行したところ、スキャンは11ファイルで6件の検出を報告し、Harbynは厳密なバージョン指定2か所を更新するプルリクエストを作成しました。

[スキャンの実行結果](https://github.com/harbyn/php2shell-demo/actions/runs/39718957930)と[実際のプルリクエスト](https://github.com/harbyn/php2shell-demo/pull/1)を確認できます。以下では、何が起きたのか、そして同じ流れを自分のリポジトリで試す方法を説明します。

## PHP2Shellで何が起きたか

2026年10月21日、PHPは2件の重大な脆弱性、CVE-2026-109618とCVE-2026-109619の修正をリリースしました。これらは認証なしでのリモートコード実行につながるおそれがあります。修正版は **8.2.35、8.3.36、8.4.27、8.5.12** です。[PHPの公式セキュリティ告知](https://www.php.net/archive/2026.php#2026-10-21-5)を参照してください。

開発チームにとって、この告知に対応するとは、リポジトリ内に散らばったPHPの宣言を見つけることです。ランタイムはDockerfileで固定されていることも、Composeで参照されていることも、ワークフローで設定されていることも、Composerの設定に表れていることもあります。これらの宣言はどれも同じ意味ではないため、同じ編集をすべきではありません。

## デモ：6件の検出と、レビューできる1つのPR

[デモリポジトリ](https://github.com/harbyn/php2shell-demo)は、このデモのために作った小さな架空のPHPアプリケーションです。厳密なバージョン指定、可変のバージョン、Composerの要件、PHP 8.1のイメージが含まれています。

Harbynを使い、GitHub Actionが11ファイルをスキャンして、対応が必要な6行を報告しました。その後、Harbynは対応している更新についてPRを作成しました。

これにより、セキュリティ告知からリポジトリ内の宣言、そして提案された変更までを追跡できます。根拠は説明用のターミナル画面ではなく、実行ログと差分にあります。

## 検出結果ごとに対応が異なった理由

6件の検出は、6件の同じ修正ではありませんでした。

| デモ内の宣言 | 対応 |
| --- | --- |
| PHPの厳密なバージョン指定2か所 | 同じPHPブランチの修正済みパッチリリースに更新する。 |
| 可変のバージョン2か所 | 該当する環境を再ビルドまたは更新し、実際に使われているランタイムを確認する。 |
| ComposerのPHP要件 | インストールされたインタープリターとは別に、互換性の要件を見直す。 |
| PHP 8.1のイメージ | アプリケーションの互換性も含めて、サポート中のブランチへの移行を検討する。 |

`php:8.3-fpm` のような可変タグは、古いイメージがデプロイされたままでも変わらないことがあります。Dockerfileには置き換えるバージョン文字列がないかもしれません。必要なのは、修正済みのイメージを取得してデプロイすることです。

古いPHPブランチにも別の判断が必要です。アプリケーションをPHP 8.1からサポート中のブランチへ移すと、互換性に影響することがあります。ディストリビューションや延長サポートのパッケージには修正がバックポートされている場合もあるため、実際に使っているパッケージのセキュリティアドバイザリを確認してください。[PHPの告知](https://www.php.net/archive/2026.php#2026-10-21-5)でもこれらの選択肢に触れています。

## プルリクエストの中身

[生成されたPR](https://github.com/harbyn/php2shell-demo/pull/1)には、対象を絞った2つの変更が含まれています。

`Dockerfile` では、PHPのベースイメージを更新します。

```diff
-FROM php:8.3.35-fpm
+FROM php:8.3.36-fpm
```

`composer.json` では、`config.platform.php` を更新します。

```diff
-      "php": "8.3.35"
+      "php": "8.3.36"
```

2つ目の変更には説明が必要です。Composerのplatform設定は、依存関係の解決でどのPHPバージョンを前提にするかを伝えるものです。PHPをインストールしたり更新したりはしません。Dockerfileと一緒に更新することで、その前提を想定するランタイムに合わせられます。[Composerのプラットフォーム依存関係のドキュメント](https://getcomposer.org/doc/articles/composer-platform-dependencies.md)を参照してください。

PRは提案された編集をまとめてレビューできるようにします。レビューの後も、チームは更新したイメージをビルドしてデプロイし、古いインスタンスを置き換え、実際にリクエストを処理しているランタイムを確認します。そうして初めて、リポジトリの変更がアプリケーションに届きます。

## 自分のリポジトリでHarbynを試す

リポジトリのディレクトリで、次を実行します。

```sh
npx harbyn scan
```

スキャナーはローカルで動き、Harbynの署名付き変更フィードをダウンロードして、ソースコードをアップロードすることなく対応している宣言を確認します。

報告されたファイル、行、出典を確認してください。PRのワークフローを設定するには、[Harbynのドキュメント](https://harbyn.com/docs)に従ってください。

PHP2Shellは、Harbynが開発者を手助けする問題の一例です。外部の変更が、リポジトリの特定の行に関わってくる。Harbynはその変更をコードに結びつけ、対応している修正があれば、レビュー用に更新を準備します。

[プロジェクトをスキャンする](https://harbyn.com)か、まず[PHP2Shellの公開PR](https://github.com/harbyn/php2shell-demo/pull/1)をご覧ください。
