CVE-2026-39850Yii 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),完全控制服务器。