CVE-2025-66435CVE-2025-66435是Frappe ERPNext中发现的一个服务器端模板注入(SSTI)漏洞。该漏洞存在于get_contract_template方法中,允许经过身份验证的低权限攻击者通过contract_terms字段注入恶意Jinja2模板表达式。攻击者可以利用frappe.render_template()函数渲染用户可控的模板内容,虽然Frappe使用了自定义的SandboxedEnvironment,但通过get_safe_globals()仍可访问危险函数如frappe.db.sql,从而实现数据库信息泄露和受限的服务器端代码执行。此漏洞影响Frappe ERPNext 15.89.0及之前版本,CVSS评分为4.3,属于中等严重程度。攻击者需要拥有创建或修改Contract Template的权限,但由于认证要求为低权限,对系统安全构成实质性威胁。
该漏洞的技术核心在于Frappe ERPNext的get_contract_template方法不安全地使用了frappe.render_template()函数。当渲染contract_terms字段时,系统使用攻击者控制的上下文(doc)作为模板变量。Frappe框架虽然实现了自定义的Jinja2 SandboxedEnvironment来限制模板执行,但get_safe_globals()函数仍然暴露了多个危险对象,包括frappe.db.sql等数据库操作接口。攻击者可以通过构造特定的Jinja2表达式来访问这些受限但仍然危险的全局函数。例如,使用类似{{ frappe.db.sql('SELECT * FROM __auth') }}的payload可以执行SQL查询并泄露数据库内容。更复杂的payload可能实现更广泛的代码执行,但由于Sandbox的限制,攻击者的行动空间受到一定约束。漏洞的利用需要攻击者具备有效的认证凭证,并且拥有对Contract Template的创建或修改权限。