FastAdmin是一款基于ThinkPHP和Bootstrap的极速后台开发框架。
2021年3月28日,360漏洞云漏洞研究员发现,FastAdmin框架存在有条件RCE漏洞,当攻击者具有一定用户权限的前提下,可以实现任意文件上传,导致RCE。--360漏洞云
漏洞危害范围:< V1.2.0.20210401_beta
由于FastAdmin的前台文件上传功能中提供了分片传输功能, 但在合并分片文件时因对文件路径的拼接处理不当导致可上传任意文件。
限制条件:
漏洞文件位于:application/api/controller/Common.php
在上传文件时如果POST传递 chunkid
参数即可进行分片文件传输, 其会调用 Upload#chunk
方法, 参数均可控。
一起梳理一下chunk
方法, 代码不多, 一行一行作解释。首先判断 Content-Type
不为 application/obtet-stream
则抛出 UploadException
异常。接着会拼接分片文件存储路径为 runtime/chunks
。文件名为 $chunkid
+ -
+ $chunkindex
+ .part
。即当我们传递 $chunkid
为 hhh.php
, $chunkindex
为0, 则拼接出的分片文件名为 hhh.php-0.part
上传测试:
分片文件路径:
回到 upload
方法, 当 $action
为 merge
时会调用 Upload#merge
方法合并分片文件, 首先其将分片文件路径和 $chunkid
拼接, 然后合并所有分片文件。
调用 merge
方法合并分片文件: