2024年6月8日,PHP存在的一个编号为CVE-2024-4577的严重安全漏洞,引起了网络安全界的热议。该漏洞允许远程代码执行,影响Windows操作系统上所有版本的PHP。漏洞利用了Windows操作系统内编码转换的Best-Fit特性,使得未经身份验证的攻击者可通过特定字符序列绕过CVE-2012-1823的保护措施。PHP已在8.3.8、8.2.20和8.1.29版本中发布了修复。披露该漏洞的台湾DEVCORE公司安全研究员提醒,所有XAMPP安装在繁体中文、简体中文或日语环境下默认存在漏洞,并建议放弃PHP CGI,选择更安全的解决方案。Shadowserver基金会和watchTowr Labs均检测到针对该漏洞的利用尝试,强调用户必须迅速应用最新补丁以防止潜在的大规模利用。
台湾戴夫寇尔公司(
DEVCORE
)研究团队在进行前瞻攻击研究期间,发现这个PHP编程语言存在远程代码执行漏洞,基于PHP在网站生态使用的广泛性以及此漏洞之易重现性,研究团队将此漏洞标记为严重、并在第一时间回报给PHP官方。PHP官方已在2024/06/06 发布修复版本,详细时程可参阅漏洞回报时间轴。
一、漏洞描述
PHP程式语言在设计时忽略Windows操作系统内部对字元编码转换的Best-Fit特性,导致未认证的攻击者可通过特定的字符序列绕过旧有CVE-2012-1823的保护;通过参数注入等攻击在远程PHP服务器上执行任意代码。
二、影响范围
此漏洞
影响安装于Windows操作系统上所有的PHP版本
,详情可参照下表:
由于PHP 8.0分支、PHP7以及PHP 5官方已不再维护,网站管理员可参考如何确认自己易遭受攻击章节,并于修补建议找到暂时缓解措施。
三、如何确认自己易遭受攻击?
对于常见之Apache HTTP Server 加上PHP组合,网站管理员可通过此文章列出之两个方式确认服务器是否易被攻击。其中,情形二也是XAMPP for Windows
安装时的预设设定,因此
所有版本的XAMPP for Windows安装也预设受此漏洞影响。
在本文撰写当下已验证当Windows 作业系统执行于下列语系时,
未授权的攻击者可直接在远程服务器上执行任意代码
:
对于其它执行在英文、韩文、西欧语系之Windows操作系统,由于PHP使用情境广泛、暂无法完全列举并排除其利用情境,因此还是建议使用者全面盘点资产、确认使用情形并更新PHP至最新版本确保万无一失!
情形一: 将PHP 定于CGI模式下执行
在Apache Httpd设置中通过
Action
语法将对应的HTTP请求交给PHP-CGI执行文件处理时,受此漏洞影响,常见设置包含但不限于:
AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"
<FilesMatch "\.php$">
SetHandler application/x-httpd-php-cgi
FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
情形二: 将PHP执行文件暴露在外(XAMPP预设安装设置)
即使未设置PHP 于CGI模式下执行,仅将PHP执行文件暴露在CGI目录下也受此漏洞影响,常见情况包含但不限于:
-
将
php.exe
或
php-cgi.exe
复制到
/cgi-bin/
目录中
-
将PHP安装目录通过
ScriptAlias
暴露到外,如:
ScriptAlias /php-cgi/ "C:/xampp/php/"
四、修复建议
强烈建议所有使用者升级至PHP官方最新版本8.3.8、8.2.20与8.1.29,对于无法升级的系统可通过下列方式暂时缓解漏洞。
除此之外,由于PHP CGI已是一种过时且易于出现问题的架构,也建议评估迁移至较为安全的Mod-PHP、FastCGI或是PHP-FPM等架构可能性。
1. 对无法更新PHP的使用者
可通过下列Rewrite规则阻挡攻击,请注意
此份规则只作为繁体中文、简体中文及日文语系中的暂时性缓解机制
,实际上仍建议更新到已修复版本或更改架构。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
2. 对XAMPP for Windows 使用者
在撰写本文时,XAMPP尚未针对此漏洞发布相对应的更新安装说明,如确认自身的XAMPP并没有使用到PHP CGI的功能,可通过修改下列Apache Httpd设置以避免暴露在漏洞攻击中:
C:/xampp/apache/conf/extra/httpd-xampp.conf
ScriptAlias /php-cgi/ "C:/xampp/php/"
# ScriptAlias /php-cgi/ "C:/xampp/php/"
五、业界反响