PHPの脆弱性

PHPアプリケーションとランタイムで発生するセキュリティ欠陥、主要な攻撃類型と対応策を整理する。

PHPの脆弱性

概要

PHPの脆弱性は、PHPで作成されたウェブアプリケーションとPHPランタイム・設定で発生するセキュリティ欠陥を総称する。入力検証の不足、ファイル・コマンド・DB処理の誤用、古いバージョンと不適切なサーバー設定が組み合わさると、リモートコード実行(RCE)、SQLインジェクション、認証バイパスなど致命的な事故につながり得る。PHP自体の欠陥よりもアプリケーションコードと運用設定に起因する場合が多いため、開発・デプロイ・運用の全段階におけるセキュリティ統制が重要である。

主要な内容

発生原因と特性

PHPはウェブホスティングやCMS、レガシーシステムで広く使われ、攻撃面が大きい。動的型付けと緩やかな比較、ファイル・URL・コマンド実行関数の多様性、フレームワーク外で直接書かれたコードが脆弱性を増大させる。過去のregister_globalsやmagic_quotesは削除されたが、現在も入力値を信頼したりエラーをそのまま露出する設定が問題になる。

インジェクション系

最も一般的な類型はSQLインジェクションである。ユーザー入力を文字列連結でクエリに挿入すると認証バイパスやデータ漏えいが発生する。prepared statementとバインディング、ORMの安全な使用が基本対応である。OSコマンド実行関数に入力が渡されるcommand injection、HTML出力をエスケープしないXSS、ヘッダー・ログ・LDAPインジェクションも主要カテゴリである。

ファイル・パス脆弱性

include/requireにユーザー入力が入るとローカルファイルインクルード(LFI)とリモートファイルインクルード(RFI)が発生し得る。パストラバーサル(path traversal)、危険なファイルアップロード、拡張子・MIME検証の欠如もサーバー侵害につながる。ファイルアップロードは保存場所をウェブルート外に置き、許可拡張子と実行権限を分離すべきである。

デシリアライズとオブジェクトインジェクション

unserialize()に信頼できないデータを入れると、マジックメソッドを悪用したオブジェクトインジェクションとRCEが可能になる。phar://メタデータのデシリアライズもファイル関数と組み合わさると危険である。外部データはJSONなど安全な形式で交換し、やむを得ない場合は署名・ホワイトリスト・クラス制限を適用すべきである。

認証・セッション・API

セッション固定、クッキー属性の未設定、弱いパスワードハッシュ、JWT検証の欠落はアカウント奪取につながる。セッションIDの再発行、HttpOnly・Secure・SameSiteクッキー、password_hash()の使用、JWTのalg・iss・aud検証が必要である。REST APIではマスアサインメント、IDOR、SSRFも併せて点検すべきである。

設定・ランタイム脆弱性

display_errorsの露出、allow_url_includeの有効化、open_basedirの未設定、PHP-FPMステータスページの公開は情報漏えいと攻撃拡大を招く。disable_functionsだけでは回避可能性があるため、OS権限の最小化とコンテナ分離を並行して行う必要がある。2024年にはWindowsのPHP-CGI環境における引数インジェクション脆弱性(CVE-2024-4577)がリモートコード実行として悪用され、設定とパッチの重要性が浮き彫りになった。

依存関係とサプライチェーン

Composerパッケージやフレームワーク依存関係から既知の脆弱性が流入し得る。放置されたパッケージ、タイポスクワッティング、dependency confusion、汚染された配布スクリプトに注意し、composer audit、SBOM、バージョン固定と完全性検証を適用すべきである。

対応戦略

入力検証と出力エスケープ、最小権限、prepared statement、ホワイトリスト、安全なデシリアライズ、アップロード分離が核心である。SAST・DAST・SCA、コードレビュー、ペネトレーションテスト、WAFとログ監視を階層的に運用し、PHPと拡張モジュール、フレームワークを最新のセキュリティサポートバージョンに維持すべきである。

最新動向

2024-2025年時点でPHP 8.1はセキュリティサポート終了が迫り、8.2・8.3・8.4への移行が重要になった。PHP 8.4は2024年11月にリリースされ、新規プロジェクトの選択肢となった。Windows PHP-CGI RCE(CVE-2024-4577)以降、CGI/FPM設定の露出と引数処理に関する点検が強化された。Composerサプライチェーン攻撃やコンテナ・Kubernetes設定の誤りが主要な脅威として浮上し、SBOM、依存関係の自動スキャン、CI/CDセキュリティゲートが標準化される傾向にある。AIベースのコードレビューと自動パッチ提案も広がっているが、WAFだけでは回避可能性があるため、安全なコーディングと迅速なパッチが依然として優先である。

関連トピック

  • [[PHP]]
  • [[SQLインジェクション]]
  • [[XSS]]
  • [[ウェブセキュリティ]]
  • [[CVE]]
  • [[依存関係管理]]