漏洞描述

框架/软件名称: Laravel框架 版本: Laravel <= 8.4.2 CVE编号: CVE-2021-3129

漏洞简介

CVE-2021-3129漏洞是Laravel框架中的一个安全漏洞。当Laravel开启了Debug模式时,由于Laravel自带的Ignition组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。

影响

攻击者可以利用这个漏洞,执行任意的指令,从而获得系统的完全控制权,可能会造成严重的安全后果和数据损失。

漏洞细节

在 laravel框架的ExecuteSolutionController 中,调用 __invoke 方法时,会向MakeViewVariableOptionalSolution.php的run方法,而在run方法中存在危险函数file_put_contents,通过可控参数$parameters[‘viewFile’]可以进行任意文件上传,上传后配合phar反序列化实现命令执行。

漏洞利用

docker本地搭建laravel漏洞环境 此时查看.env发现appkey是空的 点击generate app key抓包 发包后再次查看.env,发现已经被赋予了一个值 简单验证 下载漏洞exp修改为自己的地址,和phpggc放在同一目录

修复建议

参数验证:确保传递给 file_put_contents 的路径参数经过严格验证。例如,确保路径始终位于预定的目录内,并且不允许目录遍历(如 ../)。 白名单机制:仅允许写入到特定的已知文件或目录。 减少权限:确保服务器的运行用户只有写入所需文件或目录的权限,而没有其他不必要的写权限。 输入清理:确保所有从用户输入获取的数据都经过适当的清理和转义,以防止任意代码注入。