今日更新できない場合

暫定対策

アップデートを展開するまでの間、特定の既知の攻撃経路へのリスクを下げる対策です。どれも完全ではなく、相応の代償を伴うものもあります。適用前にテストしてください。

最終確認 2026-10-22

設定だけで完全に防ぐ方法はありません

PHP の両アドバイザリがはっきりそう述べています。数週間ではなく、数時間から数日を稼ぐために使ってください。修正ガイド →

各対策の効果

対策効果CVE代償・副作用

memory_limit = -1(管理者レベルで設定)+ cgroup のメモリ上限

主要
アドバイザリが挙げる主要な設定上の対策。多くの攻撃経路が依存する PHP 自身の OOM 中断をなくします。両方代わりに OS が暴走したワーカーを終了させるため、リクエストが中断されます。cgroup の上限がないと、1 つのリクエストでホスト全体のメモリを使い切る恐れがあります。

session.upload_progress.enabled = 0

部分的
確認済みのセッション経路を防ぎますが、「他の亜種は防げません」(php.net)。php.ini、FPM プール、サーバー設定で指定する必要があり、.user.ini や ini_set() では効きません。…619これに依存したアップロード進捗バーが動かなくなります(まれ)。使っていなければ、パッチ適用後も無効のままにしておく価値があります。

fatal_error_backtraces = 0(PHP 8.5)

部分的
確認済みの致命的エラーのバックトレース経路のみを防ぎます。CVE-2026-109619 で最も確実に実証された経路です。…619致命的エラーにバックトレースが含まれなくなります。

post_max_size を下げる + フロントエンドでボディサイズを制限

部分的
アプリが動く前の multipart 解析で、攻撃者が生み出せるメモリ負荷を減らします。php.net の推奨はファイルアップロードなしなら 8M、ありなら 32M。…618アップロードも制限されます——正規のアップロード処理をテストしてください。

入力を制限:max_input_nesting_level、max_input_vars、max_file_uploads、max_multipart_body_parts

部分的
パーサーによるその他のメモリ増加を抑えます。…618大きなフォームや深くネストしたフォームが失敗することがあります。

攻撃者が引き起こせる致命的エラーと、リクエスト単位で適用される無効・非推奨の設定を取り除く

部分的
CVE-2026-109619 の残留状態の発生源を取り除きます:初期化前に出力される診断メッセージ、コールバック・アップロード・インポート・後片付け処理での致命的エラーやタイムアウト。…619コードと設定の見直しが必要です。

pm.max_requests を下げる(FPM)

部分的
ワーカーを頻繁に入れ替え、破損した状態が生き残るリクエスト数を減らします。アドバイザリが挙げる極端な値は 1 です。…619CPU とレイテンシに実際のコストがかかります。1 リクエストで完結する攻撃には効果がありません。

display_errors = 0

被害を抑える
エラー出力から詳細が閲覧者に漏れるのを防ぎます。注意:診断を隠しても CVE-2026-109619 の引き金は止まりません。被害本番環境では副作用なし。

SELinux / AppArmor で PHP ワーカーを制限

被害を抑える
注入されたコードが実行・読み取りできる範囲を限定します。被害ポリシー作成の手間がかかります。メモリ漏えいは防げません。

WAF/CDN のマネージドルール

部分的
既知のペイロードをエッジでブロックします。Cloudflare は Free プランも対象です。両方攻撃者はすでにペイロードを変形させています。対応範囲は事業者によって異なります。

やってはいけないこと

memory_limit の代わりに RLIMIT_AS / RLIMIT_DATA を使わない

つまり ulimit -v / ulimit -d、systemd の LimitAS= / LimitDATA=、rlimit_* を使う方法です。これらは PHP 内部の mmap() を失敗させ、同じ脆弱な OOM 経路を引き起こします。代わりに cgroup の制限(MemoryMax=、コンテナの --memory)を使ってください。

コピーして使える設定

php.ini 追加設定
; /etc/php/8.3/fpm/conf.d/99-php2shell.ini  (path varies)
; TEMPORARY PHP2Shell mitigations — revisit after upgrading.
; Tune every number to what your application really needs.

session.upload_progress.enabled = 0
fatal_error_backtraces = 0      ; PHP 8.5 only, ignored elsewhere
display_errors = 0

post_max_size = 8M              ; php.net: 8M without uploads, 32M with
upload_max_filesize = 6M        ; keep below post_max_size
max_input_nesting_level = 32    ; default 64
max_input_vars = 1000
max_file_uploads = 5            ; default 20
max_multipart_body_parts = 200
php-fpm プール
; /etc/php/8.3/fpm/pool.d/www.conf  (one block per pool)
; php_admin_* cannot be overridden by ini_set() in application code.
; WordPress and others call ini_set('memory_limit', ...) — a plain
; php.ini value would be silently replaced with a finite limit again.
php_admin_value[memory_limit] = -1
php_admin_flag[session.upload_progress.enabled] = off

; Recycle workers more often (performance cost — measure it)
pm.max_requests = 50
apache / nginx
# Apache + mod_php (VirtualHost or global config)
php_admin_value memory_limit -1
php_admin_flag session.upload_progress.enabled off
# 32 MiB request body cap (match post_max_size)
LimitRequestBody 33554432

# nginx in front of PHP-FPM
client_max_body_size 32m;
cgroup メモリ上限
# Cap total PHP-FPM memory with cgroup v2 (systemd's MemoryMax = memory.max)
sudo systemctl edit php8.3-fpm
#   [Service]
#   MemoryHigh=3G
#   MemoryMax=4G
sudo systemctl restart php8.3-fpm
systemctl show php8.3-fpm -p MemoryMax

# Containers: set a memory limit on the container instead
docker run --memory=4g ...

変更のたびに PHP-FPM/Apache を再起動してください。実際に有効な値は php-fpm8.3 -i | grep -E 'memory_limit|upload_progress' で確認できます——ただし -i は php.ini を読むだけでプール単位の上書きは反映されないため、サイト上で phpinfo() も確認してください。

更新後

  • memory_limit をアプリに合った有限の値に戻してください。修正版の PHP はその上にハードリミットを追加します。
  • post_max_size はメモリ予算より十分低く、max_input_nesting_level は実際に必要な値にしておきましょう。
  • 使っていなければ session.upload_progress.enabled = 0 のままにしておきましょう。攻撃対象が減り、代償もありません。
  • pm.max_requests を通常の値に戻してください。
  • 任意:expose_php = 0 でスキャナーからバージョンを隠せます。衛生管理であって、修正ではありません。