Skip to content

PHP 重大脆弱性の修正 ​

2026 年 10 月 21 日、PHP 公式が深刻な脆弱性を 2 件公表しました。ログインもアカウントも一切不要で、サーバー上で任意のコードを実行できてしまいます。Web ページを外部に公開しているすべての PHP が影響を受けます。できるだけ早く対処してください。

影響を受けますか ​

ストアが PHP で動いていれば影響を受けます。aaPanel(宝塔パネルの国際版)でも、自分でコンパイルした PHP でも、Docker でも同じです。

修正済みのバージョンは 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降です。8.1 以前は公式のサポートがすでに終了しており修正版は出ませんが、下の一括修正スクリプトなら修正できます。

自分のバージョンを確認します。

bash
php -v

aaPanel に複数の PHP バージョンを入れている場合は、バージョンごとに確認してください。例:/www/server/php/82/bin/php -v。

導入方法ごとの対処 ​

導入方法対処
aaPanel、自分でコンパイルした PHP一括修正スクリプト
OS のパッケージで入れた PHP(apt / yum)パッケージマネージャーで更新します。各ディストリビューションが修正版を提供済みです
Dockerコンテナを一括アップグレード
共用レンタルサーバーPHP を変更できません。早急にアップグレードするよう事業者に依頼してください

一括修正 ​

サーバー上で root として次のコマンドを実行します。

bash
curl -fsSL https://raw.githubusercontent.com/lizhipay/php/main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden

スクリプトはこのサーバー上のすべての PHP を自動で見つけ出し、入手元とバージョンごとに処理します。

バージョン処理内容
8.2 / 8.3 / 8.4 / 8.5同じ系列の最新の修正版へアップグレード
7.4 / 8.0 / 8.1PHP 公式の修正パッチを当てて再コンパイル
7.0 – 7.3、5.4 – 5.6本プロジェクトが移植した修正パッチを当てて再コンパイル
5.3 以前公式が推奨する緩和設定を適用するのみ

OS のパッケージで入れた PHP(apt / yum)にはスクリプトは手を加えず、実行すべき更新コマンドを表示するだけです。

ストアが止まったりしませんか?

  • どのバージョンも、先にコンパイルして検査に通ってから入れ替えます。入れ替える前には完全なバックアップを取ります。
  • 新しいバージョンが起動に失敗した場合は、自動で元のバージョンに戻します。
  • ストアが止まるのは、PHP を再起動する 1〜2 秒だけです。
  • ダウンロードする PHP のソースコードは、すべて SHA256 で検証します。

コンパイルにかかる時間はサーバーのスペック次第で、数分から 30 分ほどです。アクセスの少ない時間帯に実行することをおすすめします。

先に変更内容を確認する ​

心配な場合は、まず確認だけを行い、何も変更しないで実行できます。

bash
bash php-security-update.sh --check --harden

その他のよく使うオプション:

bash
bash php-security-update.sh --harden --only 74,82   # 指定したバージョンだけ処理
bash php-security-update.sh --harden -y             # カウントダウンを省いてすぐ開始

コマンドの --harden について ​

--harden は session ハードニングも有効にし、上の 2 件の脆弱性とは関係のない別の、以前からある問題も修正します。攻撃者は PHP の session の仕組みを利用して悪意のあるオブジェクトを送り込み、同じようにコードを実行できます。今回の公式の修正はこの問題を対象にしていないため、このページのコマンドにはすべて --harden を付けています。

有効にすると、session にはオブジェクトを一切保存できなくなります。異次元ストアシステムが session に保存するのは通常のデータだけなので、まったく影響はありません。PHP がすでに最新版であっても、この修正を組み込むために一度再コンパイルします。

同じサーバーで別の PHP プログラムも動いていて、そのプログラムが session にオブジェクトを保存している場合は、有効にするとそちらが正常に動かなくなる可能性があります。その場合はコマンドから --harden を外して実行し直してください。

GitHub に接続できない場合 ​

サーバーからスクリプトをダウンロードできないときは、こちらの URL を使ってください。

bash
curl -fsSL https://cdn.jsdelivr.net/gh/lizhipay/php@main/php-security-update.sh -o php-security-update.sh && bash php-security-update.sh --harden

Docker をお使いの場合 ​

公式イメージはすでに修正済みの PHP 8.2.35 になっており、session ハードニングも既定で有効です。自分で設定することは何もありません。

サーバーで次のコマンドを 1 行実行し、最新のイメージへアップグレードします。

bash
curl -fsSL https://raw.githubusercontent.com/lizhipay/acg-faka/main/docker/upgrade.sh | bash

スクリプトは次のことを自動で行います。

  • このサーバー上の異次元ストアシステムのコンテナを見つけます。docker run、aaPanel、1Panel のどれで作成したものでも構いません。
  • まず /data にデータボリュームがマウントされているかを確認し、されていなければそこで止まります。データを失う危険は冒しません。
  • 最新のイメージを取得し、元のポート・データボリューム・環境変数・再起動ポリシーのままコンテナを作り直します。データはそのまま残ります。
  • 新しいコンテナが起動しない場合は自動で元のコンテナに戻すので、ストアは通常どおり動き続けます。
  • すでに最新版なら何もしません。

docker compose でインストールした場合は、スクリプトがソースコードを自動で更新し、イメージを再ビルドします。この手順では PHP をコンパイルするため、数分から十数分かかります。

次の行が表示されれば、アップグレードは成功です。

[acg-faka] 当前:PHP 8.2.35,session 硬化已开启

これは「現在:PHP 8.2.35、session ハードニング有効」という意味です(スクリプトのメッセージは中国語で表示されます)。

管理画面の「オンラインアップグレード」ではこの脆弱性は修正できません

オンラインアップグレードで更新されるのはサイトのプログラムだけです。PHP 本体はイメージに組み込まれているため、新しいイメージに入れ替えなければ修正を受け取れません。

また、上の一括修正スクリプトをコンテナの中で実行しないでください。Docker をお使いの場合は、イメージを入れ替えるだけで十分です。

特殊なケース:

  • 権限がないと表示される:bash の前に sudo を付けてください。
  • このサーバーに異次元ストアシステムのコンテナが複数ある:コマンドの最後にコンテナ名を付けます。例:... | bash -s -- faka。
  • GitHub に接続できない:スクリプトの URL を https://cdn.jsdelivr.net/gh/lizhipay/acg-faka@main/docker/upgrade.sh に置き換えてください。
  • イメージの取得に失敗する:ほとんどの場合、サーバーから ghcr.io に接続できていません。スクリプトはコンテナに手を付ける前に止まるので、ストアに影響はありません。Docker にプロキシかレジストリミラーを設定してから、もう一度実行してください。

修正できたか確認する ​

aaPanel/自分でインストールした PHP:

bash
php -v

バージョンが 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 以降なら修正済みです。古いバージョン(7.x、8.0、8.1)はバージョン番号が変わらないため、スクリプトが最後に表示する結果で判断してください。

あわせて session ハードニングが有効になっているか確認してください。1 と出力されれば正常です。

bash
php -r 'echo ini_get("session.harden"), PHP_EOL;'

Docker:

bash
docker exec faka php -r 'echo PHP_VERSION, " ", ini_get("session.harden"), PHP_EOL;'

8.2.35 1 と出力されれば正常です。コンテナ名が faka でない場合は、自分のコンテナ名に置き換えてください。

MIT ライセンスで公開