近日,ThinkPHP 5.0-5.0.23被爆出存在远程代码执行漏洞。经绿盟科技烈鹰战队测试,ThinkPHP 5.0-5.0.23、5.1.0-5.1.31与5.2.*全版本也受此漏洞影响,漏洞原理相似,Linux和Windows系统均可触发此漏洞。
■ 预警编号 NS-2019-0002-1
■ 危害等级 高,ThinkPHP应用广泛,此漏洞可导致远程代码执行。
漏洞概述
近日,ThinkPHP 5.0-5.0.23被爆出存在远程代码执行漏洞。经绿盟科技烈鹰战队测试,ThinkPHP 5.0-5.0.23、5.1.0-5.1.31与5.2.*全版本也受此漏洞影响,漏洞原理相似,Linux和Windows系统均可触发此漏洞。
此漏洞由于Request类method方法未做好安全过滤,对用户可控的数据处理不当而导致。攻击者通过变量覆盖可实现对该类任意函数的调用,构造相应请求可对Request类属性值进行覆盖,请相关用户引起关注,及时采取防护措施。
漏洞测试结果如下:
影响范围
受影响版本:
- ThinkPHP < 5.0.24
- ThinkPHP < 5.1.32
- ThinkPHP 5.2.*
不受影响版本:
- ThinkPHP 5.0.24
- ThinkPHP 5.1.32
漏洞排查
版本检查
使用文本编辑器打开thinkphp\base.php文件,在常量定义的代码中即可获取当前框架的版本:
若版本号在受影响范围内,则受此漏洞影响,请相关用户及时采取防护措施,修复此漏洞。
另:从V5.1.20版本开始,ThinkPHP增加了查看框架版本的指令。用户可通过如下指令查看当前框架版本。
php think version |
漏洞防护
代码修复
该漏洞存在于ThinkPHP处理请求的关键类Request中。用户可通过改进Request类,对此漏洞进行修复。
- ThinkPHP 5.0.*
使用ThinkPHP 5.0.*版本的用户可参考下列链接通过修复代码对此漏洞进行修复:
https://github.com/top-think/framework/commit/4a4b5e64fa4c46f851b4004005bff5f3196de003
使用编辑器打开\thinkphp\library\think\Request.php,找到第525、526行代码:
$this->method = strtoupper($_POST[Config::get(‘var_method’)]);
$this->{$this->method}($_POST); |
将其修改为如下代码:
$method = strtoupper($_POST[Config::get('var_method')]); if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) { $this->method = $method; $this->{$this->method}($_POST); }
保存即可。
- ThinkPHP 5.1.*及2.*
版本号为ThinkPHP 5.1.*及5.2.*的用户可参考下列步骤对此漏洞进行修复。
使用编辑器打开\thinkphp\library\think\Request.php,找到method函数,将该函数修改为如下代码:
public function method($origin = false) { if ($origin) { // 获取原始请求类型 return $this->server('REQUEST_METHOD') ?: 'GET'; } elseif (!$this->method) { if (isset($_POST[$this->config['var_method']])) { $method = strtolower($_POST[$this->config['var_method']]); if (in_array($method, ['get', 'post', 'put', 'patch', 'delete'])) { $this->method = strtoupper($method); $this->{$method} = $_POST; } else { $this->method = 'POST'; } unset($_POST[$this->config['var_method']]); } elseif ($this->server('HTTP_X_HTTP_METHOD_OVERRIDE')) { $this->method = strtoupper($this->server('HTTP_X_HTTP_METHOD_OVERRIDE')); } else { $this->method = $this->server('REQUEST_METHOD') ?: 'GET'; } } return $this->method; }
产品防护
绿盟科技防护产品可对此漏洞进行防护。部署有IPS的用户,可通过更新规则对此漏洞进行防护。规则更新情况如下:
安全防护产品 | ThinkPHP防护版本 | 规则版本号 | 规则编号 |
IPS | ThinkPHP 5.0.* | 5.6.7.752
5.6.8.756 5.6.9.19516 5.6.10.17650 |
24375 |
ThinkPHP 5.1.*
ThinkPHP 5.2.* |
即将发布,敬请关注。 | 即将发布,敬请关注。 |
产品规则升级访问地址:
- 入侵防护系统(IPS)http://update.nsfocus.com/update/listIps
版本升级
针对此漏洞,官方发布了5.0.*和5.1.*的修复版本,受影响用户可通过版本升级的方式对此漏洞进行防护。ThinkPHP5支持使用Composer来安装升级,建议先备份application和修改过的目录,在网站根目录下打开cmd,执行如下命令之一:
composer update topthink/framework 5.0.24
composer update topthink/framework=5.0.24 composer update topthink/framework:5.0.24 |
注:若用户使用的为早期ThinkPHP5版本,在升级过程中可能存在兼容性问题,用户可参考官方手册的升级指导章节进行升级。参考链接如下:
https://www.kancloud.cn/manual/thinkphp5/163239
https://www.kancloud.cn/manual/thinkphp5_1/354155
声明
本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。
绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。
关于绿盟科技
北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。
基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。
北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。