見出し画像

[備忘録] PHP CGI 引数インジェクションの脆弱性 / CVE-2024-4577

PHP に影響を与える新たな重大なセキュリティ上の欠陥についての詳細が明らかになりました。この欠陥を悪用すると、特定の状況下でリモート コード実行が発生する可能性があります。

特定の状況下、とは?

防御側にとって、このバグは特定のロケールの Windows ベースの PHP インストール (PHP が CGI モードで具体的に使用されている) でのみ悪用されています。

Windows 版 XAMPP のサーバーで起きる問題で、さらに特定のロケールは

  • 日本語 🔥

  • 中国語

※他のロケールも未確認なだけで可能性あり

ということです。

メカニズム

このバグは PHP の CGI モードにのみ影響することがわかります。このモードでは、Web サーバーが HTTP リクエストを解析して PHP スクリプトに渡し、スクリプトがそれに対して何らかの処理を実行します。たとえば、クエリ文字列が解析されてコマンド ラインの PHP インタープリターに渡されます。

最初の呼び出しでは通常のダッシュ (0x2D) が使用されていますが、2 番目では、コード 0xAD (強調表示) でまったく別のもの (どうやら「ソフト ハイフン」) が使用されているようです。どちらも同じように見えますが、OS にとってはまったく異なる意味を持ちます。

Apache は実際のハイフン (0x2D) をエスケープしますが、2 番目の「ソフト ハイフン」である 0xAD はエスケープしないということです。

PHPは「ベスト フィット」マッピングの機能により、このソフトハイフンをApache通過後に本物ハイフンに差し替えてしまうため問題が起こります。

対処法

インジェクションを RCE に変換するには、次の引数を挿入するようにすることを推奨しています。

-d allow_url_include=1 -d auto_prepend_file=php://input


パッチ

PHP の新しいバージョン8.3.8、8.2.20、8.1.29 がリリースされまし


1. PHP をアップグレードできないユーザーの場合:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

2. Windows版XAMPPを使用するユーザーの場合:

XAMPP はこの脆弱性に対応する更新ファイルをまだリリースしていません。PHP CGI 機能が必要ないことが確認できた場合は、次の Apache HTTP Server 設定を変更することで、脆弱性の影響を受けることを回避できます。

C:/xampp/apache/conf/extra/httpd-xampp.conf

対応する行を見つける:

ScriptAlias /php-cgi/ "C:/xampp/php/"

そしてコメントアウトします:

# ScriptAlias /php-cgi/ "C:/xampp/php/"




リンク:








この記事が気に入ったらサポートをしてみませんか?