サービス料金導入事例開発ブログ会社案内 お問い合わせ →
Dev Blog

PHPの重大な脆弱性「PHP2Shell」に、8件のシステムで対応した

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の版の確認、古い環境からの移行は、お問い合わせからご相談ください。保守のご依頼も承っています(料金・開発メニュー)。

■参考