CVE-2024-4577: 2012年の対策をすり抜けた PHP-CGI RCE

PHP-CGI では 2012 年、クエリ文字列がコマンドライン引数として解釈され、危険なオプションを注入できる脆弱性(CVE-2012-1823)が問題になりました。これに対し PHP 側では、- で始まる入力を危険なオプションとして扱う防御が導入されていました。しかし攻撃者は、通常のハイフンではなくソフトハイフン(%ADを送信することで、この防御を迂回しました。

攻撃の流れ
1

PHP-CGI 側の防御: 入力は %AD(ソフトハイフン / 0xAD)であり、通常の -(0x2D)ではないため、「危険なオプションではない」と判断して通過させる。

2

Windows の Best-Fit 変換: 特定コードページ環境(CP932 / 936 / 950 など)では、0xAD が通常のハイフン 0x2D として扱われる。

3

結果: 12 年間守り続けた防御を迂回して PHP-CGI のオプション注入が成立し、リモートコード実行(RCE)に至る。

影響を受けるのは「Windows 上の PHP 全般」ではなく、Windows 上で Apache + PHP-CGI を CGI モードで動かしている構成や、php-cgi.exe / php.exe が外部に露出している構成が中心です。

補足:観測された悪用例(Cisco Talos)

この脆弱性は理論上の問題にとどまらず、実際の攻撃でも悪用されています。Cisco Talos は、CVE-2024-4577 が初期アクセスに利用され、その後 PowerShell 経由で Cobalt Strike reverse HTTP shellcode が実行され、TaoWu キットを用いた後続活動が観測された日本国内の攻撃キャンペーンを報告しています。ただしこれは「脆弱性の仕様」ではなく「観測された悪用パターン」であることに注意が必要です。