PHP 官方近日发布了针对两项安全漏洞的补丁更新,这两项漏洞可能导致基于 PHP 的应用面临 SQL 注入 与 拒绝服务(DoS)攻击 风险。漏洞编号分别为 CVE-2025-1735 和 CVE-2025-6491,受影响版本包括 PHP 8.1.33、8.2.29、8.3.23 与 8.4.10 之前的所有版本,主要波及使用 PostgreSQL 数据库与 SOAP 服务的应用系统。
CVE-2025-1735:pgsql 扩展缺失错误检查,导致 SQL 注入与崩溃风险
该漏洞源自 PHP 中 PostgreSQL(pgsql)扩展的错误处理机制缺陷。当 PHP 调用 PostgreSQL 提供的 PQescapeStringConn()
和 PQescapeIdentifier()
函数时,未能正确传递错误参数,导致函数执行出错时,PHP 无法感知或响应,形成安全隐患。
“具体来说,PHP 未向 PQescapeStringConn()
传入 error
参数,导致该函数在处理无效编码或异常输入时无法返回错误状态。”——官方通告指出。
一旦逃逸函数无法识别非法字符或编码错误,PHP 会继续处理错误数据,进而触发 SQL 注入风险,或因指针为空发生崩溃(Null Pointer Dereference)。
此外,开发者还指出:“多个 PQescapeIdentifier()
的调用未检查返回值是否为 NULL,可能在后续调用中触发崩溃或出现未定义行为(Undefined Behavior)。”
尽管 PostgreSQL 本身已强化对编码异常的防护,但 PHP 的 pgsql 扩展未跟进相应的错误检测机制,形成“最后一道防线失守”的高危状态。
CVE-2025-6491:SOAP 扩展处理超大 XML 名称时出现空指针引用,导致崩溃
该漏洞由卡塔尔计算研究院(Qatar Computing Research Institute)的 Ahmed Lekssays 报告,影响 PHP 中 SOAP 扩展的命名空间处理逻辑。
攻击者可通过构造一个 超过2GB长度的 XML 完整限定名,诱使 SoapVar
实例在解析过程中发生空指针引用,最终引发段错误(Segmentation Fault):“如果使用长度大于 2GB 的 QName 创建 SoapVar 实例,将导致 NULL 指针引用,从而触发崩溃。”——漏洞通报指出。
漏洞发生在 PHP SOAP 实现(依赖 libxml2
库)与超长 XML 命名空间前缀交互时。当前缀长度超过整数上限(int max),xmlNodeSetName()
函数会静默失败,留下非法 XML 节点,随后在序列化过程中触发崩溃。
官方示例中,攻击者可使用简单脚本:
在 SOAP 操作中执行该代码将导致 PHP 进程异常终止。使用 Valgrind 工具确认报错为:“Invalid read of size 1 at address 0x0”(非法内存读取)
该漏洞对暴露 SOAP 接口、允许外部输入的 API 构成 拒绝服务攻击(DoS) 的极大威胁,攻击门槛低、影响面广。
修复版本与安全建议:
PHP 官方已在以下版本中修复上述漏洞:
-
PHP 8.1.33
-
PHP 8.2.29
-
PHP 8.3.23
-
PHP 8.4.10
所有在生产环境中使用 PostgreSQL 扩展 或 SOAP 服务 的开发者与运维人员,强烈建议:
-
立即升级至官方修复版本
-
审计现有代码中对
PQescapeStringConn()
和PQescapeIdentifier()
的调用方式 -
对接收 XML 的接口进行输入长度控制与格式验证
-
在 WAF 或应用层引入请求体大小限制,降低DoS攻击风险
这两项漏洞提醒开发者,在处理外部输入与底层函数交互时,务必强化错误检查与内存安全防护,尤其是在涉及数据库与 XML 协议时。
发表评论
您还未登录,请先登录。
登录