TAチームが 「PHP-CGI Argument Injection 」を解析して書いた脆弱性レポート
この脆弱性は、Windows 上で動作する PHP-CGI における引数インジェクションの脆弱性であり、 特定の文字をランダムな文字に変換する Win32 API 関数の 「Best-Fit Mapping」 機能を使用して、 引数インジェクション攻撃で使用されるハイフン (-) 文字をソフトハイフン (0xAD) 文字に変更することで、 Escape 処理をバイパスします。
本脆弱性は、PHP のバージョンを 8.1.29、8.2.20、8.3.8 に更新することで対応可能であり、通常、当社の AIWAF 製品では、悪意のある PHP コードを検出することで検知しています。
しかし、ソフトハイフンが挿入された攻撃構文に対する追加パターンが必要となるため、さらなる分析とパターン開発の段階にある。
1. 概要
Windows上で動作するApacheおよびPHP-CGIにおける、最近の引数インジェクションおよびリモート・コード実行の脆弱性を分析する。
イメージソース : https://portswigger.net/daily-swig/php-package-manager-component-packagist-vulnerable-to-compromise
2. 攻撃タイプ
これらの脆弱性は、Windows上で動作するPHPベースのサービスの特定のバージョンを使用した場合に発生し、watchTowrが脆弱性の解析とエクスプロイト情報を公開したことで大きな問題となった。
PHP-CGI サービスは HTTP リクエストを解析し、それを php スクリプトに渡します。つまり、https://test.com/test=testfor のようなリクエストは、基本的に php.exe cgi.php test=test のように実行されます。
この事実を悪用して任意のコマンドを注入する攻撃を防ぐため、PHP-CGI は攻撃に使用される文字をエスケープしています。 しかし、PHP-CGI が Windows 上で動作している場合に特定の文字を任意の文字に変換する Win32 API 関数の 「Best-Fit Mapping」 機能を使用することで、攻撃者がこのエスケープを回避できることが判明しました。
以下の文字列は、リアルハイフン(-)文字とソフトハイフン(0xAD)文字からなるコール文字列で、一見すると違いがないように見えますが、HxDを介して16進数でデータを確認すると、両者が異なっていることがわかります。
php.exeからの正規の呼び出しはリアルハイフン(-)文字を使用し、悪意のある呼び出しはソフトハイフン(0xAD)文字を使用する。
Hxdで検証した呼び出しの比較。
ソフトハイフン文字は本物のハイフン文字ではないため、CGIハンドラではエスケープされませんが、 PHPでは前述の「Best-Fit Mapping」機能により本物のハイフン文字として解釈され、任意のコマンド引数を挿入することができます。
そのため、RCE攻撃を行うように設計された引数が注入され、 悪意のあるPHPコードが実行されることになります。
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: www.test.com
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
<?php
phpinfo();
?>
3. 対策
幸いなことに、PHPのバージョンを8.1.29、8.2.20、または8.3.8に更新すると、この脆弱性に対応するパッチがPHPからすぐにリリースされます。
私たちの AIWAF 製品は、825.Webshell パターンの悪意のある PHP コードを含むリクエストをネイティブに検出します: Webshell パターンの攻撃は正常に検出されていますが、ソフトハイフン化された攻撃構文に対応する追加パターンが必要であり、現在さらなる分析とパターン開発を進めているところです。
4. 結論
Windows上で動作するPHP-CGIにおけるArgument Injection攻撃は、シンプルで容易に悪用できる脆弱性であり、現在でもApacheなどPHPベースのサービスを利用している組織が多いことから、その影響は大きく、早急に最新版へのアップデートが必要である。
当社のAIWAF製品では、PHP-CGIの脆弱性に対応するパターンを開発しており、今後も関連する脆弱性が発見された場合には、順次対応していく予定です。
5. 参考文献
- https://nvd.nist.gov/vuln/detail/CVE-2024-4577
- https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/
- https://github.com/watchtowrlabs/CVE-2024-4577