PHP はリクエストが来るたびに「準備 → 処理 → 後片付け」を繰り返します。処理を担当するプロセスは使い回されるので、1 つのプロセスが前の人のリクエストと次の人のリクエストを続けて処理します。
ふだんは後片付けで前のリクエストのデータがきれいに消えるので、次のリクエストに影響しません。今回の 2 件は、どちらもこの「準備」と「後片付け」がうまくいかない問題です。
PHP はメモリが足りなくなると、その場で処理を打ち切ります。打ち切った時点でまだ作りかけだったデータを、後片付けの処理が「正しいデータ」として読んでしまいます。
Apache + mod_php では、アプリのコードが動く前の段階(送られてきたフォームデータを読み込む準備中)に起きるため、アプリの中身に関係なく狙えます。PHP の上限設定の範囲内に見えるデータでも、メモリ不足を起こせることが確認されています。
エラーで処理が中断すると、後片付けの一部が飛ばされます。データ本体は消えたのに「そのデータがどこにあったか」という情報だけが残ります。同じプロセスが次のリクエストを処理するとき、準備が終わる前にその古い情報を使ってしまいます。
古い情報を使ってしまう入口として確認されたのは、ファイルアップロードの進み具合を記録する機能(初期設定で有効)と、PHP 8.5 のエラー時の呼び出し履歴の記録などです。メモリ不足や処理時間切れも「エラーで中断」のきっかけになります。
| PHP の動かし方 | 公式の評価 |
|---|---|
| Apache + mod_php | 最も危険・攻撃を実証済み |
| PHP-FPM | 影響あり2 件目は攻撃を実証済み |
| FrankenPHP | 影響あり |
| php-cgi / LiteSpeed | 影響あり |
Web のリクエストを受けている PHP は、すべて対象です。
これより前の版はすべて影響を受けます。8.1 以前は PHP 公式の更新対象外なので、利用中の OS やベンダーの修正を確認するか、新しい版に上げてください。8.2 は 2026 年 12 月 31 日でサポートが終わります。
Linux のディストリビューションやサポートベンダーには事前に修正が届いているので、それぞれの更新パッケージを確認してください。
php.ini などで session.upload_progress.enabled=0 にして、すべてのプロセスを再起動します。PHP 8.5 なら fatal_error_backtraces=0 も設定します。ini_set() や .user.ini での設定では効きません。
post_max_size を小さくします。アップロードがないアプリは 8M、必要なアプリは 32M。PHP の手前の Web サーバーやプロキシでも、リクエストの大きさや項目数に上限を設けます。
2 と 3 は一部の攻撃経路をふさぐ応急処置です。安全にはならないので、更新は必ず行ってください。