CVE-2024-4577 は、以下のバージョンの PHP サーバーに影響を与えるセキュリティ脆弱性です。
この脆弱性は、Windows サーバー上で PHP CGI (Common Gateway Interface) を使用する際に発生するリモートコード実行 (RCE) の欠陥です。問題は、一部の言語設定で「最適な文字マッピング」が使用されているために Windows が特定の文字を誤解釈することに起因します。この場合、PHP CGI モジュールが悪意のある文字を PHP オプションとして解釈し、攻撃者がサーバー上で悪意のあるコマンドを実行できるようにします。
初期攻撃ベクトル:
脆弱性を悪用するには、脆弱なサイトの URL に次の文字列を追加します。
?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
Burp Suite を使用してこのリクエストをインターセプトし、Repeater に送信します。
リクエストメソッドの変更: インターセプトしたリクエストを POST メソッドに変換し、例えば次のような簡単な PHP コードを実行します。
<?php phpinfo();
脆弱性が存在する場合、出力には PHP バージョンに関連する情報が表示されます。
攻撃者の目的に応じてさまざまな方法が適用可能です。私が好んだ方法は、Burp Suite を使用して Windows のスタートアップディレクトリに実行を定義することでした。reverseshell.ps1 スクリプトを実行可能ファイル (exe) に変換し、そこに配置しました。
同様に、ransomware.ps1 ファイルをシステムにアップロードし、文書の抜き取りに成功しました。暗号化されたバージョンのみが残されました。
攻撃を開始する前に、4688 ログを有効にする必要があります。自分の Windows マシンで 4688 セキュリティログを分析したところ、攻撃は XAMPP の Apache から発生していることがわかりました。Access.log ファイルを確認したところ、ステータスコード 200 を返した異常なリクエストに遭遇し、この URL をブラウザで検索するきっかけとなりました。脆弱性を特定し、PHP バージョンの更新や PHP CGI 機能の無効化などの予防措置を講じました。
作成したランサムウェアは難読化されていなかったため、PowerShell ログにコードが表示されています。これにより、データをどのように暗号化したかがわかります。データを回復するには、encoded.ps1 ファイルを実行します。
このシミュレーションは、CVE-2024-4577 に関連する潜在的なリスクを浮き彫りにし、PHP インストールのセキュリティ確保の重要性を強調しています。PHP を最新に保ち、CGI 設定の誤構成を防ぐことで、このような脆弱性を効果的に低減できます。