CVE-2025-14178CVE-2025-14178是PHP中一个堆缓冲区溢出漏洞,存在于array_merge()函数中。该漏洞影响PHP 8.1、8.2、8.3、8.4和8.5多个版本。当使用array_merge()合并数组时,如果packed数组的元素总数超过32位整型限制或HT_MAX_SIZE,将导致整数溢出,进而引发堆缓冲区溢出。攻击者可通过构造恶意数组数据利用此漏洞,可能导致内存损坏、服务器崩溃或执行任意代码,从而影响系统的完整性和可用性。该漏洞的CVSS评分为6.5,属于中等严重程度,攻击向量为网络,无需认证和用户交互即可尝试利用。
漏洞根源在于PHP内核中array_merge()函数在预计算合并后数组元素数量时使用了zend_hash_num_elements()函数,该函数返回size_t类型。当合并多个packed数组时,元素总数累加过程中可能发生整数溢出。特别是在元素数量接近或超过INT_MAX(约21.47亿)时,size_t到int的隐式转换会导致错误的计数结果。攻击者可通过创建包含大量元素的数组,然后调用array_merge()触发此问题。漏洞利用可导致堆缓冲区溢出,可能覆盖相邻内存区域,破坏堆结构,最终实现代码执行或造成服务拒绝。