2026年10月21日、PHPの開発元が、重大な脆弱性を直した修正版を公開した。報道では「PHP2Shell」と呼ばれている。弊社が開発に関わったPHPのシステム8件(開発中の1件を含む)で、この対応をした。保守の契約を結んでいたのは、このうち2件だった。
■何が起きたか
- 対象はCVE-2026-109618とCVE-2026-109619の2件。ログインしなくても、外部からサーバー上でプログラムを実行される恐れがある
- 修正版は 8.5.12・8.4.27・8.3.36・8.2.35
- サポートが終わっている8.1以前には、公式の修正版が出ない
- 攻撃に使えるコードも、すでに公開されている
■最初にしたこと
- システムごとに、サーバーで動いているPHPとOSの版を確かめた
- 分かれ方は2通りだった。修正版に上げられるもの(5件)と、OSもPHPも古く、環境から作り直したもの(3件)
■修正版に上げたもの(5件)
同じ8系の中で版を上げる作業だが、そのまま上げずに次の順で進めた。開発中でまだ公開していないシステムも、公開前に修正版に上げた。
- 新しい版で動かないライブラリがないかを、composerで先に確かめた。PHPの拡張の一覧も控えておいた
- サーバーのOSのパッケージに、修正版が届いているかを確かめた。Amazon Linux 2023では、古いOSのリリースのままでは新しいPHPが入らず、OSのリリースから上げる必要があった。修正版は、公開から数日でパッケージに入っていた
- 開発用のサーバーで先に試し、手順を固めてから本番に同じ手順で入れた。作業の前に、サーバーを丸ごと戻せるようにしておいた
作業中につまずいたのは、次の2点。
- メモリの少ないサーバーで、パッケージの一覧を取っただけでメモリを使い切り、サーバーが応答しなくなった。スワップを足してから作業し直した
- PHPのパッケージを入れ替えると、PHPの自動起動の設定が外れた。そのままだと、次にサーバーを再起動したときにサイトが止まる
あわせて、開発用のエラー表示がオンのままになっていたサーバーもあったので、オフにした。
■環境から作り直したもの(3件)
3件は、OSがAmazon Linux 2で、PHPやLaravelも古い版のままだった。Amazon Linux 2は、2026年6月末でサポートが終わっている。PHP 7のままのものには、今回の修正版もない。PHPだけを上げても土台が古いままなので、この機会に作り直すことにした。
- サーバーはAmazon Linux 2023で新しく作り、PHP 8.5と最新のLaravelで動くようにプログラムを移植した
- 画面と処理の中身は、そのまま変えていない。変わったのは、フレームワークの土台の部分(ルートの定義、起動の処理、設定ファイル)が中心
- 移植したあとは、自動テストと、新旧のURLの一覧の突き合わせで、動きが変わっていないことを確かめた
- 古いコードを読み直したことで、ほかの問題も見つかった。ログインの確認が抜けていた画面などで、移植とあわせて直した
■対応して分かったこと
- PHPを上げるだけでは終わらない。修正版に上げたシステムでも、使っているLaravelの版のサポートが終わっていて、ライブラリにも直すべき脆弱性が残っていた。これは次の課題として残っている
- サポートが終わった版は、今回のようなときに修正版がもらえない。PHP 8.2のサポートも2026年12月31日で終わる。OSも同じで、Amazon Linux 2のように土台のサポートが切れていると、PHPだけの問題では済まない
- 版を上げられる状態を保っておくことが、保守の大事な部分だと改めて思った。開発用のサーバー、元に戻す方法、動きを確かめるテストがそろっていれば、今回のような脆弱性が出ても数日で対応できる
■保守の契約がない会社が確かめること
- 自社のシステムのPHPとOSの版。分からなければ、レンタルサーバーの管理画面か、作った会社に確認する
- PHPが8.2・8.3・8.4・8.5なら、修正版(8.2.35・8.3.36・8.4.27・8.5.12)以降になっているか
- PHPが8.1以前なら、修正版は出ない。新しいPHPへの移植を検討した方がよい
- サーバーのOSのサポート期限。Amazon Linux 2などサポートが終わったOSなら、作り直しも合わせて考える
サーバーがPHPの版を外に出している場合は、弊社の無料の診断サイト セキュリティブースター で、版数とサポートの期限を確かめられる。
■所感
- 今回はたまたまPHPが対象になったが、同じことはほかの言語やOSでも起きる。Javaのライブラリ(Log4j)の脆弱性のように、これまでも同じくらい重いものは出てきたし、これからも出るはずだ
- だから、どの言語で作るかより、版を上げ続けられるかの方が大事だと思っている。言語・フレームワーク・OSのそれぞれのサポート期限を把握し、上げるときに動きを確かめる手順と、元に戻す方法を用意しておく
- 古い環境ほど、上げるときの手間は大きい。今回も、環境から作り直した3件は、版を上げただけの5件よりずっと手間がかかった。普段から少しずつ上げておく方が、結果として安く済む
PHPやOSの版の確認、古い環境からの移行は、お問い合わせからご相談ください。保守のご依頼も承っています(料金・開発メニュー)。
■参考