バックエンド 2026.07.10

CVE-2026-12184:PHP-FPMが停止するHigh脆弱性と対処法

約9分で読めます

PHPのHTTPS通信でPHP-FPMがクラッシュするHigh脆弱性(CVSS 8.2)の仕組みと、自分のサーバーが影響を受けるかの判断方法、修正バージョンへの対処手順を解説します。

「サイトが突然落ちた」その原因がPHPの脆弱性かもしれません

ある日突然、Webサイトへのリクエストが500エラーを返し始める。PHP-FPMのワーカーがなぜか消耗している。アクセスログに心当たりがない。そういった「原因不明のサービス停止」が、PHPの既知の脆弱性によって引き起こされるケースは少なくありません。

2026年7月に公開された CVE-2026-12184 は、PHPのHTTPS通信処理に潜むNULLポインタ参照のバグで、PHP-FPM環境においてワーカープール枯渇によるDoS(サービス停止)を引き起こす可能性があります。深刻度はCVSS v4.0スコアで 8.2(High) と評価されており、対応を要する脆弱性です。

この記事では、技術的なメカニズムを正確に解説したうえで、「自分のサーバーが影響を受けるのか」を判断するための実務的な切り分け方と、具体的な対処手順を丁寧に示します。


CVE-2026-12184 の概要と深刻度

CVSSスコアについての注記

この脆弱性のCVSSスコアについては、英語の二次情報記事の中に 8.7 と記載しているものが存在しますが、PHP公式CNA(CVE採番機関)が公開しているアドバイザリ(GHSA-mhmq-mmqj-2v39)の公式値は 8.2 です。本記事では公式値の8.2を採用しています。

CVSSベクトルから読み取れること

ベクトルは AV:N / AC:H / AT:P / PR:N / UI:N / VA:H です。これを日本語に分解すると以下のとおりです。

  • ネットワーク経由・認証不要・ユーザー操作不要:外部から特別な権限なしに攻撃を試みられる
  • 攻撃複雑性:高(AC:H):ただし特定の条件(後述)が揃わないと発動しない
  • 影響は可用性のみ:機密情報の漏洩や改ざんは発生しない。あくまで DoS(サービス停止) が脅威

バックエンド開発でお困りですか?

API設計・DB最適化・システム構築など、ご相談ください

無料で相談する

脆弱性のメカニズム:なぜPHP-FPMが止まるのか

この脆弱性の根本原因は、PHPのHTTPストリームラッパー php_stream_url_wrap_http_ex(ソース上は ext/standard/http_fopen_wrapper.c)に存在するNULLポインタ参照です。

元々のバグレポート(GitHub Issue #21468)は「プロキシ設定がある環境でHTTPS URLに file_get_contents するとセグフォルトする」というものでした。

クラッシュが起きるまでの流れ

flowchart TD
    A["file_get_contents('https://...')"] --> B[PHPストリームラッパーが接続を試みる]
    B --> C{TLS証明書の検証}
    C -->|"検証成功"| D[正常にレスポンス取得]
    C -->|"検証失敗(期限切れ・ホスト名不一致等)"| E[ストリームがNULLにリセットされる]
    E --> F[後処理コードがNULLポインタを参照]
    F --> G[セグメンテーション違反=プロセスクラッシュ]
    G --> H[PHP-FPMワーカーが1つ消滅]
    H --> I{繰り返し攻撃}
    I --> J[ワーカープール枯渇]
    J --> K[サービス停止(DoS)]

トリガーに必要な条件

この脆弱性が発動するには、以下の 両方 が揃う必要があります。

  1. PHPストリーム経由のHTTPS通信 かつ プロキシ設定がある、または 接続先が無効な証明書を提示する(期限切れ、ホスト名不一致など)
  2. アプリケーションがアウトバウンドのHTTPS通信を行っている

CVSSにAC:H(攻撃複雑性・高)が含まれているのは、この「特定条件が揃う必要がある」という点を反映しています。


重要:cURLとPHPストリームの切り分け

ここが実務上、最も重要な判断ポイントです。

この脆弱性が影響するのは、PHPストリーム経由のHTTPS通信のみです。

通信方法脆弱性の対象主な使用箇所
PHPストリーム(file_get_contents / fopen)直接HTTPSを取得するカスタムコード等
cURL経由(curl_exec等)LaravelのGuzzle HTTP(デフォルト)
GuzzleHTTP(Laravelのデフォルト)Http::get() / Http::post() 等

Laravelで標準的に使われる Http::get()Http::post() は、内部でGuzzleHTTPを使いcURLで通信するため、この脆弱性の影響を受けません

一方、以下のようなコードを書いている場合は対象になります。

// PHPストリーム経由:この脆弱性の対象
$response = file_get_contents('https://api.example.com/data');
$fp = fopen('https://api.example.com/data', 'r');
// cURL経由(Laravelの標準):対象外
use Illuminate\Support\Facades\Http;
$response = Http::get('https://api.example.com/data');

自分のコードや導入しているプラグイン・ライブラリがどちらを使っているかを確認することが、露出範囲を正確に把握する第一歩です。


影響を受けるバージョンと修正版

PHPバージョン系列影響対象修正バージョン
PHP 8.3系8.3.32以上
PHP 8.4系8.4.21以上
PHP 8.5系8.5.6以上
PHP 8.2系対象外(別CVEの修正はあり)

PHP 8.2系はCVE-2026-12184の対象外です。 8.2.32で修正された CVE-2026-14355(OpenSSL関連)は別の脆弱性であり、混同しないよう注意が必要です。


確認手順:自分のサーバーは該当するか

よくある失敗:CLIだけ確認して安心してしまう

サーバー管理でよくあるのが、ターミナルで php -v を実行して「8.3.32だから大丈夫」と判断するケースです。しかし、PHP-FPM(Webリクエストを処理するプロセス)とCLI(コマンドライン)は別々のパッケージとして管理されていることがあり、バージョンが異なる場合があります。 実際に脆弱性が刺さるのはFPM側ですが、CLIしか確認していないと見落とします。

正しい確認の手順

ステップ1:CLIのバージョン確認

php -v

出力例:

PHP 8.3.29 (cli) (built: ...)

上記の場合、8.3.32未満なので対応が必要です。

ステップ2:PHP-FPMのバージョン確認

Webサーバー経由でPHPが使うバージョンを確認します。最も確実なのは phpinfo() を一時的に設置する方法です。

<?php
// 確認後は必ず削除すること
phpinfo();

Pleskをお使いの場合は、ドメインのPHP設定画面でPHPバージョンを確認できます。CLIとFPMで異なるバージョンが設定されているケースも珍しくありません。

ステップ3:両方が修正版以上かを確認する

CLIとFPMの両方が修正バージョン(8.3.32 / 8.4.21 / 8.5.6)以上になっているかを確認します。片方だけ更新して「完了」とするのは、よくある見落としです。


対処法:修正バージョンへのアップデート

確実な対処はひとつ——修正済みバージョンへのアップデートです。

Pleskを使っている場合

Pleskは事前にビルド済みのPHPパッケージを管理画面から配布しています。手動コンパイルは不要で、以下の手順で更新できます。

Tools & Settings > Updates and Upgrades > PHP のアップデートを適用

その後、各ドメインのPHP設定から修正版のPHPバージョンを選択してください。

Ubuntu / Debian系OSで apt 管理の場合

sudo apt update
sudo apt upgrade php8.3 php8.3-fpm
# 使用しているバージョンに合わせて指定

CLIとFPMのパッケージが分かれている環境では、両方を明示的にアップグレードする必要があります。片方だけ更新してしまうのが実際に起こりやすいミスです。

アップデート後の確認

# CLIの確認
php -v

# PHP-FPMの確認
php-fpm8.3 -v
# または
systemctl status php8.3-fpm

Webサーバー側も phpinfo() で最終確認し、修正バージョンが反映されていることを確かめましょう(確認後は必ずファイルを削除してください)。


まとめ:今すぐ確認すべきことのチェックリスト

CVE-2026-12184は、機密情報漏洩や改ざんを引き起こす脆弱性ではありませんが、外部から繰り返し攻撃されるとPHP-FPMが停止し、サイト全体がダウンするDoSの危険があります。PHP 8.3・8.4・8.5系を使っていてアウトバウンドHTTPS通信を行うアプリを運用している場合は、早めの対応をお勧めします。


バックエンド開発でお困りですか?

API設計・DB最適化・システム構築など、ご相談ください

無料で相談する

開発・運用でお困りなら

システム開発

設計から運用まで、堅牢なシステムを構築します

200件以上の制作実績 顧客満足度97% 初回相談無料

※ 通常1営業日以内にご返信します

サーバーの確認・対応にお困りの方へ

「バージョン確認はできたけど、どのPHPパッケージが使われているか自信がない」「Pleskの操作に慣れておらず、更新作業が不安」「そもそも自社サーバーの構成を把握しきれていない」——そういったお声をお客様からいただくことは少なくありません。

Fivenine Designでは、PHPバージョンやサーバー設定の確認から脆弱性への対応、WordPress・Laravelサイトの継続的な保守運用まで、Web制作とサーバー運用の実務知見をもとにサポートしています。

「自分でやってみたけど確認しきれなかった」「定期的にサーバーを見てほしい」という場合は、お気軽にご相談ください。

→ セキュリティ診断・保守運用についてのお問い合わせはこちら

この記事をシェア

システム開発のご相談、受付中です

設計・開発・テスト・運用まで、ビジネスに合ったシステムを構築します。 初回相談は無料です。

※ 1営業日以内にご返信いたします

この技術でお困りなら

無料でプロに相談できます

相談する
AIに無料相談