
PHP 最近发布了维护更新,修复了三个安全漏洞,其中两个高危漏洞可能导致SQL注入和越界内存写入攻击。
这些漏洞影响Web应用中常用的可选PHP扩展:ext-pgsql、ext-bcmath和ext-phar。建议各组织尽快升级PHP环境,尤其是那些处理不可信输入或上传归档文件的应用。
1. PostgreSQL扩展SQL注入漏洞
最严重的漏洞(CVE-2026-17543)影响PostgreSQL扩展,存在于 php_pgsql_convert() 函数中。pg_insert()、pg_update()、pg_select() 和 pg_delete() 等便捷函数均会调用该函数。存在缺陷的代码使用 PQescapeStringConn() 对用户提供的值进行转义,随后将结果放入格式为 E'…' 的转义字符串常量中。
当PostgreSQL的 standard_conforming_strings 设置开启时(自PostgreSQL 9.1版本起该设置默认启用),反斜杠在此上下文中无法被安全转义。
攻击者可利用该漏洞注入SQL命令,从而可能访问或修改数据库数据。PHP通过在处理这些参数时改用非转义字符串常量修复了该问题。
2. BCMath扩展内存损坏漏洞
第二个高危漏洞(CVE-2026-17544)影响BCMath扩展的 bccomp() 函数。当应用将攻击者控制的数字字符串与特定的 scale 值一起传入时,便会触发该问题。
该bug位于 bc_str2num() 函数中,PHP在此截断小数位并移除末尾的零。代码减少了分配的缓冲区大小,但未更新用于标记已复制小数数据末尾的指针。
因此,PHP可能复制超过所分配缓冲区容量的数据,导致越界写入,进而破坏栈或堆内存。根据应用条件和PHP运行时环境的不同,内存损坏漏洞可能导致进程崩溃,或为更严重的利用创造条件。
该补丁在截断零值后更新小数数据的末尾指针,确保复制的数据与分配的缓冲区大小一致。
3. Phar扩展拒绝服务漏洞
第三个漏洞(CVE-2026-7260)影响Phar扩展,可导致PHP进程崩溃。
该漏洞源于 phar_get_link_source() 函数,该函数会递归追踪Phar归档中存储的符号链接,且未强制实施递归深度限制,也未检测循环引用。
包含循环符号链接的恶意tar格式Phar归档可触发无限递归,导致PHP因段错误而崩溃,从而造成中等级别的拒绝服务(CVSS 6.5)。
该漏洞需要用户或应用处理特制的归档文件才能触发。不过,它仍可能破坏自动检查、解压或读取上传文件的服务。
升级建议
受影响的用户应将PHP升级至 8.2.33、8.3.33、8.4.24 或 8.5.9 版本。
PHP管理员还应审查依赖PostgreSQL辅助函数、使用外部提供值执行BCMath运算,以及解析Phar或tar归档的文件上传流程的相关应用。
参考来源:PHP Patches Three Flaws Enabling SQL Injection, Memory Corruption and Server Crashes
更多PHP及后端安全动态,可关注云栈社区。
|