0x00 前言
Laravel 是一个后端框架,提供了构建现代 Web 应用所需的所有功能,例如路由、验证、缓存、队列、文件存储等等。
Livewire 是一个全栈框架,专为 Laravel 开发,它允许开发者使用 PHP 而不是 JavaScript 来构建实时的用户界面。
0x01 漏洞描述
由于Laravel Livewire上传文件时根据MIME类型猜测文件扩展名,而不验证文件名中实际的文件扩展名,攻击者可以上传具有MIME类型(如:image/png)和 “.php”文件扩展名的文件来绕过验证,满足一定条件可以进行远程代码执行。
0x02 CVE编号
CVE-2024-47823
0x03 影响版本
0x04 漏洞详情
https://github.com/livewire/livewire/security/advisories/GHSA-f3cx-396f-7jqp
问题代码:
class SomeComponent extends Component
{
use WithFileUploads;
#[Validate('image|extensions:png')]
public $file;
public function save()
{
$this->validate();
$this->file->storeAs(
path: 'images',
name: $this->file->getClientOriginalName(),
options: ['disk' => 'public'],
);
}
}
0x05 参考链接
https://github.com/livewire/livewire/security/advisories/GHSA-f3cx-396f-7jqp