编辑 2024-04-25:澄清了 PHP 应用程序何时容易受到此错误的影响。
最近,在 **glibc** 版本 2.39 及更早版本(CVE-2024-2961)中发现了一个错误,其中字符集转换 **到** ISO-2022-CN-EXT 字符集中的缓冲区溢出会导致远程代码执行。
glibc 中的这种特定缓冲区溢出可以通过 PHP 利用,PHP 公开 glibc 的 iconv 功能,通过 iconv 扩展 进行字符集转换。虽然此错误在 PHP 引擎的上下文中是可利用的,但错误并不存在于 PHP 中。它也无法直接远程利用。
该错误是可利用的,**当且仅当** PHP 应用程序使用用户提供的字符集调用 iconv 函数 或 过滤器 时。
如果以下情况,应用程序 **不会** 受影响
- 已安装来自发行版的 Glibc 安全更新。
- 或者未加载 iconv 扩展。
- 或者已从 gconv-modules-extra.conf 中删除了易受攻击的字符集。
- 或者应用程序仅将特定允许的字符集传递给 iconv。
此外,在使用用户提供的字符集时,应用程序最好只接受其明确允许的特定字符集。如何做到这一点的一个例子是使用允许列表和 array_search()
函数在将编码传递给 iconv 之前检查编码。例如:array_search($charset, $allowed_list, true)
网上有很多标题为“缓解 PHP 的 iconv 漏洞(CVE-2024-2961)”或“PHP 遭到攻击”的报道。这些标题具有误导性,因为这 **不是** PHP 本身的错误。
如果您的 PHP 应用程序容易受到攻击,我们首先建议您检查您的 Linux 发行版是否已发布经过修补的 glibc 变体。 Debian、CentOS 等,已经发布了修补版本,请尽快升级。
glibc 更新发布后,更新 Linux 机器上的该软件包就足以缓解问题。您不需要更新 PHP,因为 glibc 是一个动态链接库。
如果您的 Linux 发行版尚未发布经过修补的 glibc 版本,则没有针对此问题的修复程序。但是,为服务器提供 PHP 的 GLIBC 漏洞 中描述了一种解决方法,其中解释了如何从 glibc 中删除有问题的字符集。对于系统上可用的每个 gconv-modules-extra.conf 文件执行此过程。
Windows 上的 PHP 用户不受影响。
因此,不会为该漏洞发布新的 PHP 版本。