内容提要
2024年8月,@Orange发布了他即将在2024年8月Black Hat USA公开的议题《Confusion Attacks: Exploiting Hidden Semantic Ambiguity in Apache HTTP Server!》。漏洞通报指出存在于windows特殊场景下的PHP CGI远程代码执行漏洞。漏洞利用条件是必须是Windows环境,并且使用繁体中文、简体中文或日文语言系统。漏洞影响范围包括PHP 8.3 < 8.3.8、PHP 8.2 < 8.2.20和PHP 8.1 < 8.1.29等版本。漏洞利用条件还包括以CGI模式运行的PHP环境和XAMPP默认配置。漏洞导致最终的任意代码执行。
延伸解读
漏洞根源:Windows Best-Fit 字符转换
CVE-2024-4577 的根源是 Windows 的 Best-Fit 字符编码转换特性。在特定语言系统(如繁体中文、简体中文、日文)下,%ad 会被转换为连字符“-”。PHP 原本会过滤以“-”开头的查询字符串以防止参数注入,但 Best-Fit 转换绕过了这一限制,使得攻击者能够向 php-cgi 传递命令行参数,最终导致任意代码执行。
利用条件:环境与配置的双重限制
该漏洞的利用需要满足两个条件:一是 Windows 环境且使用特定语言系统(字码页 950、936 或 932);二是 PHP 以 CGI 模式运行。虽然 CGI 模式在现代部署中已很少见,但 XAMPP for Windows 的默认配置恰好暴露了 php-cgi.exe,并允许通过特定路径访问,从而满足了利用条件。
XAMPP 默认配置的风险点
XAMPP 默认配置中,ScriptAlias 将 /php-cgi/ 映射到 PHP 安装目录,并允许访问 php-cgi.exe。攻击者可直接调用该可执行文件,结合参数注入绕过 cgi.force_redirect 保护(默认开启),通过 -d 选项修改配置或设置 REDIRECT_STATUS 环境变量,最终实现远程代码执行。
修复与缓解建议
PHP 官方已在 8.3.8、8.2.20 和 8.1.29 版本中修复该漏洞,通过限制 0x80 以上字符的传递来阻止参数注入。对于无法立即升级的用户,应避免使用受影响的 Windows 语言系统,或确保 PHP 不以 CGI 模式运行,并检查 XAMPP 配置中是否暴露了 php-cgi.exe。
Q&A
CVE-2024-4577漏洞的影响范围是什么?
该漏洞影响PHP 8.3 < 8.3.8、PHP 8.2 < 8.2.20和PHP 8.1 < 8.1.29等版本,理论上影响所有PHP版本。
利用CVE-2024-4577漏洞需要满足哪些条件?
必须在Windows环境下,使用繁体中文、简体中文或日文语言系统,并以CGI模式运行PHP环境。
CVE-2024-4577漏洞是如何被利用的?
通过传递特定参数(如%ad),可以构成参数注入,导致任意代码执行。
XAMPP的默认配置如何影响CVE-2024-4577漏洞?
XAMPP的默认配置将PHP的执行程序暴露在外,增加了安全风险,且其配置允许直接调用php-cgi.exe。
CVE-2024-4577漏洞的根本原因是什么?
漏洞的根本原因是Windows系统内字符编码转换的Best-Fit特性,导致PHP的安全限制被绕过。
如何防范CVE-2024-4577漏洞?
建议避免在Windows环境下使用CGI模式运行PHP,或及时更新到不受影响的PHP版本。