报告编号:B6-2019-011101
报告来源:360-CERT
报告作者:360-CERT
更新日期:2019-01-11
0x00 事件背景
2019年1月11日,360CERT发现某安全社区出现关于ThinkPHP5 RCE漏洞的威胁情报,不久之后ThinkPHP5官方与GitHub发布更新。
该更新修复了一处严重漏洞,该漏洞可导致远程命令代码执行
0x01 影响范围
ThinkPHP 5.0.x
- 5.0.x ~ 5.0.23
0x02 修复建议
官方在GitHub中进行了更新:版本更新
在method方法中添加如下代码:
unset($_POST[Config::get('var_method')]);
0x03 漏洞验证
由于该漏洞危害高,影响严重,暂不公布详情。
0x04 漏洞分析
漏洞主要出现在ThinkPHP Request类的method方法中 (thinkphp/library/think/Request.php)
由于ThinkPHP 在默认的配置中支持配置“表单请求类型伪装变量”,默认情况下该变量值为:_method
因此可以用$_POST作为函数的参数,利用method方法,通过“表单请求类型伪装变量”进行变量覆盖实现对该类任意函数的调用。
Request类的构造函数中,主要对$option数组进行遍历,当$option的键名为该类属性时,则将该类同名的属性赋值为$options中该键的对应值。
因此可以构造请求来实现对Request类属性值的覆盖,例如覆盖filter属性。filter属性保存了用于全局过滤的函数。
0x05 时间线
2019-01-11 11:20 360CERT发现漏洞威胁情报
2019-01-11 16:05 ThinkPHP发布补丁更新
2019-01-11 16:30 360CERT发布预警分析
0x06 参考链接
- ThinkPHP5 github更新
https://github.com/top-think/framework/commit/c255c22b2f5fa30f320ecf6c1d29f7740eb3e8be