テクノロジー

PHP の9.2点の穴が2つ:ビジネスにとって何を意味し、先延ばしはいくらかかるのか

10月21日に公開された PHP の緊急アップデートと CERT-EU の緊急警告は、ウェブサイトやオンラインショップを持つほぼすべての企業に関係する。損失という観点からリスクを整理し、何が危険にさらされているのか、攻撃者はどれほど速く動くのか、経営者が最低限とるべき手順は何かを示す。

PHP の重大な脆弱性:更新を後回しにしてはならない — SmartGT の記事
Коротко
  • 何が起きたのか — 緊急リリースとして PHP 8.5.12、8.4.27、8.3.36、8.2.35 が公開された。10点中9.2点と評価された2件の脆弱性をふさぐものである。
  • 問題のコスト — サイトが乗っ取られれば、販売は止まり、ドメインはブラックリストに載り、メールは顧客に届かなくなる。請求書を出すのは攻撃者ではなく、止まった業務である。
  • 何をすべきか — PHP のバージョンを確認し、同じブランチ内で更新し、php-fpm または Apache を再起動する。それ以外の対策はリスクを下げるだけである。

2026年10月21日、PHP チームは緊急アップデートを公開し、欧州のサイバーインシデント対応チーム CERT-EU は緊急警告を公表した。2件の脆弱性は危険度評価が 10点中9.2点 であり、ログインもパスワードも、企業の従業員による操作も一切なしに、攻撃者がサーバー上で任意のコードを実行できる。

企業にとって、これは抽象的な技術ニュースではない。PHP は大半のサイトが書かれている言語である。WordPress、Joomla、OpenCart、Bitrix、Laravel、さらにサイトを CRM やメール、1C とつなぐ自作スクリプトが何百とある。自社にサイト、オンラインショップ、顧客用マイページのいずれかがあるなら、問題は更新が間に合ったかどうかだけだ。

何が見つかったのか

脆弱性は2件あり、いずれも9.2点と評価され、いずれも同じ結果につながる。認証なしにサーバー上で他人のコードが実行されるという結果である。

CVE-2026-109618 — メモリ不足時の異常終了

PHP の設定 memory_limit:メモリを使いすぎたリクエストは強制的に中断される。問題は、その中断のされ方である。PHP は、リクエストの内部データが半分しか埋まっていない時点で中断することがある。たとえばアップロードフォームから送られたファイルを解析している最中である。そのようなリクエストの後片付けは、未完成のデータを本物とみなし、存在したことのないメモリを解放しようとする。そしてそのメモリには、攻撃者が以前のリクエストで置いたものが入っている可能性がある。

CVE-2026-109619 — 前のリクエストの残骸

2つ目の穴は、サーバーが前の訪問者を完全に「忘れ」ないという話である。あるリクエストに属していた内部状態が、メモリの解放を生き延びることがある。たとえば致命的なエラーのあとだ。同じワーカープロセスに入った次のリクエストは、通常の初期化がそれをゼロに戻す前に、その残骸を利用できてしまう。

ウェブリクエストを処理する PHP の構成はすべて危険にさらされている。PHP-FPM、Apache のモジュール mod_php, php-cgi、FrankenPHP、LiteSpeed。PHP チームが最も危険とみなすのは、まさに Apache と mod_php の組み合わせであり、これは今も多くの安価なホスティングで標準となっている。

実証用のエクスプロイトは、認証なしのたった1件のリクエストで成立する。サイト自身のコードが動き始める前の段階である。つまり、セキュリティプラグインも、複雑なパスワードも、二要素認証もここでは役に立たない。攻撃は一段下の層で起きているからだ。

どのバージョンが危険か

これらのバージョンより下のものはすべて脆弱である。

PHP のブランチ安全なバージョン
PHP 8.58.5.12
PHP 8.48.4.27
PHP 8.38.3.36
PHP 8.28.2.35
PHP 8.1 以前サポートなし

もう一つのリスク区分は、外からは見えないが内部に PHP が組み込まれている商用・オープンソース製品である。管理パネル、ネットワーク機器、監視カメラシステム、社内ポータルなどだ。このようなソフトの一覧は、 オランダの NCSC のリポジトリで公開されている.

企業にとっての費用

誰もあなたの会社を狙って探しているわけではない。悪用の実例が公開されると — そしてすでに公開されている — 数時間のうちに自動スキャナーが動き出し、インターネット全体を片端から調べ始める。工場のサイトか美容室のページかは関係ない。重要なのは、サーバーが脆弱なバージョンを返すかどうかだけである。

そこから先は、金額で数えられる話になる。サーバーにウェブシェルが仕込まれ、サイトはスパムや他人の広告を配り、ドメインはブラックリストに載り、そこから出すメールは顧客や取引先に届かなくなる。その間、店は売れず、担当者には問い合わせが入らず、検索エンジンはサイトを危険と判定してしまう。復旧は一晩の作業ではない。清掃、鍵の再発行、パスワードの変更、ブラックリストからのドメインの除外といった作業が何週間も続く。

別のリスクはデータである。サーバーに顧客データベースや注文履歴が置かれているなら、その流出は単なる技術的インシデントではなく、顧客や規制当局から会社に向けられる問いも意味する。

何をすべきか — 手順

  1. 自分のバージョンを確認する。 ホスティングの管理画面では「PHP バージョン」または「PHP Selector」という項目、自社サーバーではコマンド php -v。確認すべきなのはサイト自身が動いているバージョンであり、コマンドラインに入っているものではない。両者はしばしば異なる。
  2. 同じブランチの中で更新する。 8.2.29 から 8.2.35 への移行は同じブランチ内の修正であり、互換性は保たれ、サイトが壊れることはない。8.2 から 8.4 への移行と混同してはいけない。そちらは確認が必要になる。
  3. 8.1 以前を使っている場合 — これらのブランチにはサポートがない。状況の深刻さを踏まえ、PHP のセキュリティチームは 7.4、8.0、8.1 向けにも最小限の修正を出し、一部のホスティング事業者は独自ビルドを維持している。しかし正しい判断はサポートされているブランチへの移行であり、次回ではなく今、計画するほうがよい。
  4. ハンドラーを再起動する。 再起動しないかぎり、 php-fpm や Apache のワーカープロセスは古いコードで動き続け、更新は実質的に効かない。
  5. 結果を確認する。 最も簡単なのは phpinfo()を置いた一時ページを使い、確認後すぐに削除する方法か、再起動後に管理画面の「PHP バージョン」の項目を見る方法である。

ホスティング利用者の多くは、手を動かす必要はない。大手事業者は修正を事前に受け取り、自社のマシンを自分で更新している。サポートに「PHP は2026年10月21日のバージョンに更新済みか」と一行書いて送り、回答を文書で受け取るとよい。

今すぐ更新できない場合

サイトが古く、更新に準備が必要なこともある。その場合は、攻撃の機会を狭める暫定的な対策がある。

  • メモリ不足を侵入口にさせない: memory_limit=-1、アプリケーション側から上書きできない形で指定し、どのプールやディレクトリも制限を元に戻していないことを確認する。
  • 小さくする設定は post_max_size で、ファイルのアップロードがないサイトは8M、アップロードが必要なら32M とし、 upload_max_filesize はそれより低く保つ。
  • 無効にする設定は session.upload_progress.enabled で、さらにすべてのワーカープロセスを再起動する。
  • PHP 8.5 で追加的に無効化する対象は fatal_error_backtraces;
  • リクエストのサイズと複雑さをウェブサーバーまたはプロキシの層で制限する。

これらの対策のどれも、環境を安全にするものではない。既知の経路をふさぐだけであり、問題を完全に閉じるのは更新だけである。

それも不可能なら、CERT-EU は単純で歓迎されない解決策を勧めている。修正を適用して確認が済むまで、脆弱なサービスを公開インターネットから外すことである。

出典


サーバーのバージョンと更新を担当する人が社内にいない場合、監査は外部に依頼できる。たとえば SmartGTに依頼すれば、資産を点検し、脅威があるのか、どう対処すべきかをはっきり伝えてくれる。

記事の著者 — SmartGT。一次情報: 「PHP の重大な脆弱性:更新を後回しにしてはならない」.

PHP の9.2点の穴が2つ:ビジネスにとって何を意味し、先延ばしはいくらかかるのか - AGGR World