[翻译]安全警报:CVE-2024-4577 – PHP CGI 参数注入漏洞

[翻译]安全警报:CVE-2024-4577 – PHP CGI 参数注入漏洞

walker1995 沃克学安全 2024-06-12 19:46

安全警报:CVE-2024-4577 – PHP CGI 参数注入漏洞

原文地址:
https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability-en/

发表时间:2024-06-06

在 DEVCORE 持续的进攻性研究中,我们团队发现了 PHP 的一个远程代码执行漏洞。由于该编程语言在 Web 生态中的广泛使用,且极易被利用,DEVCORE 将其严重程度评定为严重,并及时向 PHP 官方团队报告。官方团队已于 2024/06/06 发布补丁,披露详情请见时间线。

描述

在实现PHP时,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

在 Apache HTTP Server 中配置 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 目录中也会受到此漏洞的影响。常见场景包括但不限于:

1.将 php.exe 或 php-cgi.exe 复制到 /cgi-bin/ 目录。

2.通过 ScriptAlias 指令暴露 PHP 目录,例如:

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]
  1. 对于使用 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。

参考

  • PHP Security Advisory – PHP RCE: A Bypass of CVE-2012-1823, Argument Injection in PHP-CGI
    (to be announced)


https://github.com/php/php-src/security/advisories/GHSA-3qgc-jrrr-25jv)

MS-UCODEREF – Windows Protocols Unicode Reference


https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-ucoderef/d1980631-6401-428e-a49d-d71394be7da8)

CERT/CC VU#520827 – PHP-CGI query string parameter vulnerability


https://www.kb.cert.org/vuls/id/520827)

如果喜欢小编的文章,记得多多转发,点赞+关注支持一下哦~,您的点赞和支持是我最大的动力~