IPBUF安全漏洞报告
English
CVE-2026-34216 CVSS 6.6 中危

CVE-2026-34216 CtrlPanel远程代码执行漏洞

披露日期: 2026-05-19

漏洞信息

漏洞编号
CVE-2026-34216
漏洞类型
远程代码执行
CVSS评分
6.6 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
CtrlPanel

相关标签

RCEPHP Object InjectionCtrlPanelAuthenticatedCVE-2026-34216

漏洞概述

CtrlPanel是面向托管商的开源计费软件。在1.1.1及更早版本中,系统存在严重的远程代码执行漏洞。其管理员设置更新端点直接从用户请求中获取类名,并用于实例化对象和调用静态方法,缺乏必要的安全白名单验证。拥有管理员权限的攻击者可利用Composer自动加载机制实例化任意类,通过触发构造函数或魔术方法执行恶意代码。官方已在1.2.0版本中修复此问题。

技术细节

该漏洞的核心在于CtrlPanel处理管理员设置更新请求时的逻辑缺陷。当调用update()方法时,系统直接从HTTP请求中读取settings_class参数,并将其传递给new $settings_class()进行对象实例化以及$settings_class::getValidations()进行静态方法调用。关键问题在于系统未对输入的类名进行白名单验证。由于PHP运行时会利用Composer自动加载器解析类名,这意味着应用程序及其依赖库中的任何可自动加载的类都可以被实例化。攻击者可以指定一个已知的具有危险魔术方法(如__construct、__wakeup、__toString)的类,通过精心构造的数据触发这些方法,形成PHP对象注入(POP)链,最终在服务器端执行任意系统命令。此攻击需要高权限用户身份,但一旦成功,将完全控制服务器。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标运行的是CtrlPanel 1.1.1或更早版本,并枚举其Composer依赖库以寻找可利用的Gadget链。
STEP 2
步骤2:获取凭证
由于漏洞需要高权限(PR:H),攻击者通过钓鱼或暴力破解获取管理员账户的登录凭证。
STEP 3
步骤3:发送恶意请求
攻击者向管理员设置更新端点发送POST请求,在settings_class参数中注入恶意的类名。
STEP 4
步骤4:实例化对象
后端代码直接使用注入的类名调用new $settings_class(),触发该类的__construct方法或魔术方法。
STEP 5
步骤5:执行代码
利用POP链触发反序列化或对象注入逻辑,最终在服务器端执行任意系统命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL example url = "http://target-host/admin/settings/update" # Attacker needs to be authenticated as Admin cookies = { "session_cookie": "valid_admin_session_id" } # The vulnerable parameter 'settings_class' accepts any FQCN # An attacker would choose a class available in the Composer autoloader # that has a dangerous __construct or magic method (Gadget chain). # Example: Using a hypothetical logging class that triggers code execution. payload = { "settings_class": "Monolog\\Handler\\SyslogUdpHandler", # Replace with actual gadget class present in the vendor folder "other_params": "value" } try: response = requests.post(url, data=payload, cookies=cookies) if response.status_code == 200: print("Request sent successfully, check for RCE trigger.") else: print(f"Request failed with status: {response.status_code}") except Exception as e: print(f"An error occurred: {e}")

影响范围

CtrlPanel <= 1.1.1

防御指南

临时缓解措施
如果无法立即升级,应严格限制管理员账户的访问权限,并实施网络访问控制列表(ACL),仅允许受信任的IP地址访问管理后台。同时,监控服务器日志中是否存在异常的类实例化行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表