CVE-2025-66438CVE-2025-66438是Frappe ERPNext中存在的一个高危服务端模板注入(SSTI)漏洞。该漏洞存在于ERPNext的Print Format渲染机制中,攻击者可以通过在Print Format的html字段中注入恶意Jinja2表达式来执行任意代码。虽然ERPNext使用了Jinja2的SandboxedEnvironment来提供安全保障,但通过get_safe_globals()函数暴露了敏感的系统函数如frappe.db.sql,攻击者可以利用这些函数进行数据库查询,从而获取敏感信息包括数据库版本、schema详情以及其他敏感数据。攻击者需要具备ERPNext系统账号,并且拥有创建或修改Print Format的权限即可利用此漏洞。由于该漏洞可通过网络远程利用且不需要用户交互,对受影响系统构成严重安全威胁。
该漏洞的根本原因在于ERPNext的Print Format渲染机制存在安全缺陷。具体来说,frappe.www.printview.get_html_and_style() API在处理Print Format文档时会调用get_rendered_template()函数,该函数使用frappe.render_template(template, doc)对Print Format中的html字段进行渲染。ERPNext虽然配置了Jinja2的SandboxedEnvironment来防止模板注入,但通过get_safe_globals()向模板上下文暴露了大量敏感函数和对象,其中最关键的是frappe.db.sql函数。攻击者可以在创建或修改Print Format时,在html字段中插入恶意Jinja2表达式,如使用{{ frappe.db.sql('SELECT version()') }}来执行SQL查询。由于渲染过程在服务器端执行,查询结果会被直接返回给攻击者,从而实现信息泄露。攻击者还可以利用其他暴露的全局函数进行更深层次的信息探测和敏感数据获取。