技術約10分で読めます

php2shellは設定変更では防げないので、PHPの修正版を当てる

いけさん目次

TL;DR

設定変更の効果 session.upload_progress.enabledを0にしても緩和にとどまる。PHPのコア開発者は「唯一の緩和策はPHPの更新」と投稿
修正版 10月21日23時(日本時間)に公開予定。レンタルサーバーは事業者が当て、自分で管理するサーバーは配布元のパッケージで更新する
止めるサービス BASE、コドモン、エックスサーバーの管理画面など、国内で19組織がサービス全体か一部の停止、または緊急メンテナンスを告知(piyolog集計)


php2shellは、PHPに見つかった重大な脆弱性2件の通称で、外部から任意のコードを実行される(RCE)おそれがあるとされている。
前回の記事では、PHP公式の修正版が出るまでのつなぎとして session.upload_progress.enabled を切る手順を書いた。
その後、この設定変更を最初に挙げたGMO Flatt Securityが、設定だけでは攻撃を回避できない見込みだと見解を改めた。
PHPのコア開発者も、修正版への更新以外に緩和策はないと投稿している。
設定を切ったサイトも、修正版が出たら更新することになる。

内容は日本時間10月21日21時30分時点のもので、修正版の番号と各配布元の状況は公開後に追記する。

設定変更では防げないという見解

GMO Flatt Securityの解説 は、10月21日11時台(日本時間)に出た初版で、session.upload_progress.enabled の無効化は一定の確率で緩和に役立つとしていた。
同じ日の11時13分、PHPのコア開発者Gina Peter Banyardが、この設定で防げるかもしれないという投稿への返信で次のように書いている(Mastodonの投稿)。

The only thing I can say is that the only mitigation is patching / upgrading PHP. I sadly know too much.

言えるのは、唯一の緩和策はPHPにパッチを当てるか更新することだけで、残念ながら知りすぎている、という意味だ。
これは開発者個人の投稿で、PHPの公式告知 のほうも設定による回避策は挙げていない。

Flatt Securityは14時の追記で、無効化は緩和にとどまり、攻撃自体は回避できない見込みだと書き換えた。
追記後の本文は「役に立つ可能性はありますが、攻撃は依然として可能」となっている。
同じ追記で、パッチが公開され次第すぐに適用するよう求め、悪用できると主張するコードがインターネット上に出回り始めているとも書いている。

設定を切ったうえで、念のためサービスごと止めたところもある。
AndroidベースのOSを開発しているGrapheneOSは、session.upload_progress.enabled = Off、multipart/form-data のリクエストの遮断、メモリ管理のデバッグ設定の3つを入れたうえで、それでもフォーラムを止めたと書いている(GrapheneOSの投稿)。

前回の記事に書いたとおり、設定を切ってもアップロードの進捗表示が出なくなるだけなので、修正版を当てるまでは切ったままでよい。

修正版の配布元

PHP公式の告知によると、詳細、影響バージョン、修正版は10月21日14時(UTC)、日本時間の23時のリリースと同時に公開される。
修正版をどこから受け取るかは、そのサーバーのPHPをどこから入れたかで決まる。

PHPの入手経路修正版の配布元当てる人
レンタルサーバー、マネージドホスティング(サーバーの管理を事業者に任せる形態)各事業者事業者。利用者は告知と phpinfo() で確認する
php.netのソースからビルドphp.netのダウンロード、GitHubの php/php-src自分
Windows版php.netのWindows版ダウンロード自分
Ubuntu、Debianの標準パッケージ各ディストリビューションのセキュリティ更新自分(apt)
RHEL、AlmaLinux、Rocky Linux各ディストリビューションのエラータ(修正の告知)自分(dnf)
Ondřej SurýのPPA(Ubuntu向けの個人パッケージ置き場)、Remiのリポジトリ各リポジトリ自分
Dockerの公式phpイメージDocker Hub自分(イメージを作り直してデプロイ)

UbuntuやDebianなどディストリビューションのパッケージは、修正だけを取り込む(バックポートする)ので、PHPのバージョン番号は変わらないことが多い(Patchmonの解説)。
CVE番号は公式にはまだ出ていないが、外部ではCVE-2026-109618と109619とされている。
php -v の表示だけでは修正済みか分からないので、パッケージの変更履歴にこのCVE番号が載っているかで確かめる。
公式が別の番号を出した場合は、公式の番号で確かめる。

PHP公式のサポート表 では、サポート中は8.2から8.5までで、8.2は2026年12月31日までセキュリティ修正だけを受ける。
Huntressの解説 は、修正はサポート中の8系だけに出るという見方を紹介し、5系、7系、8.0、8.1を使っている環境では更新か隔離が必要になるとしている。

サポート中の各系列で、10月21日時点の最新版は8.5.11、8.4.26、8.3.35、8.2.34で、どれも9月24日に出た版なので今回の修正は入っていない(php.netのリリース一覧)。
外部では8.5.12、8.4.27、8.3.36、8.2.35という番号が出回っているが、公式が出した番号ではないので、更新する前にphp.netの発表で番号を確かめる。

環境ごとの当て方

レンタルサーバー

共用のレンタルサーバーでは、PHP本体は事業者が管理していて、利用者が自分で修正版を入れることはできない。
事業者の告知を待ち、更新後に phpinfo() の「PHP Version」が修正版の番号になっているかを確かめる。
管理画面でPHPのバージョンを選べるサーバーで8.1以前を選んでいるなら、PHP公式の修正版は出ない見込みなので、修正版のある系列へ切り替える。
切り替える前に、使っているCMSやプラグインがその系列で動くかを確かめておく。

Ubuntu、Debian

sudo apt update
# 8.3の部分は使っている系列に合わせる
sudo apt install --only-upgrade 'php8.3-*'
apt changelog php8.3-fpm | grep -E 'CVE-2026-10961(8|9)'

apt changelog の出力にCVE-2026-109618と109619が出れば、修正を取り込んだパッケージになっている。
修正版がまだそのディストリビューションに届いていなければ、何も出ない。
UbuntuとDebianの修正状況は、Ubuntuのセキュリティ告知 と Debianのセキュリティトラッカー で確認できる。

RHEL、AlmaLinux、Rocky Linux

RHEL系のPHPはAppStream(RHELが複数のバージョンを並べて配布する仕組み)のモジュールで提供され、同じOSでもサーバーごとに系列が違うことがある。
更新の前に dnf module list php で、どの系列が有効になっているかを確かめておく。

dnf module list php
sudo dnf upgrade 'php*'
rpm -q --changelog php-fpm | grep -E 'CVE-2026-10961(8|9)'

Docker

動いているコンテナは、新しいイメージを取ってきただけでは入れ替わらない。
公式イメージをベースに自前のイメージを作っている場合は、それも作り直してからコンテナを作り直す。

docker pull php:8.3-fpm
docker compose build --pull
docker compose up -d

当てたあとの再起動

パッケージを更新しても、動いているPHP-FPMやApacheのプロセスは古いPHPのままだ。
どちらで動いているかは、phpinfo() の「Server API」欄が FPM/FastCGI か Apache 2.0 Handler かで分かる。
PHPを別のプロセスで動かすPHP-FPMは、sudo systemctl restart php8.3-fpm(RHEL系は php-fpm)で再起動する。
ApacheにPHPを組み込むmod_phpで動かしている場合は、Apacheを再起動する。
コマンドラインの php -v や php -i はCLI用のPHPの情報を出すので、Webサーバー側のPHPが新しくなったかはこれでは分からない。
再起動したら、ブラウザから開いた phpinfo() でバージョンを確かめる。
phpinfo() を書いたファイルはサーバーの設定を丸ごと表示するので、確認が終わったら消す。

予防的にサービスを止める組織

修正版の公開に合わせて、サービスを止める組織が相次いでいる。
国内は piyolog が各社の告知を集計していて、すでに止めた組織と23時前後に緊急メンテナンスを予定している組織を合わせて19ある。
下の表はこの集計を元にしていて、期間が21時30分より後に始まるものは、この時点ではまだ止まっていない。

組織止めているもの期間(日本時間)
BASEWebサービス、PAY IDアプリ、API21日15時50分〜22日7時(予定)
コドモン保護者アプリを含む全サービス21日から順次。22日早朝に再開見込み
GMW(pictSQUARE、MXentry)オンライン即売会とエントリー管理の全機能21日から。22日中の再開が目標
アルファポリス運営する全Webサイトとアプリ21日17時台の告知から。安全確認後に再開
TechBowlTechTrainとDirecTrainの全機能21日17時から。再開は未定
JCSezblox21日19時〜22日9時(予定)
CygamesShadowverse: Worlds Beyondのゲームと公式サイト21日23時から。終了は未定
Cygamesグランブルーファンタジー21日23時〜22日7時(予定)
root ip知財管理システム21日22時30分〜22日1時(予定)
エックスサーバーサービスサイト、アカウント管理画面、新規申込・契約更新・支払い。利用者のサーバーは稼働を継続21日16時から。21日深夜〜22日未明に再開見込み
Shifterダッシュボードの一部機能。公開中のサイトは影響なし21日15時〜22日10時
InfiniCLOUD新規容量アップグレード、アカウント登録21日から。来週半ばに再開予定
トッピングプラグインの新規ダウンロード、問い合わせフォーム21日18時台の告知から、対策完了まで
GrowthArts買取フォーム21日16時台の告知から。修正の適用確認後に再開
HID-Labs関連する全Webサイトと新規受注21日23時までにサイトを停止
YASUDA公式サイトとオンラインストア。出荷は通常どおり21日16時30分ごろ〜22日午前(予定)
キンブルホームページ21日16時台の告知から。再開は未定
インゲージ自社サイト21日17時台の告知から。23時の修正版公開後に順次再開
Spell Fragments開発元のWebサイト。ゲームのプレイには影響なし21日17時台の告知から。セキュリティ更新後に再開
文学フリマ事務局公式サイト。Webカタログとエントリーは継続21日16時から。修正対応の完了後に再開

リンクのない組織の告知は、piyologの記事からたどれる。
コドモン、エックスサーバー、アルファポリスは、停止の理由をソフトウェアの脆弱性とだけ書いていて、PHPを名指ししていない。
エックスサーバーはサービスサイトも止めていて、21時台に手元から開くと503を返した。
さくらインターネットは21日13時から22日8時までレンタルサーバーの一部でメンテナンスを告知しているが、piyologは本件との関連は明らかになっていないとしている。

piyologの集計には、サービスは止めずに対応を告知した組織も載っている。
Six ApartはMovable Typeのクラウド版で、修正版の公開後にPHPを更新するメンテナンスを予定していて、アルファサードはPowerCMSの利用者に、対象サイトの一時停止も検討するよう呼びかけている。
カゴヤ・ジャパンは影響を調査中としている。

海外でも、各社のステータスページや投稿で停止が告知されている。

組織止めたもの
BambooHR(人事管理サービス)WebアプリとWebサイト
addy.io(メール転送サービス)Webシステム。メールの配送は継続
GrapheneOS(AndroidベースのOS)フォーラム(PHPを使う唯一のサービスと説明)

23時の公開後に確かめること

23時の公開で、2件の内容とCVE番号、影響バージョン、修正版の番号はPHP公式の発表で決まる。
ディストリビューションのパッケージやDockerの公式イメージは各配布元が別に出すので、配布元ごとに確かめる。

確認項目確認先
修正版の番号と、2件の内容・CVE番号php.netのニュース とChangeLog
影響を受けるバージョン、8.1以前の扱い同上
UbuntuとDebianの修正パッケージUbuntuのセキュリティ告知、Debianのセキュリティトラッカー
RHEL系、Remi、Ondřej SurýのPPA、Dockerの公式イメージ各配布元
停止中のサービスの再開各社の告知