php.net ではありません · NVD ではありません · CISA ではありません

PHP 脆弱性トラッカー

PHP のセキュリティ脆弱性に関する非公式ブリーフィング

English简体中文日本語DeutschFrançaisNederlandsEspañol

セキュリティ警報

PHP2Shell:PHP をアップデートしてください。それが唯一の完全な修正です。

CVE-2026-109618 と CVE-2026-109619 は、PHP 本体に存在する認証不要のリモートコード実行(RCE)の深刻な脆弱性です。PHP プロジェクトは 2026 年 10 月 21 日、サポート中の 8.2〜8.5 系に修正版を公開しました。アップデート後は PHP を再起動してください。ファイアウォールは代わりになりません。

対策の手順

PHP セキュリティ解説 · 防御向け

PHP オブジェクトインジェクションとは?直し方

利用者が操作できるデータを unserialize() に渡すと、PHP がどのオブジェクトを生成するかを攻撃者が選べてしまいます。PHP マニュアルもこれを明確に警告しています。

最終更新

どんな問題か

PHP は文字列をアンシリアライズするとき、記述されたオブジェクトを再構築し、__wakeup() や __destruct() などのマジックメソッドを呼ぶことがあります。文字列が Cookie、フォーム、API リクエストから来るなら、攻撃者はアプリやライブラリに読み込まれたクラスを選んでメソッドを連鎖させ、ファイル書き込みやコード実行につなげられます。MITRE では CWE-502(信頼できないデータのデシリアライズ)に分類されます。

見つけ方

直し方

読み取り専用の確認と安全な書き方

# Find unserialize() calls that may receive request data (read-only)
grep -rnE "unserialize\s*\(" --include=*.php . | grep -vE "/vendor/|/tests?/"

// Safer: exchange data as JSON
$data = json_decode($input, true, 512, JSON_THROW_ON_ERROR);

// If unserialize() is unavoidable for trusted data, forbid objects
$data = unserialize($trusted, ['allowed_classes' => false]);

allowed_classes => false で十分ですか?

オブジェクト生成を止めるので主なリスクはなくなりますが、PHP マニュアルは信頼できない入力のアンシリアライズ自体を勧めていません。既定は JSON が安全です。

PHP2Shell と関係がありますか?

ありません。PHP2Shell は PHP ランタイムの不具合で、オブジェクトインジェクションはアプリのコードの不具合です。PHP を完全に更新していても起こり得ます。

ほかの PHP の脆弱性の種類

出典

外部リンクは本サイトの外に移動します。本サイトはエクスプロイトコードを掲載しません。

  1. unserialize() — PHP Manual
  2. json_decode() — PHP Manual
  3. PHP Object Injection — OWASP
  4. CWE-502: Deserialization of Untrusted Data — MITRE CWE