在 DEVCORE持续的攻关过程中,我们团队发现了 PHP 的一个远程代码执行漏洞。由于该编程语言在 Web 生态中的广泛使用,且极易被利用,DEVCORE 将其严重程度评定为严重,并及时上报 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 组合情况,服务器管理员可以使用本文列出的两种方法来确定其服务器是否存在漏洞。值得注意的是,场景 2 也是Windows 版 XAMPP的默认配置,因此Windows 上安装的所有版本的 XAMPP 默认都存在漏洞。
截至撰写本文时,已验证当 Windows 在以下区域设置下运行时,未经授权的攻击者可以直接在远程服务器上执行任意代码:
-
繁体中文(代码页 950)
-
简体中文(代码页 936)
-
日语(代码页 932)
对于其他语言环境(例如英语、韩语、西欧等)的 Windows,由于 PHP 使用场景十分广泛,目前尚无法完全列举并杜绝所有潜在漏洞利用场景,因此建议用户进行全面的资产评估,核实自身使用场景,并将 PHP 更新至最新版本,确保安全。
场景一:在 CGI 模式下运行 PHP
在配置Action指令将相应的 HTTP 请求映射到 Apache HTTP Server 中的 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"
场景 2:公开 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的用户:
以下重写规则可用于阻止攻击。请注意,这些规则仅对繁体中文、简体中文和日语语言环境起到临时缓解作用。在实际操作中,仍然建议更新到修补版本或迁移架构。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
2. 对于使用 XAMPP for Windows 的用户:
截至本文撰写时,XAMPP 尚未针对此漏洞发布相应的更新文件。如果你确认不需要 PHP CGI 功能,可以通过修改以下 Apache HTTP Server 配置来避免受到该漏洞的影响:
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 进入新版本发布的准备阶段。
-
2024/06/06 - PHP 发布新版本8.3.8、8.2.20和8.1.29。
Security Alert: CVE-2024-4577 - PHP CGI Argument Injection Vulnerability
https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability-en/
原文始发于微信公众号(Ots安全):CVE-2024-4577 - PHP CGI 参数注入漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论