セキュリティ企業のDEVCOREは6月6日(現地時間)、「Security Alert: CVE-2024-4577 - PHP CGI Argument Injection Vulnerability|DEVCORE」において、Windowsで動作しているPHPから脆弱性を発見したと報じた。この脆弱性を悪用されると、リモートの認証されていない攻撃者に任意のPHPコードを実行される可能性がある。
脆弱性の情報
WindowsにはUnicode文字のBest-Fitマッピング(Unicode文字を最も近いANSI文字に変換する)機能があり、システムを特定のコードページに設定した場合、Win32 APIに渡されるコマンドライン文字列を自動的に変換することがある(参考:「[MS-UCODEREF]: WCTABLE | Microsoft Learn」)。PHP CGIモジュールを使用している場合、攻撃者はこの機能を利用してPHPのコマンドライン引数に任意の文字列を挿入することができる。
これまでに、次のコードページに設定されたWindowsのPHP CGI環境において攻撃可能なことが確認されている。
- 日本語(コードページ 932)
- 繁体字中国語(コードページ 950)
- 簡体字中国語(コードページ 936)
上記は他のコードページを使用するWindows環境の安全性を保証するものではない。他のコードページを使用する場合でも、対策を実施することが推奨されている。
脆弱性の情報(CVE)は次のとおり。
- CVE-2024-4577 - コマンドラインインジェクションの脆弱性。特定のコードページを使用するようにシステムが設定されている場合、WindowsのBest-FitマッピングによりWin32 APIに渡されるコマンドライン引数が予期せずに置換される可能性がある
脆弱性が存在する製品
脆弱性が存在するとされる製品およびバージョンは次のとおり。
- PHP 8.3.7およびこれ以前のバージョン
- PHP 8.2.19およびこれ以前のバージョン
- PHP 8.1.28およびこれ以前のバージョン
- PHP 8.0のすべてのバージョン
- PHP 7のすべてのバージョン
- PHP 5のすべてのバージョン
- XAMPPのすべてのバージョン
脆弱性が修正された製品
脆弱性が修正された製品およびバージョンは次のとおり。
- PHP 8.3.8
- PHP 8.2.20
- PHP 8.1.29
PHP 8.0、PHP 7、PHP 5はサポートを終了しているため、これらバージョンを使用している場合は軽減策を実施するか、または製品をアップグレードする必要がある。
対策
ApacheおよびPHP CGIモジュールを使用し、なおかつ日本語、繁体字中国語、簡体字中国語のWindows環境においてPHPのアップデートを実施できない場合は、Apacheに次の3行の設定を追加することで影響を一時的に軽減できる。
- RewriteEngine On
- RewriteCond %{QUERY_STRING} ^%ad [NC]
- RewriteRule .? - [F,L]
発見された脆弱性の深刻度は発見者により緊急(Critical)と評価されており注意が必要。WebサーバーにWindowsおよびPHPを使用している管理者は、影響を確認して速やかにアップデートすることが推奨されている。