IPBUF安全漏洞报告
English
CVE-2026-35477 CVSS 5.5 中危

CVE-2026-35477 InvenTree沙箱绕过致RCE

披露日期: 2026-04-08

漏洞信息

漏洞编号
CVE-2026-35477
漏洞类型
服务端模板注入 (SSTI)
CVSS评分
5.5 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
InvenTree

相关标签

SSTIRCEInvenTreeJinja2沙箱绕过

漏洞概述

InvenTree 1.2.3至1.2.6版本存在沙箱绕过漏洞。由于验证器与渲染器使用的Jinja2环境不一致,且验证逻辑存在差异,拥有员工权限的攻击者可构造恶意模板绕过验证并执行任意代码。

技术细节

该漏洞的核心在于Jinja2模板引擎在验证与渲染阶段的环境不一致性。在修复CVE-2026-27629时,开发者仅将验证器升级为`jinja2.sandbox.SandboxedEnvironment`,却遗漏了`part/helpers.py`中的实际渲染器,后者仍使用非沙箱的`jinja2.Environment`。更关键的是,验证器使用`pk=None`的虚拟Part实例,而渲染时使用真实实例,这导致条件模板表达式在两个阶段行为迥异。拥有员工权限的攻击者可利用这一逻辑漏洞,构造特定的恶意模板载荷。该载荷在通过沙箱验证时看似无害,但在实际渲染时,由于绕过了沙箱限制,将直接解析并执行任意Python代码,导致远程代码执行(RCE)。

攻击链分析

STEP 1
获取权限
攻击者需要获取InvenTree系统的员工账户权限。
STEP 2
访问配置
登录后,进入系统设置,找到部件名称格式(PART_NAME_FORMAT)配置项。
STEP 3
构造Payload
攻击者构造利用Jinja2条件判断的恶意模板,利用pk=None的特性绕过沙箱验证。
STEP 4
保存并触发
保存恶意配置。当系统渲染包含该格式的部件时,将触发非沙箱环境下的代码执行。
STEP 5
执行代码
服务器执行攻击者指定的任意Python代码,可能导致系统被控。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC Concept: Bypass validation using pk condition # Validation (pk=None) renders the safe part. Rendering (pk=RealID) executes the exploit. template_payload = "{% if pk is none %}Valid Name{% else %}{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}{% endif %}" # Note: The attacker inputs this into the PART_NAME_FORMAT setting.

影响范围

InvenTree 1.2.3
InvenTree 1.2.4
InvenTree 1.2.5
InvenTree 1.2.6

防御指南

临时缓解措施
建议立即升级到修复版本。如果无法立即升级,应暂时撤销非必要员工的设置访问权限,并手动检查所有部件名称格式配置,确保不包含任何Jinja2模板语法。

参考链接

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