---
title: php2shellの夜、PHP 7.4の本番を止めずに守った ― WAFとini 1行と実際の攻撃
tags:  #php #セキュリティ #脆弱性 #waf #aws #php2shell #claudecode  
author: [井本 賢](https://image.docswell.com/user/kenimo49)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LELMQ69V7R.jpg?width=480
description: 2026年10月21日、PHPの任意コード実行の脆弱性 php2shell（CVE-2026-109618 / 109619）の夜。修正版が出ない PHP 7.4 の本番サイトを、止めずに WAF と php.ini の 1 行で守り、その直後に実際の攻撃を Block するまでを 15 枚にまとめました。  ▼扱う論点 - 影響をバージョン・成立条件・外から届くかの 3 軸で見る - multipart を止める前に、何が壊れるかをコードとログで調べる - Host 偽装ですり抜けられない除外条件と、ALB ごとの Web ACL - php-fpm の reload で 502 を出さない、1 台ずつの反映 - 最初の攻撃を止めたのは ALB の 301 だった話 - Block にしたら何も止まらなくなった、二重 base64 の罠 - Remi に 7.4.33-31 が出ていた件  ▼記事の全文（コマンド・WAF ルールの JSON・侵害確認の手順） https://qiita.com/kenimo49/items/30f290bf0f4fff021fb3  ▼更新前にできる暫定対策 7 つ https://kenimoto.dev/ja/blog/php2shell-mitigation-before-update/  ▼最後に宣伝させてください（php2shell とは別テーマの本です） 『MCP実践セキュリティ』（インプレス）― AI エージェント / MCP を本番に入れるときのセキュリティ https://kenimoto.dev/ja/books/mcp-security-practice  著者: ken imoto / kenimoto.dev
published: October 22, 26
canonical: https://image.docswell.com/s/kenimo49/Z1Q8NG-php2shell-night-php74-no-downtime
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LELMQ69V7R.jpg)

PHPセキュリティ / 2026-10-21 の夜
php2shellの夜、
PHP 7.4の本番を
止めずに守った
修正版が出ない版で、WAFとini 1行。
そして実際に来た攻撃
ken imoto エンジニア
php2shellの夜 / PHP 7.4を止めずに守る 1 / 15 kenimoto.dev

# Page. 2

![Page Image](https://bcdn.docswell.com/page/4JMY15ZNJW.jpg)

何が起きたか
PHPの任意コード実行、
7.4には修正版が来ない
CVE-2026-109618 / 109619 (CVSS v4.0 9.2)。php.net の告知で修正版が出たのは 8.2～8.5 だけでした。
9.2
CVSS v4.0。
ログイン不要で届く
8.2～8.5
修正版が出た系列
(8.5.12 / 8.4.27 / 8.3.36 /
8.2.35)
7.4
7.4 / 8.0 / 8.1 は
ソースへのパッチのみ
php2shellの夜 / PHP 7.4を止めずに守る 2 / 15 kenimoto.dev

# Page. 3

![Page Image](https://bcdn.docswell.com/page/PJR9L36479.jpg)

放っておくと何が起きるのか
1本のPOSTで、ここまで開く
直接取られるのは コード実行 と メモリの中身。その先は一般に起きることです。
データの持ち出し
DBの接続情報を読まれ、利用者の情報をまとめて抜かれる
居座り
Webシェルやcronは、PHPを更新しても抜けない
クラウドへの横展開
EC2のメタデータからロールの認証情報を取られる
メモリの漏えい
Heartbleedのように、他人のセッションやパスワードが漏れうる
php2shellの夜 / PHP 7.4を止めずに守る 3 / 15 kenimoto.dev

# Page. 4

![Page Image](https://bcdn.docswell.com/page/PEXQW4MZJX.jpg)

その夜、止まったサービス（報道ベース）
業種を問わず、大手が止めた
止めるのは正しい判断の1つ。ただ、売上と利用者の信頼が削られます。私たちは止めずに守る道を選びました。
BASE
メロンブックス
ニコニコ
バンダイチャンネル
pixiv
BOOK☆WALKER
ウマ娘
グランブルーファンタジー
Shadowverse: WB
Pokémon Sleep
ヘブンバーンズレッド
makeshop / カラーミー
出典: GIGAZINE / ファミ通 / Yahoo!ニュース (10/21～22 報道時点)
php2shellの夜 / PHP 7.4を止めずに守る 4 / 15 kenimoto.dev

# Page. 5

![Page Image](https://bcdn.docswell.com/page/3EK9VZGVED.jpg)

告知を待つ間
バージョンだけで判定しない
SSM Run Command で 読み取り専用のコマンドだけを、サーバー名で外さず全台に流しました。
1
影響するバージョン
か
全台 7.4。該当
2
成立する条件がある
か
upload_progressが既定の
On
3
インターネットから
届くか
Webは届く / 社内用は
127.0.0.1 のみ
php2shellの夜 / PHP 7.4を止めずに守る 5 / 15 kenimoto.dev

# Page. 6

![Page Image](https://bcdn.docswell.com/page/L73WMD5Q75.jpg)

WAFを設計する
止める前に、何が壊れるかを調べる
攻撃は multipart/form-data。入口で止めると、正規のアップロードも止まります。
ソースコード
送る側 (FormData) と
受ける側 ($_FILES) を
洗う
×
アクセスログ
POSTの送り先を
ホストごとに集計して
照合
→
結論
multipartは管理画面だけ。
それ以外で止めても
利用者に影響なし
php2shellの夜 / PHP 7.4を止めずに守る 6 / 15 kenimoto.dev

# Page. 7

![Page Image](https://bcdn.docswell.com/page/87DK6PDWJG.jpg)

除外条件の作り方
除外は、すり抜けられる前提で作る
「Hostが管理画面なら除外」は、Hostヘッダーの偽装で通られます。
1つのACLで全サイト
サイトAのALBに
Host: admin.site-b を付けて送る
→除外が成立しPHPに届く
ACLをALBごとに分ける
他サイトのHostは一致しない
→ 403
管理画面のAPIはnginxのIP制限の内側
php2shellの夜 / PHP 7.4を止めずに守る 7 / 15 kenimoto.dev

# Page. 8

![Page Image](https://bcdn.docswell.com/page/VJPKYNXXE8.jpg)

23:00 公式告知
WAFはCountで入れ、iniに1行足す
告知の言葉は「完全な暫定策はなく、更新が唯一の安全な選択」。7.4は暫定策を積むしかありません。
WAFの段取り
全ルールをCount (記録のみ) で入れ
る
→誤検知がないのを見てBlockへ
; /etc/php.d/99-php2shell-mitigation.ini
session.upload_progress.enabled = 0
; 切り戻しはファイルを消して reload
php2shellの夜 / PHP 7.4を止めずに守る 8 / 15 kenimoto.dev

# Page. 9

![Page Image](https://bcdn.docswell.com/page/2EVVGKL3EQ.jpg)

無停止で反映する
reloadで502を出さない
process_control_timeout が既定の0だと、reloadの瞬間に処理中のリクエストが502になります。
1
ALBから1台外す
2
iniを置いてreload
3
値とworkerを確認
4
ALBに戻す
1秒おきの確認リクエストは すべて200。十数台を約10分。
php2shellの夜 / PHP 7.4を止めずに守る 9 / 15 kenimoto.dev

# Page. 10

![Page Image](https://bcdn.docswell.com/page/57GL8QXYEL.jpg)

23:37 最初の攻撃
止めたのは
WAFではなかった
WAFはまだCount中。攻撃ツールはapexドメインにmultipartを送り、ALBの301を追うときにPOSTをGETに変えていました。
攻撃データはPHPに届かず。
運が良かっただけなので、すぐBlockへ。
php2shellの夜 / PHP 7.4を止めずに守る 10 / 15 kenimoto.dev

# Page. 11

![Page Image](https://bcdn.docswell.com/page/4EQY9K86JP.jpg)

Blockに切り替えたら
エラーなしで、何も止まらなくなった
AWS WAFの更新は、設定を丸ごと取り出し、直して、丸ごと戻すのが定番です。
取り出す
get-web-acl
→
CountをBlockに
ここだけ書き換え
→
戻す
update-web-acl
取り出した値はbase64になっていて、戻すときにもう一度base64されていました。
探すつもりだった文字列
multipart
実際に探していた文字列
bXVsdGlwYXJ0
切り替えたらデコード結果とcurlの403の両方で確かめる。
php2shellの夜 / PHP 7.4を止めずに守る 11 / 15 kenimoto.dev

# Page. 12

![Page Image](https://bcdn.docswell.com/page/KJ4WXP2M71.jpg)

23:51～
5つのIPから同じ攻撃、すべてBlock
仏・米・独・ポーランドのVPSから、8,828 B と 25,212 B のmultipart POST。User-AgentはPython aiohttp。
攻撃の形
同じツール・同じサイズが、複数の国から順に届く
送信元の1つは、数時間前にGET / を1件だけ送っていた（下見）
入られていないか
workerの異常終了・子プロセス・変更ファイル・cron・外向き通信を確認
痕跡なし
php2shellの夜 / PHP 7.4を止めずに守る 12 / 15 kenimoto.dev

# Page. 13

![Page Image](https://bcdn.docswell.com/page/LE1YN9MY7G.jpg)

日付が変わるころ
Remiに7.4の更新が出ていた
php.net は「今日は更新が出ない」と書いていましたが、7.4.33-31 が 10/21 付けで上がっていました。
# RPM の変更履歴 (rpm -q --changelog で見える)
2026-10-21 Remi Collet - 7.4.33-31
- Mitigation fix Avoid state corruption via bailout
CVE-2026-109618, CVE-2026-109619
ブログの告知より、リポジトリと変更履歴を直接見るほうが早い。
php2shellの夜 / PHP 7.4を止めずに守る 13 / 15 kenimoto.dev

# Page. 14

![Page Image](https://bcdn.docswell.com/page/GEWG4Q31J2.jpg)

続きは記事で
コマンドと設定は、記事に全部書きました
記事の全文
qiita.com/kenimo49/items/30f290bf0f4fff021fb3
WAFルールのJSON、reload手順、侵害確認のコマンド
更新前の対策7つ
kenimoto.dev/ja/blog/php2shell-mitigation-before-update
php.net 公式の暫定対策と、それぞれが防げない範囲
php2shellの夜 / PHP 7.4を止めずに守る 14 / 15 kenimoto.dev

# Page. 15

![Page Image](https://bcdn.docswell.com/page/47ZL2WVXJ3.jpg)

最後に宣伝させてください
『MCP実践セキュリティ』
（インプレス）
AIエージェントを本番に入れるときの、MCPサーバーの認証設計と、OWASP MCP Top 10を踏まえた攻撃と対策をまとめた本です。
php2shellとは別のテーマです。
Kindle / 紙
amazon.co.jp/dp/B0HM85RXKL
詳細
kenimoto.dev/ja/books/mcp-security-practice
MCP
実践
セキュリティ
AIエージェント時代の
Model Context Protocol
安全運用ガイド
井本 賢
MCPのアーキテクチャや通信仕様を解説し、
OWASP MCP Top 10を踏まえたセキュリティリスクと
対策を整理
インプレス
php2shellの夜 / PHP 7.4を止めずに守る 15 / 15 kenimoto.dev

