IPBUF安全漏洞报告
English
CVE-2026-7259 CVSS 6.5 中危

CVE-2026-7259 PHP空指针解引用致DoS漏洞

披露日期: 2026-05-10

漏洞信息

漏洞编号
CVE-2026-7259
漏洞类型
拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
PHP

相关标签

拒绝服务DoSPHP空指针解引用

漏洞概述

该漏洞影响PHP 8.2.31、8.3.31、8.4.21和8.5.6之前的多个版本。由于Oniguruma和mbfl库之间的编码列表不匹配,当用户控制的输入影响传递给mb_regex_encoding()的编码时,会触发空指针解引用。这导致PHP进程发生段错误并崩溃,从而造成拒绝服务。

技术细节

漏洞的核心机制在于PHP内部使用的Oniguruma正则表达式库与mbfl(多字节字符串过滤库)维护的编码列表存在不一致性。当调用mb_regex_encoding()函数时,如果传入的编码名称在Oniguruma中有效,但在mbfl的转换表中无效或处理逻辑不同,程序将无法正确处理该编码,进而导致空指针解引用。攻击者通过Web接口发送特制的恶意数据,使PHP脚本执行带有特定编码的mb_regex_encoding()调用。一旦触发,PHP进程会因非法内存访问而崩溃。在配置为多进程或多线程的服务器上,反复攻击可耗尽所有可用的工作进程,导致Web服务完全不可用。

攻击链分析

STEP 1
侦察
攻击者识别目标服务器运行的PHP版本低于受影响版本(如8.2.31之前)。
STEP 2
武器化
攻击者构造包含特定编码字符串的恶意数据,该编码在Oniguruma和mbfl之间存在处理差异。
STEP 3
交付
通过HTTP请求将恶意编码参数发送给目标PHP应用程序,该参数被传递给mb_regex_encoding()函数。
STEP 4
利用
PHP处理请求时,由于编码列表不匹配触发空指针解引用,导致PHP进程段错误崩溃。
STEP 5
影响
持续的攻击导致PHP-FPM或Apache工作进程不断崩溃,最终导致服务拒绝。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // PoC for CVE-2026-7259 PHP NULL Pointer Dereference // This script demonstrates the vulnerability by passing a potentially // problematic encoding to mb_regex_encoding(). // User-controlled input that influences the encoding // Note: The specific encoding string that triggers the mismatch // depends on the specific version lists of Oniguruma vs mbfl. $malicious_encoding = "SOME_MISMATCHED_ENCODING"; // Attempt to set the regex encoding using user input if (mb_regex_encoding($malicious_encoding)) { // Encoding was accepted by Oniguruma but might be invalid in mbfl context // Subsequent regex operations or the setting itself might trigger the crash echo "Encoding set to: " . mb_regex_encoding() . "\n"; // Triggering the dereference (Context dependent) // mb_ereg_match('.*', 'test'); } else { echo "Failed to set encoding.\n"; } ?>

影响范围

PHP 8.2.* < 8.2.31
PHP 8.3.* < 8.3.31
PHP 8.4.* < 8.4.21
PHP 8.5.* < 8.5.6

防御指南

临时缓解措施
建议立即升级PHP到最新版本以修复此漏洞。如果无法立即升级,应实施临时缓解措施:检查所有调用mb_regex_encoding()的代码,确保参数受信任,或通过白名单机制严格过滤输入的编码名称,防止传入异常编码导致崩溃。

参考链接