IPBUF安全漏洞报告
English
CVE-2026-41570 CVSS 7.8 高危

CVE-2026-41570 PHPUnit远程代码执行漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-41570
漏洞类型
远程代码执行
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
PHPUnit

相关标签

RCEPHPUnit代码注入INI注入

漏洞概述

PHPUnit在特定版本中存在安全漏洞,由于在向子进程传递PHP INI设置时未对特殊字符(如换行符)进行过滤,导致攻击者可通过篡改INI值注入恶意指令。攻击者可利用此漏洞修改`auto_prepend_file`配置,从而在子测试进程中执行任意代码,实现远程代码执行。

技术细节

该漏洞的核心原理在于PHPUnit处理测试隔离时的不当操作。当PHPUnit运行隔离测试或PHPT测试时,它会将父进程的PHP INI设置通过命令行参数`-d name=value`传递给子进程。然而,程序未对INI元字符(如双引号、分号、换行符)进行中和处理。特别是换行符,在PHP INI解析器中被视为指令分隔符。如果攻击者能够影响单个INI配置的值,并在其中注入换行符,子进程的解析器会将换行后的内容误认为是一个新的INI指令。利用这一机制,攻击者可以注入`auto_prepend_file`、`extension`或`disable_functions`等关键配置。特别是将`auto_prepend_file`设置为攻击者可控的恶意文件路径,PHP引擎在启动子进程时会自动包含并执行该文件中的代码,从而导致远程代码执行。

攻击链分析

STEP 1
步骤1
攻击者确认目标环境使用受影响版本的PHPUnit(12.5.21或13.1.5及以下)。
STEP 2
步骤2
攻击者寻找能够影响PHPUnit子进程INI配置的入口点,例如测试配置文件或环境变量。
STEP 3
步骤3
攻击者构造包含换行符的恶意Payload,旨在注入`auto_prepend_file`指令指向恶意文件。
STEP 4
步骤4
触发PHPUnit执行测试,导致其生成子进程并传递被篡改的INI参数。
STEP 5
步骤5
子进程PHP解析器解析INI指令,加载并执行攻击者指定的前置文件,实现代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // PoC for CVE-2026-41570 // This demonstrates how an attacker controlling an INI value can inject a newline // to add a malicious directive (e.g., auto_prepend_file). // Assume the attacker can control the value of an INI setting passed to PHPUnit. // The payload below injects a newline character to break the directive and add a new one. $malicious_payload = "original_value\nauto_prepend_file=/tmp/evil.php"; // In a real vulnerable scenario, this might be passed via environment variables or php.xml. // When PHPUnit spawns the child process with -d custom_option="$malicious_payload", // the child PHP process interprets it as: // 1. custom_option = "original_value" // 2. auto_prepend_file = "/tmp/evil.php" // The file /tmp/evil.php would contain the attacker's PHP code (e.g., shell_exec). echo "Payload: " . $malicious_payload . "\n"; echo "Resulting INI directives in child process:\n"; echo "custom_option=original_value\nauto_prepend_file=/tmp/evil.php\n"; ?>

影响范围

PHPUnit 12.5.21及之前版本
PHPUnit 13.1.5及之前版本

防御指南

临时缓解措施
建议用户尽快将PHPUnit框架升级至修复版本。如果暂时无法升级,应严格限制测试环境的运行权限,确保攻击者无法修改INI配置值,并避免在不受信任的路径下运行测试。

参考链接