PHP曝两大高危漏洞:CVE-2025-1735(SQL注入/崩溃)与CVE-2025-6491(SOAP拒绝服务)威胁众多Web应用

阅读量10769

发布时间 : 2025-07-04 15:07:06

x
译文声明

本文是翻译文章,文章原作者 Ddos,文章来源:securityonline

原文地址:https://securityonline.info/php-flaws-cve-2025-1735-sqli-crash-cve-2025-6491-soap-dos-threaten-php-apps/

译文仅供参考,具体内容表达以及含义原文为准。

PHP 官方近日发布了针对两项安全漏洞的补丁更新,这两项漏洞可能导致基于 PHP 的应用面临 SQL 注入拒绝服务(DoS)攻击 风险。漏洞编号分别为 CVE-2025-1735CVE-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 节点,随后在序列化过程中触发崩溃。

官方示例中,攻击者可使用简单脚本:

<?php
ini_set('memory_limit', '6144M');
// 2 GB prefix to overflow int (INT_MAX = 2147483647)
$hugePrefix = str_repeat("A", 0x7fffffff);
// This is the local part of the XML name
$localName = "Element";
// This will be passed to xmlBuildQName(prefix: hugePrefix, ncname: localName)
$soapVar = new SoapVar(
    "value",
    XSD_STRING,
    null,
    null,
    "{$hugePrefix}:{$localName}" // Triggers xmlBuildQName
);
$options = [
    'location' => 'http://127.0.0.1/', // localhost dummy
    'uri' => 'urn:dummy',
    'trace' => 1,
    'exceptions' => true,
];
try {
    $client = new SoapClient(null, $options);
    $client->__soapCall("DummyFunction", [$soapVar]);
} catch (Exception $e) {
    echo "Caught Exception: " . $e->getMessage() . "\n";
}
?>

在 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 协议时。

 

 

本文翻译自securityonline 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
安全客
分享到:微信

发表评论

安全客

这个人太懒了,签名都懒得写一个

  • 文章
  • 142
  • 粉丝
  • 1

热门推荐

文章目录
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66