
Linux ホスト上のすべての PHP インストールについて、PHP2Shell の影響を受けているかどうかを表示する Checkmk 拡張機能です。PHP2Shell とは、認証前のリモートコード実行を可能にする脆弱性 CVE-2026-109618 および CVE-2026-109619 のことで、2026-10-21 に公開され、PHP 8.2.35、8.3.36、8.4.27、8.5.12 で修正されました。
この拡張機能には、事実のみを収集する小さな POSIX シェルエージェントプラグインが含まれています(PHP バイナリ、Apache mod_php・NGINX Unit・FrankenPHP の PHP ライブラリ、バージョン、パッケージの changelog、php.ini の設定、置き換えられたバイナリで稼働し続けているプロセス)。それが「修正済み」なのか「脆弱」なのかは、Checkmk サーバー上のチェックプラグインが判断します。そのため、新しい情報(別の修正リリース、新しい CVE)が追加されても、更新された .mkp が必要なだけで、各ホストに新しいスクリプトを配布する必要はありません。
単にバージョン番号を比較しない理由: ディストリビューションは上流のバージョンを変えずに修正をバックポートします。Ubuntu 24.04 は PHP 8.3.6 を、AlmaLinux 9 は 8.0.30 を提供していますが、どちらも修正済みでありながら、バージョンだけを見ると「脆弱」と判定されます。そのため、この拡張機能は各バイナリを所有するパッケージの changelog も読み取ります。
cmk_addons.plugins プラグイン API を使用)。/proc/<pid>/maps を読み取ります)。GNU または busybox ツールを備えた素の POSIX sh。パッケージの changelog は dpkg、rpm、apk で読み取ります。Debian 系(Debian、Ubuntu)、Red Hat 系(RHEL、AlmaLinux、Rocky Linux、Oracle Linux、CentOS Stream、Fedora、Amazon Linux 2023、CentOS 7)、および Alpine でテスト済みです(下記参照)。| Checkmk イメージ | 日付 | 結果 |
|---|---|---|
checkmk/check-mk-ultimate:2.5.0p17 | 2026-10-27 | OK(ビルド、cmk-validate-plugins、スモークテスト、インストール + ディスカバリ + チェック + エージェントベイク) |
checkmk/check-mk-ultimate:3.0.0-2026.10.27(デイリー) | 2026-10-27 | OK(ビルド、cmk-validate-plugins、スモークテスト、インストール + ディスカバリ + チェック + エージェントベイク) |
エージェントプラグインは、2026-10-27 に各ディストリビューション独自の PHP パッケージに対して実行されました(scripts/test_agent_plugin.sh)。対象が Web SAPI(FPM、ディストリビューションがまだ提供している場合は Apache mod_php、NGINX Unit、FrankenPHP)を起動する場合、その後ディスク上の FPM バイナリと libphp が置き換えられ、再起動検出が稼働中のプロセスを報告しました。
Debian 系および Alpine
| ディストリビューション | PHP パッケージ | プラグインの結果 |
|---|---|---|
| Ubuntu 24.04 | 8.3.6-0ubuntu0.24.04.13(CLI、FPM、CGI、mod_php) | バックポートにより修正済み(changelog に両方の CVE が記載) |
| Debian 12 | 8.2.35-1~deb12u1(CLI、FPM、mod_php) | バージョンにより修正済み |
| Debian 12 + nginx | 8.2.35-1~deb12u1(CLI、nginx 背後の FPM) | バージョンにより修正済み |
| Debian 13 | 8.4.27-1~deb13u1(CLI、FPM) | バージョンにより修正済み |
| Alpine 3.22 | php83 8.3.36-r0(CLI、FPM、CGI) | バージョンにより修正済み |
Red Hat 系
| ディストリビューション | PHP パッケージ | プラグインの結果 |
|---|---|---|
| AlmaLinux 8.10 | 7.2.24-1.module_el8.10.0 (CLI、FPM、CGI、mod_php libphp7.so) | バックポートにより修正済み (changelog に両方の CVE が記載) |
AlmaLinux 8.10、モジュール php:8.2 | 8.2.35-1.module_el8.10.0 (CLI、FPM、CGI) | バージョンにより修正済み |
| RHEL 9.8 (UBI)、AlmaLinux 9.8、Rocky Linux 9.8、Oracle Linux 9.8 | 8.0.30-8.el9_8.1 (CLI、FPM、CGI) | バックポートにより修正済み (changelog に両方の CVE が記載) |
AlmaLinux 9.8、モジュール php:8.3 | 8.3.36-1.module_el9.8.0 (CLI、FPM、CGI) | バージョンにより修正済み |
| AlmaLinux 9.8 + Remi SCL | php74 7.4.33-31.el9.remi、php81 8.1.34-6.el9.remi (/opt/remi) | バックポートにより修正済み (changelog に両方の CVE が記載) |
| AlmaLinux 10.2、CentOS Stream 10 | 8.3.36-1.el10 (CLI、FPM、CGI) | バージョンにより修正済み |
| Fedora 44 | 8.5.12-1.fc44 (CLI、FPM、CGI) | バージョンにより修正済み |
| Amazon Linux 2023 | php8.5 8.5.12-1.amzn2023.0.1 (CLI、FPM、CGI) | バージョンにより修正済み |
| CentOS 7 (サポート終了、vault) | 5.4.16-48.el7 (CLI、FPM、CGI) | 脆弱 - 有償の延長サポート以外では EL7 向けのバックポートなし |
公式コンテナイメージと FrankenPHP
| イメージ | PHP | プラグインの結果 |
|---|---|---|
php:8.2.20-fpm | 8.2.20、ソースからビルド | 脆弱 |
unit:php8.3 (NGINX Unit) | 8.3.26 (CLI、CGI、組み込み libphp) | 脆弱 |
dunglas/frankenphp:latest | 8.5.12 (CLI、CGI、組み込み libphp) | バージョンにより修正済み |
| FrankenPHP 静的バイナリ (GitHub リリース) | 8.5.12 | バージョンにより修正済み |
コンテナ外の本番ホストではまだ実行されていません。特に SELinux が enforcing の環境 (RHEL 系) では未検証です。通常、エージェントはそこでは unconfined で動作します。
Setup > Maintenance > Extension packages > Upload package、またはサイト内のコマンドラインで:
mkp add php2shell-<version>.mkp
mkp enable php2shell <version>
チェック対象のホストにエージェントプラグインをデプロイします:
ホスト上でサービスディスカバリを実行します。各 PHP バイナリと Apache PHP モジュールがそれぞれ独自のサービスとなり、さらにホストごとに1つの PHP2Shell restart サービスが追加されます。
任意: Setup > Services > Service monitoring rules > PHP2Shell (CVE-2026-109618 / CVE-2026-109619) および PHP2Shell restart で状態を調整します。
package/agents/plugins/php2shell をエージェントのプラグインディレクトリ内のキャッシュ間隔サブディレクトリにコピーし、実行可能にします:
install -m 755 php2shell /usr/lib/check_mk_agent/plugins/3600/php2shell
3600 ディレクトリは、エージェントに1時間に1回バックグラウンドで実行させ、その間はキャッシュされた結果を提供させます。これを直接 plugins/ に置かないでください。すべての PHP バイナリを実行し、すべてのプロセスのメモリマップを読み取るため、エージェントのクエリごとには負荷が大きすぎます。
| サービス | 単位 | 状態(デフォルト、設定可能) |
|---|---|---|
PHP2Shell <path> | PHP バイナリまたはライブラリ、例: PHP2Shell /usr/sbin/php-fpm8.3 | OK 修正済み - CRIT 脆弱な web SAPI - WARN すべての中間緩和策を適用した脆弱な web SAPI - WARN 脆弱な CLI - UNKNOWN バージョンを特定できない |
PHP2Shell restart | PHP を搭載したホスト | OK - CRIT プロセスが置き換えられた PHP バイナリまたは libphp を依然として実行中 |
flowchart TD
A[PHP binary or module] --> B{Version known?}
B -- no --> U[UNKNOWN]
B -- yes --> C{"Version >= fix of its branch?<br/>8.2.35 / 8.3.36 / 8.4.27 / 8.5.12<br/>or branch newer than 8.5"}
C -- yes --> OK[OK: fixed]
C -- no --> D{"Package changelog names<br/>both CVEs?"}
D -- yes --> OKB[OK: fixed by distribution backport]
D -- no --> E{SAPI}
E -- CLI --> W1[WARN: vulnerable, CLI only]
E -- "FPM / CGI / LiteSpeed / Apache module /<br/>embedded libphp / FrankenPHP" --> F{"All interim mitigations<br/>in this SAPI's php.ini?"}
F -- yes --> W2[WARN: vulnerable, mitigated]
F -- no --> CR[CRIT: vulnerable]
OK --> G{"session.upload_progress.enabled<br/>= On?"}
OKB --> G
G -- yes --> H["Hint: CVE-2026-115560 not fixed yet<br/>(state configurable, default OK)"]
memory_limit=-1、CVE-2026-109619 に対しては session.upload_progress.enabled=0(および PHP 8.5 では fatal_error_backtraces=0)です。これらは CRIT を WARN に下げるだけで、OK には決してなりません。PHP はアップデートのみを完全な修正と呼んでおり、memory_limit=-1 はそれ自体でメモリ枯渇を招きます。php -S がそれを Web サーバーとして使用するためであり、また mod_php が見つからないホストでは PHP バージョンの唯一の痕跡となり得るためです。session.upload_progress.enabled=On の場合、詳細にヒントが表示されます。アラートを出したい場合はルール内で状態を引き上げてください。flowchart LR
subgraph host [Monitored Linux host]
P["agent plug-in php2shell<br/>(plugins/3600/, as root)"]
P -- "php -v / php -i" --> BIN[PHP binaries]
P -- "X-Powered-By string" --> SO[libphp*.so]
P -- "dpkg / rpm / apk" --> CL[package changelog]
P -- "/proc/*/maps" --> PR[running processes]
end
P -- "php2shell agent section" --> CP
subgraph site [Checkmk site]
CP["check plug-ins<br/>php2shell, php2shell_restart"]
R[rules: service states] --> CP
BK["bakery rule<br/>PHP2Shell agent plug-in"]
end
BK -. bakes into agent .-> P
CP --> S1["PHP2Shell (one per path)"]
CP --> S2[PHP2Shell restart]
エージェントプラグインは次のことを行います: