PHPにリモートコード実行の欠陥、修正版が公開
PHP 8.2から8.5の一部の版に、外部からのリクエストを通じて任意のコードを実行されるおそれのある脆弱性(CVE-2026-109619)が見つかり、修正版が公開されました。認証なしでネットワーク越しに狙える種類ですが、悪用には条件があり、実際の攻撃での悪用確認は現時点で公表されていません。PHP を動かしているサーバーやコンテナの版を確認し、修正版(8.2.35、8.3.36、8.4.27、8.5.12)へ早めに更新してください。
急ぎ度: 早めに
深刻度はCVSS v4で9.2と最高クラスで、認証なしにネットワークから狙えますが、悪用には特定の条件が必要で、実際の攻撃での悪用確認は公表されていないため、通常の定期更新を待たず優先的に対応するのが妥当です。
関係があるか
PHP 8.2、8.3、8.4、8.5系の修正前の版を、WebサーバーやPHP-FPMなどで動かしている組織が対象です。インターネットに公開しているPHPアプリケーション(WordPressなどのCMSや自社開発システムを含む)は優先度が高くなります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| PHP 8.2 系 | 8.2.0以上8.2.35未満 | 8.2.35 |
| PHP 8.3 系 | 8.3.0以上8.3.36未満 | 8.3.36 |
| PHP 8.4 系 | 8.4.0以上8.4.27未満 | 8.4.27 |
| PHP 8.5 系 | 8.5.0以上8.5.12未満 | 8.5.12 |
確かめ方
- 1サーバーで
php -vを実行し、版が上の表の影響範囲に入るか確認します。Webサーバー用のPHPは、コマンドライン用とは別の版が入っていることがあります。 - 2PHP-FPMを使っている場合は
php-fpm -v(環境によってはphp-fpm8.3 -vなど)で、実際にリクエストを処理している側の版を確認します。 - 3コンテナを使っている場合は、稼働中のイメージごとに
docker run --rm イメージ名 php -vで版を確認します。古いベースイメージが残っていないかも見直してください。 - 4Linuxディストリビューションのパッケージを使っている場合、版番号が上流と異なる形で修正が取り込まれていることがあります。版番号だけで判断せず、各ディストリビューションのセキュリティ情報でCVE-2026-109619の対応状況を確認してください。
何が起きたか
PHPの本体に、リモートコード実行(外部から送られたリクエストをきっかけに、サーバー上で意図しないプログラムを動かされること)につながる脆弱性が見つかりました。2026年10月21日に公表され、PHP 8.2から8.5の各系統で修正版が出ています。
PHPは、リクエストを処理するたびに一時的な作業用のメモリを使い、処理が終わるとそれを解放します。たとえるなら、会議室のホワイトボードを次の会議の前に消し忘れ、前の会議のメモを見て次の会議が進んでしまうような状態です。今回の問題は、そのメモリへの参照が解放後も残ってしまう点にあります。
技術的には、リクエストのメモリを指すPHP内部のグローバルな状態が、一部の場面で正しく初期化されない、あるいは初期化の後にもう一度設定されてしまう不具合です。その結果、解放済みのメモリを指す状態が残り、後続のリクエストが完全な初期化の前にその古い状態を読んだり、それをもとに処理を分岐させたりします。弱点の種類としては、解放後のメモリの利用(CWE-416)などに分類されています。
アドバイザリーによると、この状態を引き起こす方法は複数あり、いずれもリモートコード実行につながり得るとされています。個々の方法の詳細は、ここでは取り上げません。
攻撃の流れ
-
1
状態が残る
リクエスト処理中に使う内部の状態が、処理後に正しく消されない、または消した後に再び設定されます。
-
2
メモリを解放
リクエスト用のメモリが解放されても、内部の状態は解放済みの領域を指したままになります。
-
3
次の要求が参照
後続のリクエストが、初期化が終わる前にその古い状態を読み取って処理を進めます。
-
4
処理が乱れる
想定外の内容を参照した結果、プログラムの動きを攻撃者に左右される余地が生まれます。
-
5
コード実行
条件が整うと、サーバー上で任意のコードが実行されるおそれがあります。
どう悪用されるか
CVSS v4のベクターでは、ネットワーク経由(AV:N)で、事前の認証は不要(PR:N)、利用者の操作も不要(UI:N)とされています。一方で、攻撃の難易度は高め(AC:H)で、成功するには特定の前提条件(AT:P)が必要です。そのため、PHPを公開しているだけで直ちに簡単に破られる、という性質のものではありません。ただし、条件が整った環境では影響が大きくなります。
悪用に成功した場合、機密性・完全性・可用性のいずれにも高い影響(VC:H/VI:H/VA:H)があります。具体的には、PHPを動かしているサーバー上の情報の読み取りや改ざん、サービス停止、アプリケーションの権限での任意のコード実行が想定されます。他のシステムへの波及(後続システムへの影響)は、評価上は想定されていません。
実際の攻撃での悪用が確認されたという情報や、米国CISAのKEV(悪用が確認された脆弱性の一覧)への掲載は、現時点で確認できていません。ただし、参照先には脆弱性の詳細を扱う外部の技術ブログも含まれています。詳細な技術情報が出回ると攻撃の難易度が下がることがあるため、状況の変化に注意してください。
今すぐやること
-
1
使っているPHPの版を洗い出す
本番・検証・開発のサーバー、コンテナイメージ、CIで使うイメージを含め、PHP 8.2〜8.5系の版を一覧にします。インターネットに公開しているものを先に確認してください。
php -v -
2
修正版へ更新する
8.2系は8.2.35、8.3系は8.3.36、8.4系は8.4.27、8.5系は8.5.12以降にします。ディストリビューションのパッケージを使っている場合は、修正を取り込んだ版が配布されているか各社の情報で確認し、配布され次第適用します。
-
3
更新後にプロセスを再起動して版を確かめる
更新しても、PHP-FPMやApacheなどの動いているプロセスが古いままのことがあります。サービスを再起動または再読み込みし、実際に動いている側の版が修正版になったことを確認します。
php-fpm -v -
4
コンテナイメージを作り直して入れ替える
コンテナで運用している場合は、ベースイメージを修正版に更新して再ビルドし、稼働中のコンテナを入れ替えます。古いイメージが再デプロイで戻らないよう、タグの指定も見直してください。
docker run --rm イメージ名 php -v -
5
更新までの間、ログを確認する
更新が遅れる環境では、Webサーバーやアプリケーションのログで、異常終了(クラッシュ)の増加や、見覚えのないファイル・プロセスがないかを確認します。ログに痕跡が残らない可能性もあるため、異常がないことが無事の証明にはなりません。
すぐ更新できないとき
公式の回避策は公表されていません。修正版への更新が基本の対応です。更新に時間がかかる場合は、公開範囲を必要な相手に絞る、WAFやリバースプロキシで不審なリクエストを監視するといった一般的な被害低減策を併用できますが、この脆弱性を確実に防げるとは限りません。
背景
PHPはWebアプリケーションの実行基盤として広く使われており、WordPressなどのCMS、ECサイト、社内向けの業務システムなど、さまざまな場所で動いています。多くの場合、インターネットから直接リクエストを受け取る位置にあるため、実行基盤そのものに弱点があると影響が大きくなりやすい製品です。
PHPのようにC言語で書かれた処理系では、メモリを解放した後にその領域を使い続けてしまう不具合(解放後使用)が、以前からコード実行につながる弱点の典型として知られています。今回も、その種類の問題が、リクエストをまたいで残る内部状態という形で現れたものです。アプリケーション側のコードの書き方では防ぎにくいため、PHP本体を更新することが対策になります。
よくある質問
Q.PHP 8.1以前や8.2より古い系統は影響を受けますか。
Q.アプリケーションのコードを直す必要はありますか。
Q.攻撃の難易度が高いとされているなら、急がなくてもよいですか。
Q.ディストリビューションのPHPは、版番号が修正版より小さくても安全なことがありますか。
まだ分かっていないこと
- 実際の攻撃での悪用が確認されているかは、現時点で明らかになっていません。KEVへの掲載も確認できていません。
- 悪用に必要な前提条件の具体的な内容や、どのような構成で成立しやすいかは、公表されている範囲では詳しく分かっていません。
- 8.2系より古い系統への影響や、修正が提供されるかどうかは公表されていません。PHPの公式アドバイザリーや各ディストリビューションの告知で確認してください。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| PHP GroupPHP |
8.2.0 以上 8.2.35 未満→ 8.2.35 8.3.0 以上 8.3.36 未満→ 8.3.36 8.4.0 以上 8.4.27 未満→ 8.4.27 8.5.0 以上 8.5.12 未満→ 8.5.12 |
8.2.35 8.3.36 8.4.27 8.5.12 |
| Bitnamilibphp |
5.4.0 以上 8.2.35 未満→ 8.2.35 8.3.0 以上 8.3.36 未満→ 8.3.36 8.4.0 以上 8.4.27 未満→ 8.4.27 8.5.0 以上 8.5.12 未満→ 8.5.12 |
8.2.35 8.3.36 8.4.27 8.5.12 |
| Bitnamiphp-min |
5.4.0 以上 8.2.35 未満→ 8.2.35 8.3.0 以上 8.3.36 未満→ 8.3.36 8.4.0 以上 8.4.27 未満→ 8.4.27 8.5.0 以上 8.5.12 未満→ 8.5.12 |
8.2.35 8.3.36 8.4.27 8.5.12 |
| Bitnamiphp |
5.4.0 以上 8.2.35 未満→ 8.2.35 8.3.0 以上 8.3.36 未満→ 8.3.36 8.4.0 以上 8.4.27 未満→ 8.4.27 8.5.0 以上 8.5.12 未満→ 8.5.12 |
8.2.35 8.3.36 8.4.27 8.5.12 |
ディストリビューション別の修正状況
各ディストリビューションが公開している、この CVE の記録です。修正版は配布版ごとに違うので、リンク先で確かめてください。
- Alpine Linux ALPINE-CVE-2026-109619 php85, php84, php83 ほか 1 件 修正版あり
- BellSoft Alpaquita BELL-CVE-2026-109619 php83, php81 修正版あり
- Debian DEBIAN-CVE-2026-109619 php8.4, php8.2 修正版あり
- Ubuntu UBUNTU-CVE-2026-109619 php8.5, php8.3, php8.1 ほか 4 件 修正版あり
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
PHP has various global state that temporarily points into request memory. In some scenarios, global state may not be correctly reset, or may be repopulated after being reset. The global state may then refer to request memory even after it has been freed. Subsequent requests may read or branch on this stale state before it is fully initialized. Multiple strategies can trigger this condition and produce remote code execution (RCE).
出典: NIST National Vulnerability Database NVD GitHub Advisory CISA KEV
参照URL
- advisory github.com
- advisory wiz.io
- advisory nvd.nist.gov
- advisory php2shell.delftintellab.com
- advisory arcticwolf.com
- advisory github.com
- REDHAT Red Hat
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web openwall.com
- web cert-portal.siemens.com
- web openwall.com
- web cisa.gov
- web cert-portal.siemens.com
- web cert-portal.siemens.com